diff --git a/TestClient/Program.cs b/TestClient/Program.cs new file mode 100644 index 0000000..a7a76aa --- /dev/null +++ b/TestClient/Program.cs @@ -0,0 +1,119 @@ +using System.Text.Json; +using DX86.Modules; +using Library; + +namespace ChatClient; + +public class Tester +{ + public static async Task Main(string[] args) + { + MessageSender ms = new MessageSender("log.txt"); + ItemSelector selector = new ItemSelector(ms); + InputBox inputBox = new InputBox(ms); + MessageBox messageBox = new MessageBox(ms); + + Console.Write("Enter the server IP address: "); + string ip = Console.ReadLine(); + Console.Write("Enter the port: "); + int port = int.Parse(Console.ReadLine()); + + Server server = new Server(ip, port); + + + bool running = true; + + string[] testCommands = new[] { + "login", + "logout", + "get self employee", + "get worker byid", + "get worker bycode", + "clock in", + "clock out", + "clock break", + "help" + }; + + server.OnMessageReceived = (message) => + { + ms.Log(message); + }; + + while (running) + { + try + { + string command = selector.SelectItemFromList(testCommands); + + if (command == "help") + { + string response = await server.HelpCommand(); + // split response into string[] at \n + var responseLines = response.Split('\n').ToList(); + await messageBox.ShowAsync("Command Result: Help", responseLines); + } + else if (command == "login") + { + string user = inputBox.ShowAsync("Login", new List { "Enter username" }); + string password = inputBox.ShowAsync("Login", new List { "Enter password" }); + + string response = await server.Login(user, password); + // split response into string[] at \n + var responseLines = response.Split('\n').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(); + messageBox.ShowAsync("Command Result: Logout", responseLines); + } + else if (command == "get self employee") + { + Employee employee = await server.GetLoggedInEmployee(); + messageBox.ShowAsync("Command Result: Get Self Employee", new List + { + $"ID: {employee.Id}", + $"Code: {employee.Code}", + $"Surname: {employee.Surname}", + $"Forename: {employee.Forename}", + }); + } + } + catch (Exception ex) + { + await messageBox.ShowAsync("Error", new List { ex.Message }); + } + + /* + string input = ""; + if (command.Contains("login")) + input = inputBox.ShowAsync("Login", new List { "Enter username and password (space-separated)" }); + else if (command.Contains("get worker")) + input = inputBox.ShowAsync("Worker", new List { "Enter ID or Code" }); + else + inputBox.ShowAsync("Info", new List { "No additional parameters required." }); + + string fullCmd = $"{command} {input}".Trim(); + string response = await server.ExecuteCommandAsync(fullCmd); + + try + { + using var doc = JsonDocument.Parse(response); + var formatted = JsonSerializer.Serialize(doc, new JsonSerializerOptions { WriteIndented = true }); + await messageBox.ShowAsync("Server Response", formatted.Split('\n').ToList()); + } + catch + { + await messageBox.ShowAsync("Server Response", new List { response }); + } + + string again = inputBox.ShowAsync("Continue?", new List { "Type 'exit' to quit, anything else to continue" }); + if (again.Trim().ToLower() == "exit") + running = false; + */ + } + } +} \ No newline at end of file diff --git a/TestClient/TestClient.csproj b/TestClient/TestClient.csproj new file mode 100644 index 0000000..cfd0138 --- /dev/null +++ b/TestClient/TestClient.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + +