private void ProcessRound(GameState gameState, Socket socket) { if (gameState.GameOver) { SendGameOverMessage(GameStateJsonSerializer.SerializeGameOver(gameState), socket); } else { GetClientAction(gameState, socket); } }
private static async Task InitPersistenceAndGameState(IServiceCollection services, IBlobStorage storage, WorldStateImmutable defaultWorldState) { var serializer = new GameStateJsonSerializer(); var persistenceService = new PersistenceService(storage, serializer); services.AddSingleton <IBlobStorage>(storage); services.AddSingleton <GameStateJsonSerializer>(serializer); services.AddSingleton <PersistenceService>(persistenceService); if (persistenceService.WorldStateExists()) { // state exists. use it. ignore default state. var worldStateImmutable = await persistenceService.LoadWorldState(); services.AddSingleton <WorldState>(worldStateImmutable.ToMutable()); } else { // no state stored yet. use default state. services.AddSingleton <WorldState>(defaultWorldState.ToMutable()); } }
private void GetClientAction(GameState gameState, Socket socket) { var gameStateJson = GameStateJsonSerializer.Serialize(gameState); var bytes = Encoding.UTF8.GetBytes(gameStateJson); var jsonLength = bytes.Length; var lengthBytes = BitConverter.GetBytes(jsonLength); var state = new GetClientActionPayloadState(); state.workSocket = socket; state.gameState = gameState; state.gameStateBytes = bytes; try { socket.BeginSend(lengthBytes, 0, lengthBytes.Length, 0, new AsyncCallback(SendGameStatePayloadCallback), state); } catch (SocketException e) { Console.WriteLine(e); socket.Close(); } }