Esempio n. 1
0
        private Task HandleUpdate(DatagramSocket socket, NetworkPacket packet)
        {
            if (packet != null)
            {
                switch (packet.Type)
                {
                case PacketType.Entity:
                    _updateQueue.Add(packet as EntityPacket);
                    break;

                case PacketType.GameServerDataUpdate:
                    GameServerDataUpdate update = packet as GameServerDataUpdate;
                    _playerList = update.PlayerList;
                    _gameData   = update.GameData;
                    break;

                case PacketType.ShipCommand:
                    _gameInstance.GameModel.InputManager.ProcessRemoteInput(packet as ShipCommand);
                    break;

                case PacketType.DeadEntities:
                    DeadEntitiesPacket newlyDead = packet as DeadEntitiesPacket;
                    _updateQueue._deadEntities.AddRange(newlyDead.EntityList);
                    break;
                }
            }
            return(Task.Delay(0));
        }
Esempio n. 2
0
        // TODO:  I don't like doing this on a timer... it can fall behind and start stepping on itself, leading
        // to crashes.
        internal async void SyncTimer(object stateInfo)
        {
            foreach (PlayerData player in _playerList.Values)
            {
                if (player != null && _gameData.HostID != player.PlayerID)
                {
                    await SyncPlayer(player.PlayerID);
                }

                GameServerDataUpdate update = new GameServerDataUpdate(_playerList, _gameData);
                await SendUDPPacketToPlayer(player, update);
            }
        }