From 068c88de4bc6fdfac40aa782e76f544da8ec5ce8 Mon Sep 17 00:00:00 2001 From: "derek.holloway" Date: Fri, 7 Aug 2026 13:00:23 -0700 Subject: [PATCH] Update the CLI example --- CLI/ClientExample.cs | 50 +++++++++++++++++ CLI/MistServer.csproj | 1 + CLI/Program.cs | 125 ++++++++++++++---------------------------- CLI/ServerExample.cs | 35 ++++++++++++ CLI/packetList.cs | 6 ++ 5 files changed, 134 insertions(+), 83 deletions(-) create mode 100644 CLI/ClientExample.cs create mode 100644 CLI/ServerExample.cs create mode 100644 CLI/packetList.cs diff --git a/CLI/ClientExample.cs b/CLI/ClientExample.cs new file mode 100644 index 0000000..b112646 --- /dev/null +++ b/CLI/ClientExample.cs @@ -0,0 +1,50 @@ +using System; +using System.Threading.Tasks; +using Mistox; +using Mistox.Client; + +class clientExample { + + public MistoxClient? clientObject; + + void onServerConnected() { + Console.WriteLine("Connected to server sucessfully"); + } + + void onClientConnected(mUDPClient user) { + Console.WriteLine("User connected with username: " + user.UserName); + } + + void onReceive(mUDPClient? user, dynamic data) { + switch (data){ + case MessagePacket packet: + if (user == null) { + Console.WriteLine($"MSG From [Serverx]: {packet.Data}"); + } else { + Console.WriteLine($"MSG From [{user.UserName}]: {packet.Data}"); + } + break; + default: + break; + } + } + + void onClientDisconnected(mUDPClient user) { + Console.WriteLine("User disconnected with username: " + user.UserName); + } + + void onServerDisconnected() { + Console.WriteLine("Disconnected from server"); + } + + public async Task StartClient(string userName, string host, int port, string password) { + clientObject = GameServer.newClient(userName, host, port, password); + if (clientObject == null) return; + clientObject.onServerConnected += onServerConnected; + clientObject.onUserConnected += onClientConnected; + clientObject.onDataReceived += onReceive; + clientObject.onUserDisconnected += onClientDisconnected; + clientObject.onServerDisconnected += onServerDisconnected; + } + +} \ No newline at end of file diff --git a/CLI/MistServer.csproj b/CLI/MistServer.csproj index c63178e..cae7ecd 100644 --- a/CLI/MistServer.csproj +++ b/CLI/MistServer.csproj @@ -9,6 +9,7 @@ Mistox.net Mistox Game Server Game Server for Mistox Games and partners + enable false diff --git a/CLI/Program.cs b/CLI/Program.cs index de7c053..d152600 100644 --- a/CLI/Program.cs +++ b/CLI/Program.cs @@ -1,85 +1,48 @@ using System; using System.Threading.Tasks; -using MistoxServer; namespace MistoxHolePunch { + + enum Mode { + Server, + Client + } + class Program { - static IMistoxServer serverObj; - static bool running = true; + static serverExample? server; + static clientExample? client; + static Mode mode; - void onConnected( object sender, EventArgs e ) { - // sender and e are always null - // put connected functions in here - } - - void slowReceive( object obj, EventArgs e ) { - if ( serverObj is ServerInterface ) { - // If ServerMode is passive obj is byte[] and Send takes in byte[] - // If Servermode is Athoritiative obj is the Class type sent and Send takes in any Class type except generic object - - // Check to make sure data is correct before relaying - // Also perform server specific checks in here - // IE player didnt teleport or is shooting from 20 feet from his body - serverObj.Send( obj, SendType.SlowUpdate ); - } - Console.Write( "Received TCP : " ); - Console.WriteLine( obj ); - } - - void fastReceive( object obj, EventArgs e ) { - if( serverObj is ServerInterface ) { - // If ServerMode is passive obj is byte[] and Send takes in byte[] - // If Servermode is Athoritiative obj is the Class type sent and Send takes in any Class type except generic object - - // Check to make sure data is correct before relaying - // Also perform server specific checks in here - // IE player didnt teleport or is shooting from 20 feet from his body - serverObj.Send( obj, SendType.FastUpdate ); - } - Console.Write( "Received UDP : " ); - Console.WriteLine( obj ); - } - - void onDisconnected( object sender, EventArgs e ) { - // sender and e are always null - // put disconnected functions in here - } - - static string host = "example.com"; - static int port = 7300; - static ServerMode mode = ServerMode.Passive; - - async Task RunServer() { - serverObj = mServer.newServer( Convert.ToInt32( port ), mode ); - serverObj.onConnected += onConnected; - serverObj.onSlowReceive += slowReceive; - serverObj.onFastReceive += fastReceive; - serverObj.onDisconnected += onDisconnected; - while ( running ) { - // Stop this thread for 1 second so the CPU isnt 100% - // All the real work is on different threads - // While loop needs to exist so our main thread doesnt close - await Task.Delay( 1000 ); + async Task StartServer(string name, int port) { + server = new serverExample(); + await server.StartServer(name, port); + // On a game this sleep loop isnt needed + if (server.serverObject == null) return; + while (server.serverObject.Alive) { + // becuase this is a console app if we dont keep the main thread alive the app will close + await Task.Delay(5000); } } - async Task RunClient() { - serverObj = mServer.newClient( host, Convert.ToInt32( port ) ); - serverObj.onConnected += onConnected; - serverObj.onSlowReceive += slowReceive; - serverObj.onFastReceive += fastReceive; - serverObj.onDisconnected += onDisconnected; - while( running ) { - // Stop this thread for 1 second so the CPU isnt 100% - // All the real work is on different threads - // While loop needs to exist so our main thread doesnt close - await Task.Delay( 1000 ); + async Task StartClient(string username, string host, int port, string password) { + client = new clientExample(); + await client.StartClient(username, host, port, password); + // On a game this sleep loop isnt needed + if (client.clientObject == null) return; + while (client.clientObject.Alive) { + // becuase this is a console app if we dont keep the main thread alive the app will close + await Task.Delay(5000); } } - static async Task Main(string[] args) { - string Task = args.Length > 0 ? args[0].ToLower() : null; + async Task Main(string[] args) { + string Job = args.Length > 0 ? args[0].ToLower() : ""; + + string host = ""; + string name = ""; + string pass = ""; + int port = 0; for( int i = 0; i < args.Length; i++ ) { string cur = args[i].ToLower(); @@ -87,25 +50,21 @@ namespace MistoxHolePunch { host = args [i + 1]; } else if( cur == "/p" || cur == "-p" ) { port = Convert.ToInt32( args [i + 1] ); - } else if( cur == "/a" || cur == "-a" ) { - mode = ServerMode.Authoritative; + } else if( cur == "/n" || cur == "-n" ) { + name = args [i + 1]; + } else if( cur == "/u" || cur == "-u" ) { + pass = args [i + 1]; } } - if (Task == "/?" || Task == "--help") { + if (Job == "/?" || Job == "--help") { Console.WriteLine(HelpDocumentation.HelpText); - } else if (Task == "/s" || Task == "-s") { - Program prog = new Program(); - await prog.RunServer(); - } else if (Task == "/c" || Task == "-c") { - Program prog = new Program(); - await prog.RunClient(); + } else if (Job == "/s" || Job == "-s") { + await StartServer(name, port); + } else if (Job == "/c" || Job == "-c") { + await StartClient(name, host, port, pass); } else { - host = "example.com"; - port = 1500; - Program prog = new Program(); - //prog.RunClient(); - await prog.RunServer(); + await StartServer("example.com", 4500); } } diff --git a/CLI/ServerExample.cs b/CLI/ServerExample.cs new file mode 100644 index 0000000..6e6ca43 --- /dev/null +++ b/CLI/ServerExample.cs @@ -0,0 +1,35 @@ +using System; +using System.Threading.Tasks; +using Mistox; +using Mistox.Server; + +class serverExample { + + public MistoxServer? serverObject; + + void onClientConnected(ServerConnection user) { + Console.WriteLine("User connected with username: " + user.UserName); + } + + void onReceive(ServerConnection user, dynamic data) { + switch (data){ + case MessagePacket packet when user.IsAuthenticated: + Console.WriteLine($"MSG From [{user.UserName}]: {packet.Data}"); + break; + default: + break; + } + } + + void onClientDisconnected(ServerConnection user) { + Console.WriteLine("User disconnected with username: " + user.UserName); + } + + public async Task StartServer(string serverName, int port) { + serverObject = GameServer.newServer(serverName, port); + serverObject.onUserConnected += onClientConnected; + serverObject.onDataReceived += onReceive; + serverObject.onUserDisconnected += onClientDisconnected; + } + +} \ No newline at end of file diff --git a/CLI/packetList.cs b/CLI/packetList.cs new file mode 100644 index 0000000..697b8fd --- /dev/null +++ b/CLI/packetList.cs @@ -0,0 +1,6 @@ +using Mistox.Attributes; + +[mPacket] +class MessagePacket { + public string Data { get; set; } = ""; +} \ No newline at end of file