示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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();
            }
        }
示例#5
0
        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 });
        }