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; } } }
// 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; } } }
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); } }
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); } }