Update the CLI example
This commit is contained in:
1 parent
30feb15821
commit
068c88de4b
5 files changed
+134
-83
No files matched your search
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
using Mistox.Attributes;
|
||||||
|
|
||||||
|
[mPacket]
|
||||||
|
class MessagePacket {
|
||||||
|
public string Data { get; set; } = "";
|
||||||
|
}
|
||||||
Reference in new issue
Block a user