Ejemplo n.º 1
0
        public void SetLostReliableData(ServerUpdatePacket lostPacket)
        {
            if (lostPacket.DataPacketIds.Contains(ServerPacketId.HelloServer))
            {
                Logger.Get().Info(this, "  Resending HelloServer data");

                DataPacketIds.Add(ServerPacketId.HelloServer);
                HelloServer = lostPacket.HelloServer;
            }

            if (lostPacket.DataPacketIds.Contains(ServerPacketId.PlayerEnterScene))
            {
                Logger.Get().Info(this, "  Resending PlayerEnterScene data");

                DataPacketIds.Add(ServerPacketId.PlayerEnterScene);
                PlayerEnterScene = lostPacket.PlayerEnterScene;
            }

            if (lostPacket.DataPacketIds.Contains(ServerPacketId.PlayerLeaveScene))
            {
                Logger.Get().Info(this, "  Resending PlayerLeaveScene data");

                DataPacketIds.Add(ServerPacketId.PlayerLeaveScene);
            }

            if (lostPacket.DataPacketIds.Contains(ServerPacketId.PlayerTeamUpdate))
            {
                // Only update if the current packet does not already contain another team update
                // since we want the latest update to arrive
                if (!DataPacketIds.Contains(ServerPacketId.PlayerTeamUpdate))
                {
                    Logger.Get().Info(this, "  Resending PlayerTeamUpdate data");

                    DataPacketIds.Add(ServerPacketId.PlayerTeamUpdate);
                    PlayerTeamUpdate = lostPacket.PlayerTeamUpdate;
                }
            }

            if (lostPacket.DataPacketIds.Contains(ServerPacketId.PlayerSkinUpdate))
            {
                // Only update if the current packet does not already contain another skin update
                // since we want the latest update to arrive
                if (!DataPacketIds.Contains(ServerPacketId.PlayerSkinUpdate))
                {
                    Logger.Get().Info(this, "  Resending PlayerSkinUpdate data");

                    DataPacketIds.Add(ServerPacketId.PlayerSkinUpdate);
                    PlayerSkinUpdate = lostPacket.PlayerSkinUpdate;
                }
            }
        }
Ejemplo n.º 2
0
        // TODO: make sure that resent data does not overwrite newer instance of later sent reliable data
        public void SetLostReliableData(ClientUpdatePacket lostPacket)
        {
            if (lostPacket.DataPacketIds.Contains(ClientPacketId.PlayerConnect))
            {
                Logger.Get().Info(this, "  Resending PlayerConnect data");

                DataPacketIds.Add(ClientPacketId.PlayerConnect);

                PlayerConnect.DataInstances.AddRange(lostPacket.PlayerConnect.DataInstances);
            }

            if (lostPacket.DataPacketIds.Contains(ClientPacketId.PlayerDisconnect))
            {
                Logger.Get().Info(this, "  Resending PlayerDisconnect data");

                DataPacketIds.Add(ClientPacketId.PlayerDisconnect);

                PlayerDisconnect.DataInstances.AddRange(lostPacket.PlayerDisconnect.DataInstances);
            }

            if (lostPacket.DataPacketIds.Contains(ClientPacketId.PlayerEnterScene))
            {
                Logger.Get().Info(this, "  Resending PlayerEnterScene data");

                DataPacketIds.Add(ClientPacketId.PlayerEnterScene);

                PlayerEnterScene.DataInstances.AddRange(lostPacket.PlayerEnterScene.DataInstances);
            }

            if (lostPacket.DataPacketIds.Contains(ClientPacketId.PlayerAlreadyInScene))
            {
                Logger.Get().Info(this, "  Resending PlayerAlreadyInScene data");

                DataPacketIds.Add(ClientPacketId.PlayerAlreadyInScene);

                PlayerAlreadyInScene.PlayerEnterSceneList.AddRange(lostPacket.PlayerAlreadyInScene
                                                                   .PlayerEnterSceneList);
            }

            if (lostPacket.DataPacketIds.Contains(ClientPacketId.PlayerLeaveScene))
            {
                Logger.Get().Info(this, "  Resending PlayerLeaveScene data");

                DataPacketIds.Add(ClientPacketId.PlayerLeaveScene);

                PlayerLeaveScene.DataInstances.AddRange(lostPacket.PlayerLeaveScene.DataInstances);
            }

            if (lostPacket.DataPacketIds.Contains(ClientPacketId.PlayerDeath))
            {
                Logger.Get().Info(this, "  Resending PlayerDeath data");

                DataPacketIds.Add(ClientPacketId.PlayerDeath);

                PlayerDeath.DataInstances.AddRange(lostPacket.PlayerDeath.DataInstances);
            }

            if (lostPacket.DataPacketIds.Contains(ClientPacketId.PlayerTeamUpdate))
            {
                Logger.Get().Info(this, "  Resending PlayerTeamUpdate data");

                DataPacketIds.Add(ClientPacketId.PlayerTeamUpdate);

                PlayerTeamUpdate.DataInstances.AddRange(lostPacket.PlayerTeamUpdate.DataInstances);
            }

            if (lostPacket.DataPacketIds.Contains(ClientPacketId.PlayerSkinUpdate))
            {
                // Only update if the current packet does not already contain another skin update
                // since we want the latest update to arrive
                if (!DataPacketIds.Contains(ClientPacketId.PlayerSkinUpdate))
                {
                    Logger.Get().Info(this, "  Resending PlayerSkinUpdate data");

                    DataPacketIds.Add(ClientPacketId.PlayerSkinUpdate);

                    PlayerSkinUpdate.DataInstances.AddRange(lostPacket.PlayerSkinUpdate.DataInstances);
                }
            }

            if (lostPacket.DataPacketIds.Contains(ClientPacketId.GameSettingsUpdated))
            {
                // Only update if the current packet does not already contain another settings update
                // since we want the latest update to arrive
                if (!DataPacketIds.Contains(ClientPacketId.GameSettingsUpdated))
                {
                    Logger.Get().Info(this, "  Resending GameSettingsUpdated data");

                    DataPacketIds.Add(ClientPacketId.GameSettingsUpdated);

                    GameSettingsUpdate = lostPacket.GameSettingsUpdate;
                }
            }
        }
Ejemplo n.º 3
0
        public override void ReadPacket()
        {
            ReadHeaders(Packet);

            // Read the byte flag representing which packets
            // are included in this update
            var dataPacketIdFlag = Packet.ReadUShort();
            // Keep track of value of current bit
            var currentTypeValue = 1;

            for (var i = 0; i < Enum.GetNames(typeof(ClientPacketId)).Length; i++)
            {
                // If this bit was set in our flag, we add the type to the list
                if ((dataPacketIdFlag & currentTypeValue) != 0)
                {
                    DataPacketIds.Add((ClientPacketId)i);
                }

                // Increase the value of current bit
                currentTypeValue *= 2;
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerConnect))
            {
                PlayerConnect.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerDisconnect))
            {
                PlayerDisconnect.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerEnterScene))
            {
                PlayerEnterScene.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerAlreadyInScene))
            {
                PlayerAlreadyInScene.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerLeaveScene))
            {
                PlayerLeaveScene.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerUpdate))
            {
                PlayerUpdates.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.EntityUpdate))
            {
                EntityUpdates.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerDeath))
            {
                PlayerDeath.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerTeamUpdate))
            {
                PlayerTeamUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerSkinUpdate))
            {
                PlayerSkinUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerEmoteUpdate))
            {
                PlayerEmoteUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.GameSettingsUpdated))
            {
                GameSettingsUpdate.ReadData(Packet);
            }
        }
Ejemplo n.º 4
0
        public override void ReadPacket()
        {
            ReadHeaders(Packet);

            // Read the byte flag representing which packets
            // are included in this update
            var dataPacketIdFlag = Packet.ReadUShort();
            // Keep track of value of current bit
            var currentTypeValue = 1;

            for (var i = 0; i < Enum.GetNames(typeof(ServerPacketId)).Length; i++)
            {
                // If this bit was set in our flag, we add the type to the list
                if ((dataPacketIdFlag & currentTypeValue) != 0)
                {
                    DataPacketIds.Add((ServerPacketId)i);
                }

                // Increase the value of current bit
                currentTypeValue *= 2;
            }

            /*
             * foreach (var item in DataPacketIds)
             * {
             *  Logger.Info(this,$"reading packet with {Enum.GetName(typeof(ServerPacketId), item)}");
             * }
             */


            if (DataPacketIds.Contains(ServerPacketId.HelloServer))
            {
                HelloServer.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ServerPacketId.PlayerUpdate))
            {
                PlayerUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ServerPacketId.EntityUpdate))
            {
                EntityUpdates.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ServerPacketId.PlayerEnterScene))
            {
                PlayerEnterScene.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ServerPacketId.PlayerTeamUpdate))
            {
                PlayerTeamUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ServerPacketId.PlayerSkinUpdate))
            {
                PlayerSkinUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ServerPacketId.PlayerEmoteUpdate))
            {
                PlayerEmoteUpdate.ReadData(Packet);
            }
        }