Update the CLI example

This commit is contained in:
derek.holloway committed 2026-08-07 13:00:23 -07:00
1 parent 30feb15821
commit 068c88de4b
5 files changed
+134 -83

No files matched your search

+50
View File
@@ -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;
}
}
+1
View File
@@ -9,6 +9,7 @@
<Company>Mistox.net</Company> <Company>Mistox.net</Company>
<Product>Mistox Game Server</Product> <Product>Mistox Game Server</Product>
<Description>Game Server for Mistox Games and partners</Description> <Description>Game Server for Mistox Games and partners</Description>
<Nullable>enable</Nullable>
<SignAssembly>false</SignAssembly> <SignAssembly>false</SignAssembly>
</PropertyGroup> </PropertyGroup>
+42 -83
View File
@@ -1,85 +1,48 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using MistoxServer;
namespace MistoxHolePunch { namespace MistoxHolePunch {
enum Mode {
Server,
Client
}
class Program { class Program {
static IMistoxServer serverObj; static serverExample? server;
static bool running = true; static clientExample? client;
static Mode mode;
void onConnected( object sender, EventArgs e ) { async Task StartServer(string name, int port) {
// sender and e are always null server = new serverExample();
// put connected functions in here await server.StartServer(name, port);
} // On a game this sleep loop isnt needed
if (server.serverObject == null) return;
void slowReceive( object obj, EventArgs e ) { while (server.serverObject.Alive) {
if ( serverObj is ServerInterface ) { // becuase this is a console app if we dont keep the main thread alive the app will close
// If ServerMode is passive obj is byte[] and Send takes in byte[] await Task.Delay(5000);
// 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 RunClient() { async Task StartClient(string username, string host, int port, string password) {
serverObj = mServer.newClient( host, Convert.ToInt32( port ) ); client = new clientExample();
serverObj.onConnected += onConnected; await client.StartClient(username, host, port, password);
serverObj.onSlowReceive += slowReceive; // On a game this sleep loop isnt needed
serverObj.onFastReceive += fastReceive; if (client.clientObject == null) return;
serverObj.onDisconnected += onDisconnected; while (client.clientObject.Alive) {
while( running ) { // becuase this is a console app if we dont keep the main thread alive the app will close
// Stop this thread for 1 second so the CPU isnt 100% await Task.Delay(5000);
// All the real work is on different threads
// While loop needs to exist so our main thread doesnt close
await Task.Delay( 1000 );
} }
} }
static async Task Main(string[] args) { async Task Main(string[] args) {
string Task = args.Length > 0 ? args[0].ToLower() : null; 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++ ) { for( int i = 0; i < args.Length; i++ ) {
string cur = args[i].ToLower(); string cur = args[i].ToLower();
@@ -87,25 +50,21 @@ namespace MistoxHolePunch {
host = args [i + 1]; host = args [i + 1];
} else if( cur == "/p" || cur == "-p" ) { } else if( cur == "/p" || cur == "-p" ) {
port = Convert.ToInt32( args [i + 1] ); port = Convert.ToInt32( args [i + 1] );
} else if( cur == "/a" || cur == "-a" ) { } else if( cur == "/n" || cur == "-n" ) {
mode = ServerMode.Authoritative; 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); Console.WriteLine(HelpDocumentation.HelpText);
} else if (Task == "/s" || Task == "-s") { } else if (Job == "/s" || Job == "-s") {
Program prog = new Program(); await StartServer(name, port);
await prog.RunServer(); } else if (Job == "/c" || Job == "-c") {
} else if (Task == "/c" || Task == "-c") { await StartClient(name, host, port, pass);
Program prog = new Program();
await prog.RunClient();
} else { } else {
host = "example.com"; await StartServer("example.com", 4500);
port = 1500;
Program prog = new Program();
//prog.RunClient();
await prog.RunServer();
} }
} }
+35
View File
@@ -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;
}
}
+6
View File
@@ -0,0 +1,6 @@
using Mistox.Attributes;
[mPacket]
class MessagePacket {
public string Data { get; set; } = "";
}