public async Task AddAlreadyExistingServerSettingsInDatabase() { ClientWebSocket webSocket = new ClientWebSocket(); WebSocketHandler webSocketHandler = new WebSocketHandler(webSocket); await webSocket.ConnectAsync(new Uri("ws://localhost:80/ws"), CancellationToken.None); await Task.Delay(50); await TestHelper.Login("User", "Passwort1$", webSocket, webSocketHandler); byte[] buffer = new byte[1024 * 4]; ServerSetting serverSettings = TestHelper.GenerateNewServerSetting(); Command command = new Command("AddServerSetting", serverSettings); string sendString = command.ToJson(); byte[] sendBytes = System.Text.UTF8Encoding.UTF8.GetBytes(sendString); await webSocket.SendAsync(new ArraySegment <byte>(sendBytes, 0, sendBytes.Length), WebSocketMessageType.Text, true, CancellationToken.None); await webSocketHandler.ExtractCompleteMessage(buffer, 60); ModifySettingsResponse response = JsonConvert.DeserializeObject <ModifySettingsResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); TestHelper.ValiateResponse(response, ModifySettingsResult.SETTING_ADDED); await webSocket.SendAsync(new ArraySegment <byte>(sendBytes, 0, sendBytes.Length), WebSocketMessageType.Text, true, CancellationToken.None); await webSocketHandler.ExtractCompleteMessage(buffer, 60); response = JsonConvert.DeserializeObject <ModifySettingsResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); TestHelper.ValiateResponse(response, ModifySettingsResult.GAME_SEED_ALREADY_EXISTS); }
public async Task WrongPassword() { ClientWebSocket webSocket = new ClientWebSocket(); WebSocketHandler webSocketHandler = new WebSocketHandler(webSocket); await webSocket.ConnectAsync(new Uri("ws://localhost:80/ws"), CancellationToken.None); byte[] buffer = new byte[1024 * 4]; await webSocketHandler.ExtractCompleteMessage(buffer, 60); if (webSocketHandler.ReceivedCommand.CommandName != "Connected") { Assert.Fail(); } User user = new User { Username = "******", Password = "******" }; Command command = new Command("Login", user); await TestHelper.ExecuteCommandAndAwaitResponse(webSocket, webSocketHandler, command); BesteUserAuthentificationResponse authResponse = JsonConvert.DeserializeObject <BesteUserAuthentificationResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); TestHelper.ValiateResponse(authResponse, BesteUserAuthentificationResult.WRONG_PASSWORD); }
internal static async Task ExecuteCommandAndAwaitResponse(ClientWebSocket webSocket, WebSocketHandler webSocketHandler, Command command) { string sendString = command.ToJson(); byte[] buffer = new byte[1024 * 4]; byte[] sendBytes = System.Text.UTF8Encoding.UTF8.GetBytes(sendString); await webSocket.SendAsync(new ArraySegment <byte>(sendBytes, 0, sendBytes.Length), WebSocketMessageType.Text, true, CancellationToken.None); await webSocketHandler.ExtractCompleteMessage(buffer, 60); }
internal static async Task Login(string userName, string password, ClientWebSocket webSocket, WebSocketHandler webSocketHandler) { try { byte[] buffer = new byte[1024 * 4]; User user = new User { Username = userName, Password = password }; Command command = new Command("Login", user); string sendString = command.ToJson(); byte[] sendBytes = System.Text.UTF8Encoding.UTF8.GetBytes(sendString); await webSocketHandler.ExtractCompleteMessage(buffer, 60); if (webSocketHandler.ReceivedCommand.CommandName != "Connected") { Assert.Fail(); } await webSocket.SendAsync(new ArraySegment <byte>(sendBytes, 0, sendBytes.Length), WebSocketMessageType.Text, true, CancellationToken.None); await webSocketHandler.ExtractCompleteMessage(buffer, 60); BesteUserAuthentificationResponse authResponse = JsonConvert.DeserializeObject <BesteUserAuthentificationResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); if (authResponse.Result != BesteUserAuthentificationResult.SUCCESS && authResponse.Result != BesteUserAuthentificationResult.MUST_CHANGE_PASSWORT) { Assert.Fail(); } webSocketHandler.User = authResponse.UserData; } catch (Exception ex) { Console.WriteLine(ex.ToString()); Assert.Fail(); } }
private async Task OpenWebsocketConnection(HttpContext context, WebSocket webSocket) { Console.WriteLine(DateTime.Now + " | Connected: " + context.Connection.RemoteIpAddress + ":" + context.Connection.RemotePort + " connected"); var buffer = new byte[1024 * 4]; WebSocketHandler webSocketHandler = new WebSocketHandler(webSocket); await webSocketHandler.Send(new Command("Connected", null)); try { await webSocketHandler.ExtractCompleteMessage(buffer); if (webSocketHandler.ReceivedCommand.CommandName == "Login") { await UserManager.HandleLogin(webSocketHandler); } } catch (OperationCanceledException ex) { await webSocketHandler.Send(new Command("LoginTimeout", null)); Console.WriteLine(ex.Message); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.ToString()); } try { if (webSocketHandler.ConnectedUserToken != "") { await ServerSettingsHandler.RegisterUser(webSocketHandler.User, webSocketHandler.ConnectedUserToken); await SDaysTDieServerHandler.RegisterUser(webSocketHandler.User, webSocketHandler.ConnectedUserToken); while (!webSocketHandler.WebSocket.CloseStatus.HasValue) { await webSocketHandler.ExtractCompleteMessage(buffer); if (webSocketHandler.ReceivedCommand?.CommandName == "GetUser") { await UserManager.GetUser(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "GetUsers") { await UserManager.GetUsers(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "ChangePassword") { await UserManager.ChangePassword(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "CreateUser") { await UserManager.CreateUser(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "EditUser") { await UserManager.EditUser(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "DeleteUser") { await UserManager.DeleteUser(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "LoggedInUserHasRights") { await UserManager.LoggedInUserHasRights(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "AddServerSetting") { await ServerSettingsHandler.AddServerSettings(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "EditServerSettings") { await ServerSettingsHandler.EditServerSettings(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "DeleteServerSettings") { await ServerSettingsHandler.DeleteServerSettings(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "GetServerSettingsOfLoggedInUser") { await ServerSettingsHandler.GetServerSettingsOfLoggedInUser(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "StartServer") { await SDaysTDieServerHandler.StartServer(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "StopServer") { await SDaysTDieServerHandler.StopServer(webSocketHandler); } else if (webSocketHandler.ReceivedCommand?.CommandName == "ConnectTelnet") { await SDaysTDieServerHandler.ConnectTelnet(webSocketHandler); } } } } catch (OperationCanceledException ex) { await webSocketHandler.Send(new Command("ConnectionTimeout", null)); Console.WriteLine(ex.Message); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } try { await webSocketHandler.Send(new Command("Disconnected", null)); } catch (Exception ex) { Console.WriteLine("Could not send Disconnected message, Exception: " + ex.Message); } Console.WriteLine(DateTime.Now + " | " + context.Connection.RemoteIpAddress + ":" + context.Connection.RemotePort + " disconnected"); await webSocket.CloseAsync(webSocketHandler.Result.CloseStatus.Value, webSocketHandler.Result.CloseStatusDescription, CancellationToken.None); }
public async Task StartServerAndConnectToTelnet() { ClientWebSocket webSocket = new ClientWebSocket(); WebSocketHandler webSocketHandler = new WebSocketHandler(webSocket); await webSocket.ConnectAsync(new Uri("ws://localhost:80/ws"), CancellationToken.None); await TestHelper.Login("User", "Passwort1$", webSocket, webSocketHandler); ServerSetting serverSettings = TestHelper.GenerateNewServerSetting(); Command command = new Command("AddServerSetting", serverSettings); await TestHelper.ExecuteCommandAndAwaitResponse(webSocket, webSocketHandler, command); ModifySettingsResponse modifyResponse = JsonConvert.DeserializeObject <ModifySettingsResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); TestHelper.ValiateResponse(modifyResponse, ModifySettingsResult.SETTING_ADDED); command = new Command("GetServerSettingsOfLoggedInUser", null); await TestHelper.ExecuteCommandAndAwaitResponse(webSocket, webSocketHandler, command); GetSettingsResponse getResponse = JsonConvert.DeserializeObject <GetSettingsResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); TestHelper.ValiateResponse(getResponse, GetSettingsResult.OK); bool foundServerSetting = false; foreach (var item in getResponse.ServerSettings) { if (serverSettings.WorldGenSeed == item.WorldGenSeed) { serverSettings = item; foundServerSetting = true; break; } } if (!foundServerSetting) { Assert.Fail("Added ServerSettingsId not found in response"); } command = new Command("StartServer", serverSettings); await TestHelper.ExecuteCommandAndAwaitResponse(webSocket, webSocketHandler, command); StartServerResponse startResponse = JsonConvert.DeserializeObject <StartServerResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); TestHelper.ValiateResponse(startResponse, StartServerResult.SERVER_STARTED); command = new Command("ConnectTelnet", serverSettings); await TestHelper.ExecuteCommandAndAwaitResponse(webSocket, webSocketHandler, command); ConnectTelnetResponse connectResponse = JsonConvert.DeserializeObject <ConnectTelnetResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); TestHelper.ValiateResponse(connectResponse, ConnectTelnetResult.OK); byte[] buffer = new byte[1024 * 4]; int receivedTelnetMessages = 0; for (int i = 0; receivedTelnetMessages < 1; i++) { await webSocketHandler.ExtractCompleteMessage(buffer); if (webSocketHandler.ReceivedCommand.CommandName == "OnTelnetReceived") { Console.WriteLine(webSocketHandler.ReceivedCommand.CommandData.ToString()); Trace.Write(webSocketHandler.ReceivedCommand.CommandData.ToString()); receivedTelnetMessages++; } else { Console.WriteLine("*** NO TELNET MESSAGE ***"); } } command = new Command("StopServer", serverSettings); await TestHelper.ExecuteCommandAndAwaitCommandResponse(webSocket, webSocketHandler, command, "StopServerResponse"); StopServerResponse stopResponse = JsonConvert.DeserializeObject <StopServerResponse>(webSocketHandler.ReceivedCommand.CommandData.ToString()); TestHelper.ValiateResponse(stopResponse, new StopServerResult[] { StopServerResult.SERVER_STOPPED, StopServerResult.SERVER_KILLED }); }