Reference to a remote client connected to this server

Introduced properties

fun connected: Bool

gamnit :: RemoteClient :: connected

Is this client connected?
fun handshake: Bool

gamnit :: RemoteClient :: handshake

Check for compatibility with the client
fun reader: MsgPackDeserializer

gamnit :: RemoteClient :: reader

MsgPackDeserializer used to receive data from this client through socket
protected fun reader=(reader: MsgPackDeserializer)

gamnit :: RemoteClient :: reader=

MsgPackDeserializer used to receive data from this client through socket
fun socket: TCPStream

gamnit :: RemoteClient :: socket

Communication socket with the client
protected fun socket=(socket: TCPStream)

gamnit :: RemoteClient :: socket=

Communication socket with the client
fun writer: MsgPackSerializer

gamnit :: RemoteClient :: writer

MsgPackSerializer used to send data to this client through socket
protected fun writer=(writer: MsgPackSerializer)

gamnit :: RemoteClient :: writer=

MsgPackSerializer used to send data to this client through socket

Redefined properties

redef type SELF: RemoteClient

gamnit $ RemoteClient :: SELF

Type of this instance, automatically specialized in every class
redef init init

gamnit $ RemoteClient :: init

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun connected: Bool

gamnit :: RemoteClient :: connected

Is this client connected?
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun handshake: Bool

gamnit :: RemoteClient :: handshake

Check for compatibility with the client
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun reader: MsgPackDeserializer

gamnit :: RemoteClient :: reader

MsgPackDeserializer used to receive data from this client through socket
protected fun reader=(reader: MsgPackDeserializer)

gamnit :: RemoteClient :: reader=

MsgPackDeserializer used to receive data from this client through socket
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun socket: TCPStream

gamnit :: RemoteClient :: socket

Communication socket with the client
protected fun socket=(socket: TCPStream)

gamnit :: RemoteClient :: socket=

Communication socket with the client
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun writer: MsgPackSerializer

gamnit :: RemoteClient :: writer

MsgPackSerializer used to send data to this client through socket
protected fun writer=(writer: MsgPackSerializer)

gamnit :: RemoteClient :: writer=

MsgPackSerializer used to send data to this client through socket
package_diagram gamnit::RemoteClient RemoteClient core::Object Object gamnit::RemoteClient->core::Object

Parents

interface Object

core :: Object

The root of the class hierarchy.

Class definitions

gamnit $ RemoteClient
# Reference to a remote client connected to this server
class RemoteClient

	# Communication socket with the client
	var socket: TCPStream

	# Is this client connected?
	fun connected: Bool do return socket.connected

	# `MsgPackSerializer` used to send data to this client through `socket`
	var writer: MsgPackSerializer is noinit

	# `MsgPackDeserializer` used to receive data from this client through `socket`
	var reader: MsgPackDeserializer is noinit

	init
	do
		# Setup serialization
		writer = new MsgPackSerializer(socket)
		writer.cache = new AsyncCache(true)
		reader = new MsgPackDeserializer(socket)
		writer.link reader
	end

	# Check for compatibility with the client
	fun handshake: Bool
	do
		print "Server: Handshake initiated by {socket.address}"

		# Make sure it is the same app
		var server_app = sys.handshake_app_name
		var client_app = socket.deserialize_msgpack
		if server_app != client_app then
			print_error "Server Error: Client app name is '{client_app or else "<invalid>"}'"

			# Send an empty string so the client read it and give up
			socket.serialize_msgpack ""
			socket.close
			return false
		end

		socket.serialize_msgpack server_app

		# App version
		var app_version = sys.handshake_app_version
		var client_version = socket.deserialize_msgpack
		if client_version != app_version then
			print_error "Handshake Error: client version is different '{client_version or else "<invalid>"}'"
			socket.serialize_msgpack ""
			socket.close
			return false
		end

		socket.serialize_msgpack app_version

		return true
	end
end
lib/gamnit/network/server.nit:154,1--211,3