Both client
and server
can be used separately or
together by importing network
.
Use both modules to create an program that discover local servers
or create one if none is found:
redef fun handshake_app_name do return "network_test"
# Discover local servers
var servers = discover_local_servers
if servers.not_empty then
# Try to connect to the first local server
var server_info = servers.first
var server = new RemoteServer(server_info)
if not server.connect then
print_error "Failed to connect to {server_info.address}:{server_info.port}"
else if not server.handshake then
print_error "Failed handshake with {server_info.address}:{server_info.port}"
else
# Connected!
print "Connected to {server_info.address}:{server_info.port}"
# Write something and close connection
server.writer.serialize "hello server"
server.socket.as(not null).close
end
else
# Create a local server
var connect_port = 33729
print "Launching server: connect on {connect_port}, discovery on {discovery_port}"
var server = new Server(connect_port)
# Don't loop if testing
if "NIT_TESTING".environ == "true" then exit 0
loop
# Respond to discovery requests
server.answer_discovery_requests
# Accept new clients
var new_clients = server.accept_clients
for client in new_clients do
# Read something and close connection
assert client.reader.deserialize == "hello server"
client.socket.close
end
end
end