コード例 #1
0
ファイル: Client.cs プロジェクト: GraionDilach/freeserf.net
        public void UpdateNetworkEvents()
        {
            void handleReceivedData(IRemote source, INetworkData data, ResponseHandler responseHandler)
            {
                if (!(source is IRemoteServer server))
                {
                    Log.Error.Write(ErrorSystemType.Network, "Client received data from a non-server.");
                    responseHandler?.Invoke(ResponseType.BadDestination);
                    return;
                }

                ProcessData(server, data, responseHandler);
            }

            NetworkDataReceiver?.ProcessReceivedData(handleReceivedData);

            if (Game != null && client != null && client.Connected)
            {
                lock (Game)
                {
                    var gameTime = Game.GameTime;

                    // Save game state from time to time to avoid huge syncs.
                    if (gameTime - lastSavedGameStateGameTime >= SavedGameState.SyncDelay && SavedGameState.TimeToSync(Game))
                    {
                        Log.Verbose.Write(ErrorSystemType.Network, $"Saving game state with game time {Misc.SecondsToTime(gameTime)}.");

                        lastSavedGameStateGameTime = gameTime;
                        lastSavedGameStates.Add(gameTime, SavedGameState.FromGame(Game));

                        Log.Verbose.Write(ErrorSystemType.Network, $"Finished saving game state with game time {Misc.SecondsToTime(gameTime)}.");
                    }
                }
            }
        }