Attempt handshake with server

Validates compatibility between handshake_app_name and handshake_app_version.

On error, close socket.

Property definitions

gamnit $ RemoteServer :: handshake
	# Attempt handshake with server
	#
	# Validates compatibility between `handshake_app_name` and `handshake_app_version`.
	#
	# On error, close `socket`.
	fun handshake: Bool
	do
		# The client goes first so that the server doesn't show its hand
		var socket = socket
		assert socket != null

		# App name
		var app_name = sys.handshake_app_name
		socket.serialize_msgpack app_name

		var server_app = socket.deserialize_msgpack("String")
		if server_app != app_name then
			print_error "Handshake Error: server app name is '{server_app or else "<invalid>"}'"
			socket.close
			return false
		end

		# App version
		socket.serialize_msgpack sys.handshake_app_version

		var server_version = socket.deserialize_msgpack("String")
		if server_version != sys.handshake_app_version then
			print_error "Handshake Error: server version is different '{server_version or else "<invalid>"}'"
			socket.close
			return false
		end

		return true
	end
lib/gamnit/network/client.nit:98,2--131,4