/// <summary> /// Send player/client the current game state (was their move valid etc. and the board state) /// </summary> /// <param name="aRoom">Room</param> /// <param name="aClient">Client the gets this data</param> /// <param name="aGameStateString">Board state data</param> private static void SendPlayerGameState(Room aRoom, TcpServerClient aClient, string aGameStateString) { DataGameState lGameState = new DataGameState(); lGameState.GameState = aGameStateString; lGameState.PlayGround = aRoom.PlayGround; SendData(aClient, String.Format("{0}{1}", PREFIX_GMEST, DataProcessor.SerializeGameStateData(lGameState))); }
static Connections() { _BufferSize = new byte[4096]; Status = GameStatus.Waiting; Valid = ValidStatus.NoState; GameState = new DataGameState(); Turn = TurnStatus.NoTurn; PlayerOne = ""; PlayerTwo = ""; }
/// <summary> /// While the game is playing out, continuously check for data being sent from the server to update the variables /// Valid, Turn and Status. /// </summary> private static void UpdateTurnAndGameStatus() { while (Status == GameStatus.Playing) { NetworkStream lNetworkStream = GameClient.GetStream(); string JSON_string = String.Empty; while (JSON_string == String.Empty) { int byteCount = lNetworkStream.Read(_BufferSize, 0, _BufferSize.Length); JSON_string = _EncodingInstance.GetString(_BufferSize, 0, byteCount); Thread.Sleep(5); } if (JSON_string.StartsWith(PREFIX_YOURT)) { Turn = TurnStatus.YourTurn; } else { GameState = DataProcessor.DeserializeGameStateData(JSON_string.Substring(5)); switch (GameState.GameState) { case GS_VALIDMOVE: Valid = ValidStatus.Valid; Turn = TurnStatus.EnemyTurn; break; case GS_INVALIDMOVE: Valid = ValidStatus.Invalid; Turn = TurnStatus.YourTurn; break; case GS_YOUWON: Valid = ValidStatus.Valid; Turn = TurnStatus.NoTurn; Status = GameStatus.YouWon; break; case GS_YOULOST: Valid = ValidStatus.Valid; Turn = TurnStatus.NoTurn; Status = GameStatus.YouLost; break; case GS_DRAW: Valid = ValidStatus.Valid; Turn = TurnStatus.NoTurn; Status = GameStatus.Draw; break; case GS_VALIDENEMYMOVE: //Der Gegner hat einen gültigen Zug gemacht. Die INfo, dass ich dran bin, kommt in separater Nachricht. default: break; } } } }
public static string SerializeGameStateData(DataGameState aGameState) { return(JsonConvert.SerializeObject(aGameState)); }