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(); } }
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); }
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); }
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()); }
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); } }