private void Receive()
        {
            try
            {
                while (true)
                {
                    PreMessage preMessage = (PreMessage)stream.ReadByte();
                    switch (preMessage)
                    {
                    case PreMessage.Heatbeat:
                        break;

                    case PreMessage.Message:
                        int len = 0;
                        len += stream.ReadByte() * 256 * 256;
                        len += stream.ReadByte() * 256;
                        len += stream.ReadByte() % 256;
                        byte[] receivedBytes = new byte[len];
                        stream.Read(receivedBytes, 0, len);
                        break;

                    case PreMessage.Close:
                        connectTask.Start();
                        break;
                    }
                }
            }
            catch
            {
                connectTask.Start();
            }
        }
Example #2
0
        public async Task PreviouslySolvedPuzzlesRequest_Should_Send_A_List_With_One_SudokuPuzzle()
        {
            SolveSudokuRequest solveSudokuRequest = new SolveSudokuRequest
            {
                Data = new SudokuPuzzleState
                {
                    PuzzleAsString = "034007008080065000000300070200000700710040096005000001050002000000170060600900430"
                },
                EventName = "sudokuSolvePuzzleRequest"
            };
            string jsonSolve = JsonConvert.SerializeObject(solveSudokuRequest);

            byte[]        messageBufferSolve  = Encoding.Default.GetBytes(jsonSolve);
            WebSocketMock webSocketMockSolver = new WebSocketMock();

            _httpHandler.AddResponse(GetDefaultSavePuzzle());
            await _puzzleHandler.ReceiveAsync(webSocketMockSolver, messageBufferSolve);

            PreMessage previouslySolvedPuzzlesRequest = new PreMessage
            {
                EventName = "previouslySolvedPuzzlesRequest"
            };
            string json = JsonConvert.SerializeObject(previouslySolvedPuzzlesRequest);

            byte[]        messageBuffer = Encoding.Default.GetBytes(json);
            WebSocketMock webSocketMock = new WebSocketMock();
            PuzzleDto     puzzleDto     = new PuzzleDto
            {
                OriginalPuzzle = "034007008080065000000300070200000700710040096005000001050002000000170060600900430",
                PuzzleId       = 1,
                PuzzleType     = "Sudoku",
                SolvedPuzzle   = "534297618187465329962381574246819753718543296395726841459632187823174965671958432"
            };

            _httpHandler.AddResponse(GetPreviouslySolvedPuzzles(new List <PuzzleDto> {
                puzzleDto
            }));

            await _puzzleHandler.ReceiveAsync(webSocketMock, messageBuffer);

            (_, ArraySegment <byte> arraySegment) = webSocketMock.SentMessages.First();
            string responseJson = Encoding.Default.GetString(arraySegment);
            PreviouslySolvedPuzzlesResponse sudokuGeneratePuzzleResponse = JsonConvert.DeserializeObject <PreviouslySolvedPuzzlesResponse>(responseJson);

            Assert.IsTrue(sudokuGeneratePuzzleResponse.Success);
            Assert.IsTrue(sudokuGeneratePuzzleResponse.Data.Puzzles.Count(puzzle => puzzle.PuzzleType.Equals("Sudoku")) == 1);
        }
Example #3
0
        public async Task SudokuGeneratePuzzleRequest_Should_Send_A_Valid_SudokuPuzzleState()
        {
            PreMessage sudokuGeneratePuzzleRequest = new PreMessage
            {
                EventName = "sudokuGeneratePuzzleRequest"
            };
            string json = JsonConvert.SerializeObject(sudokuGeneratePuzzleRequest);

            byte[]        messageBuffer = Encoding.Default.GetBytes(json);
            WebSocketMock webSocketMock = new WebSocketMock();
            await _puzzleHandler.ReceiveAsync(webSocketMock, messageBuffer);

            (_, ArraySegment <byte> arraySegment) = webSocketMock.SentMessages.First();
            string responseJson = Encoding.Default.GetString(arraySegment);
            SudokuGeneratePuzzleResponse sudokuGeneratePuzzleResponse = JsonConvert.DeserializeObject <SudokuGeneratePuzzleResponse>(responseJson);

            Assert.IsTrue(sudokuGeneratePuzzleResponse.Success);
        }
Example #4
0
        public async Task PreviouslySolvedPuzzlesRequest_Should_Send_An_Empty_List()
        {
            PreMessage previouslySolvedPuzzlesRequest = new PreMessage
            {
                EventName = "previouslySolvedPuzzlesRequest"
            };
            string json = JsonConvert.SerializeObject(previouslySolvedPuzzlesRequest);

            byte[]        messageBuffer = Encoding.Default.GetBytes(json);
            WebSocketMock webSocketMock = new WebSocketMock();

            _httpHandler.AddResponse(GetPreviouslySolvedPuzzles(new List <PuzzleDto>()));

            await _puzzleHandler.ReceiveAsync(webSocketMock, messageBuffer);

            (_, ArraySegment <byte> arraySegment) = webSocketMock.SentMessages.First();
            string responseJson = Encoding.Default.GetString(arraySegment);
            PreviouslySolvedPuzzlesResponse sudokuGeneratePuzzleResponse = JsonConvert.DeserializeObject <PreviouslySolvedPuzzlesResponse>(responseJson);

            Assert.IsTrue(sudokuGeneratePuzzleResponse.Success);
            Assert.IsFalse(sudokuGeneratePuzzleResponse.Data.Puzzles.Any());
        }
Example #5
0
        public override Task ReceiveAsync(IWebSocket socket, byte[] buffer)
        {
            string     json       = Encoding.UTF8.GetString(buffer);
            PreMessage preMessage = JsonConvert.DeserializeObject <PreMessage>(json);

            switch (preMessage.EventName)
            {
            case "sudokuSolvePuzzleRequest":
                return(SudokuSolvePuzzleRequest(socket, json));

            case "sudokuGeneratePuzzleRequest":
                return(SudokuGeneratePuzzleRequest(socket));

            case "previouslySolvedPuzzlesRequest":
                return(PreviouslySolvedPuzzlesRequest(socket));

            case "sudokuVerifyRequest":
                return(SudokuVerifyPuzzleRequest(socket, json));

            default:
                return(Task.CompletedTask);
            }
        }