コード例 #1
0
 private void ProcessRound(GameState gameState, Socket socket)
 {
     if (gameState.GameOver)
     {
         SendGameOverMessage(GameStateJsonSerializer.SerializeGameOver(gameState), socket);
     }
     else
     {
         GetClientAction(gameState, socket);
     }
 }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
        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();
            }
        }