diff --git a/Library/Server.cs b/Library/Server.cs index 88a0366..e39349d 100644 --- a/Library/Server.cs +++ b/Library/Server.cs @@ -12,12 +12,18 @@ public class Server private StreamReader reader; private StreamWriter writer; private Action onMessageReceived; + private Action onCommandReceived; public Action OnMessageReceived { get => onMessageReceived; set => onMessageReceived = value ?? throw new ArgumentNullException(nameof(value), "onMessageReceived cannot be null."); } + public Action OnCommandReceived + { + get => onCommandReceived; + set => onCommandReceived = value ?? throw new ArgumentNullException(nameof(value), "onMessageReceived cannot be null."); + } private ConcurrentDictionary> pendingRequests = new(); @@ -49,6 +55,7 @@ public class Server { if (message.StartsWith("{") && message.EndsWith("}")) { + onCommandReceived?.Invoke(message); Console.WriteLine("Received: " + message); // Parse the JSON response var response = JsonSerializer.Deserialize(message); diff --git a/Server/Commands/CommandLibrary.cs b/Server/Commands/CommandLibrary.cs index 6c8344d..32cdcd9 100644 --- a/Server/Commands/CommandLibrary.cs +++ b/Server/Commands/CommandLibrary.cs @@ -14,15 +14,18 @@ public class CommandLibrary #region Basic Commands - [Command("help")] - public static string HelpCommand() => - "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"; + /*[Command("help")] + public static string HelpCommand(string[] args, TcpClient? client, TcpServer? socket) + { + throw new CommandException("Available commands:%break" + + "1. help - Show this help message%break" + + "2. exit - Exit the server%break" + + "3. user - User management%break" + + "4. settings - Server settings%break" + + "5. start - Start the server%break" + + "6. stop - Stop the server%break"); + }*/ + #endregion diff --git a/Server/Commands/CommandManager.cs b/Server/Commands/CommandManager.cs index e4d5c2c..6f8aef0 100644 --- a/Server/Commands/CommandManager.cs +++ b/Server/Commands/CommandManager.cs @@ -77,7 +77,7 @@ public void ExecuteCommand(string executor, }; var sendClientMessage = JsonSerializer.Serialize(returnMessage); - clientSocket?.SendMessageAsync(client, sendClientMessage + "\n"); + clientSocket?.SendMessageAsync(client, sendClientMessage + "\r\n"); Program.messageSender.Debug($"[COMMANDMANAGER] Response sent to client."); } // If your command threw a CommandException, catch it here: @@ -91,7 +91,15 @@ public void ExecuteCommand(string executor, Response = $"Error: {cmdEx.Message}" }; var sendClientMessage = JsonSerializer.Serialize(returnMessage); - clientSocket?.SendMessageAsync(client, sendClientMessage + "\n"); + try + { + clientSocket?.SendMessageAsync(client, sendClientMessage + "\r\n"); + Program.messageSender.Debug("[COMMANDMANAGER] Response sent to client."); + } + catch (Exception e) + { + Program.messageSender.Error($"[COMMANDMANAGER] Cannot send errormessage to Client: {e.Message}"); + } } // Any other exception inside the invoked method catch (TargetInvocationException ex) @@ -113,6 +121,13 @@ public void ExecuteCommand(string executor, else { Program.messageSender.Warn($"[COMMANDMANAGER] Unknown command '{executor}' received."); + var returnMessage = new Library.Server.JsonResponse + { + Id = cid, + Response = $"Unknown command '{executor}' received." + }; + string sendClientMessage = JsonSerializer.Serialize(returnMessage); + clientSocket.SendMessageAsync(client, sendClientMessage + "\r\n"); } } } \ No newline at end of file diff --git a/TestClient/Program.cs b/TestClient/Program.cs index f1c1a02..8eacacb 100644 --- a/TestClient/Program.cs +++ b/TestClient/Program.cs @@ -35,10 +35,8 @@ public class Tester "help" }; - server.OnMessageReceived = (message) => - { - ms.Log(message); - }; + server.OnMessageReceived = (message) => ms.Log(message); + server.OnCommandReceived = (message) => ms.Log(message); while (running) { @@ -50,7 +48,7 @@ public class Tester { string response = await server.HelpCommand(); // split response into string[] at \n - var responseLines = response.Split('\n').ToList(); + var responseLines = response.Split("%break").ToList(); await messageBox.ShowAsync("Command Result: Help", responseLines); } else if (command == "login") @@ -60,14 +58,14 @@ public class Tester string response = await server.Login(user, password); // split response into string[] at \n - var responseLines = response.Split('\n').ToList(); + var responseLines = response.Split("%break").ToList(); messageBox.ShowAsync("Command Result: Login", responseLines); } else if (command == "logout") { string response = await server.Logout(); // split response into string[] at \n - var responseLines = response.Split('\n').ToList(); + var responseLines = response.Split("%break").ToList(); messageBox.ShowAsync("Command Result: Logout", responseLines); } else if (command == "get self employee") @@ -85,21 +83,21 @@ public class Tester { string response = await server.ClockIn(); // split response into string[] at \n - var responseLines = response.Split('\n').ToList(); + var responseLines = response.Split("%break").ToList(); await messageBox.ShowAsync("Command Result: clock in", responseLines); } else if (command == "clock out") { string response = await server.ClockOut(); // split response into string[] at \n - var responseLines = response.Split('\n').ToList(); + var responseLines = response.Split("%break").ToList(); await messageBox.ShowAsync("Command Result: clock out", responseLines); } else if (command == "clock break") { string response = await server.ClockBreak(); // split response into string[] at \n - var responseLines = response.Split('\n').ToList(); + var responseLines = response.Split("%break").ToList(); await messageBox.ShowAsync("Command Result: clock break", responseLines); } } @@ -124,7 +122,7 @@ public class Tester { using var doc = JsonDocument.Parse(response); var formatted = JsonSerializer.Serialize(doc, new JsonSerializerOptions { WriteIndented = true }); - await messageBox.ShowAsync("Server Response", formatted.Split('\n').ToList()); + await messageBox.ShowAsync("Server Response", formatted.Split("%break").ToList()); } catch {