gamnit: add server discovery or create example
authorAlexis Laferrière <alexis.laf@xymus.net>
Tue, 30 May 2017 15:19:04 +0000 (11:19 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Tue, 30 May 2017 17:27:09 +0000 (13:27 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/gamnit/network/network.nit

index 83fd35d..93e1407 100644 (file)
 # limitations under the License.
 
 # Easy client/server logic for games and simple distributed applications
+#
+# Both `gamnit::client` and `gamnit::server` can be used separately or
+# together by importing `gamnit::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
+# ~~~
 module network
 
 import server