trying to fix that some messages are not send after specific events

This commit is contained in:
Tim G. | SnapixLP 2025-06-06 03:14:11 +02:00
parent 536de50e4c
commit c2608f4bf6
4 changed files with 45 additions and 22 deletions

View File

@ -12,12 +12,18 @@ public class Server
private StreamReader reader;
private StreamWriter writer;
private Action<string> onMessageReceived;
private Action<string> onCommandReceived;
public Action<string> OnMessageReceived
{
get => onMessageReceived;
set => onMessageReceived = value ?? throw new ArgumentNullException(nameof(value), "onMessageReceived cannot be null.");
}
public Action<string> OnCommandReceived
{
get => onCommandReceived;
set => onCommandReceived = value ?? throw new ArgumentNullException(nameof(value), "onMessageReceived cannot be null.");
}
private ConcurrentDictionary<string, TaskCompletionSource<string>> 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<JsonResponse>(message);

View File

@ -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

View File

@ -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");
}
}
}

View File

@ -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
{