First Server Test | Next Update: Change Commands to Attributes

This commit is contained in:
SnapixLP | Tim G.
2025-06-05 08:27:40 +02:00
parent 67bfce265c
commit 4be4ee34cb
12 changed files with 148 additions and 26 deletions

View File

@@ -1,8 +1,16 @@
using System.Net.Sockets;
using System.Text.Json;
using DX86.Modules;
using MySqlX.XDevAPI;
namespace Server;
class JsonMessage
{
public string cmd { get; set; }
public string cid { get; set; }
}
public class BackendServer : DX86.TcpServer
{
CommandManager commandManager;
@@ -31,11 +39,25 @@ public class BackendServer : DX86.TcpServer
protected override void MessageReceivedEvent(TcpClient client, string message)
{
ms.Log("[BACKENDSERVER] Message received from client: " + message);
if (message.StartsWith("."))
// format json recieved
JsonMessage? jsonMessage;
if (message.StartsWith("{") && message.EndsWith("}"))
{
handleCommand(cmd: message, client: client);
try
{
jsonMessage = JsonSerializer.Deserialize<JsonMessage>(message);
if (jsonMessage != null)
{
ms.Log("[BACKENDSERVER] JSON Message received: cmd=" + jsonMessage.cmd + ", cid=" + jsonMessage.cid);
handleCommand(cmd: jsonMessage.cmd, cid: jsonMessage.cid, client: client);
}
}
catch (JsonException ex)
{
ms.Log("[BACKENDSERVER] Error parsing JSON: " + ex.Message);
}
}
}
protected override void ClientDisconnectEvent(TcpClient client)
@@ -43,12 +65,16 @@ public class BackendServer : DX86.TcpServer
throw new NotImplementedException();
}
private void handleCommand(string cmd, TcpClient client)
private void handleCommand(string cmd, string cid, TcpClient client)
{
string[] args = cmd.Split(' ');
string command = args[0].Substring(1); // Remove the leading dot
string command = args[0]; // Remove the leading dot
string[] commandArgs = args.Skip(1).ToArray(); // Get the arguments after the command
foreach (var commandArg in commandArgs)
{
ms.Debug("[BACKENDSERVER] Command argument: " + commandArg);
}
commandManager.ExecuteCommand(executor:command, args:commandArgs, client:client, clientSocket:this);
commandManager.ExecuteCommand(executor:command, args:commandArgs, client:client, clientSocket:this, cid: cid);
}
}

View File

@@ -1,5 +1,6 @@
using System.Net.Sockets;
using System.Reflection;
using System.Text.Json;
using DX86;
using Server.Commands;
@@ -32,15 +33,22 @@ public class CommandManager
}
}
public void ExecuteCommand(string executor, TcpClient? client = null, TcpServer? clientSocket = null, params string[] args)
public void ExecuteCommand(string executor, TcpClient? client = null, TcpServer? clientSocket = null, string cid = "", params string[] args)
{
if (_commands.TryGetValue(executor, out var command))
{
command.Exec(args:args, client:client, clientSocket:clientSocket);
JsonMessage returnMessage = new JsonMessage();
returnMessage.cid = cid;
returnMessage.cmd = command.Exec(args:args, client:client, clientSocket:clientSocket);
string sendClientMessage = JsonSerializer.Serialize(returnMessage);
clientSocket.SendMessageAsync(client:client, message:sendClientMessage+"\n");
//clientSocket.SendMessageAsync(client:client, message:command.Exec(args:args, client:client, clientSocket:clientSocket));
}
else
{
Console.WriteLine($"Command '{executor}' not found.");
Program.messageSender.Log($"[COMMANDMANAGER] Command '{executor}' not found.");
}
}
}

View File

@@ -0,0 +1,6 @@
namespace Server.Commands;
public class ClockCommand
{
}

View File

@@ -0,0 +1,6 @@
namespace Server.Commands;
public class GetCommand
{
}

View File

@@ -6,19 +6,21 @@ namespace Server.Commands;
public class HelpCommand : ICommand
{
public string Executor { get; }
public HelpCommand()
{
Executor = "help";
}
public void Exec(string[] args, TcpClient? client = null, TcpServer? clientSocket = null)
public string Exec(string[] args, TcpClient? client = null, TcpServer? clientSocket = null)
{
clientSocket.SendMessageAsync(client, "" +
return
"Available commands:\n" +
"1. help - Show this help message\n" +
"2. exit - Exit the server\n" +
"3. user - User management\n" +
"4. settings - Server settings\n" +
"5. start - Start the server\n" +
"6. stop - Stop the server\n");
"6. stop - Stop the server\n"
;
}
}

View File

@@ -6,5 +6,5 @@ namespace Server.Commands;
public interface ICommand
{
string Executor { get; }
public void Exec(string[] args, TcpClient? client = null, TcpServer? clientSocket = null);
public string Exec(string[] args, TcpClient? client, TcpServer? clientSocket);
}

View File

@@ -0,0 +1,34 @@
using System.Net.Sockets;
using DX86;
using MySqlX.XDevAPI;
namespace Server.Commands;
public class LoginCommand : ICommand
{
public string Executor { get; }
public LoginCommand()
{
Executor = "login";
}
public string Exec(string[] args, TcpClient? client, TcpServer? clientSocket)
{
if (args[0] == "test" && args[1] == "test")
{
if (client != null)
{
//clientSocket?.SendMessageAsync(client, "Login successful");
clientSocket?.LoggedInClients.Add(client, "test");
return "Login successful";
}
}
else
{
if (client != null) return "Invalid credentials";
}
return "No client provided or invalid credentials";
}
}

View File

@@ -0,0 +1,30 @@
using System.Net.Sockets;
using DX86;
namespace Server.Commands;
public class LogoutCommand : ICommand
{
public string Executor { get; }
public LogoutCommand()
{
Executor = "logout";
}
public string Exec(string[] args, TcpClient? client = null, TcpServer? clientSocket = null)
{
if (clientSocket == null && client == null)
return "Please provide a valid client or clientSocket.";
if (client != null && clientSocket != null && clientSocket.LoggedInClients.ContainsKey(client))
{
clientSocket.LoggedInClients.Remove(client);
//clientSocket.SendMessageAsync(client, "Success");
return "Logout successful.";
}
else
{
//clientSocket?.SendMessageAsync(client, "Logout failed. You are not logged in.");
return "Logout failed. You are not logged in.";
}
}
}