internal void SendConstructFoci(GridAi ai) { if (IsServer) { ++ai.Construct.Data.Repo.FocusData.Revision; if (!PrunedPacketsToClient.ContainsKey(ai.Construct.Data.Repo)) { PacketInfo oldInfo; ConstructFociPacket iPacket; if (PrunedPacketsToClient.TryGetValue(ai.Construct.Data.Repo.FocusData, out oldInfo)) { iPacket = (ConstructFociPacket)oldInfo.Packet; iPacket.EntityId = ai.MyGrid.EntityId; iPacket.Data = ai.Construct.Data.Repo.FocusData; } else { iPacket = PacketConstructFociPool.Get(); iPacket.MId = ++ai.MIds[(int)PacketType.ConstructFoci]; iPacket.EntityId = ai.MyGrid.EntityId; iPacket.SenderId = MultiplayerId; iPacket.PType = PacketType.ConstructFoci; iPacket.Data = ai.Construct.Data.Repo.FocusData; } PrunedPacketsToClient[ai.Construct.Data.Repo.FocusData] = new PacketInfo { Entity = ai.MyGrid, Packet = iPacket, }; } else { SendConstruct(ai); } } else { Log.Line($"SendConstructGroups should never be called on Client"); } }
private void ServerPacketsForClientsClean() { PacketsToClient.Clear(); foreach (var pInfo in PrunedPacketsToClient.Values) { switch (pInfo.Packet.PType) { case PacketType.AiData: { var iPacket = (AiDataPacket)pInfo.Packet; PacketAiPool.Return(iPacket); break; } case PacketType.CompBase: { var iPacket = (CompBasePacket)pInfo.Packet; PacketCompBasePool.Return(iPacket); break; } case PacketType.CompState: { var iPacket = (CompStatePacket)pInfo.Packet; PacketStatePool.Return(iPacket); break; } case PacketType.TargetChange: { var iPacket = (TargetPacket)pInfo.Packet; PacketTargetPool.Return(iPacket); break; } case PacketType.WeaponReload: { var iPacket = (WeaponReloadPacket)pInfo.Packet; PacketReloadPool.Return(iPacket); break; } case PacketType.Construct: { var iPacket = (ConstructPacket)pInfo.Packet; PacketConstructPool.Return(iPacket); break; } case PacketType.ConstructFoci: { var iPacket = (ConstructFociPacket)pInfo.Packet; PacketConstructFociPool.Return(iPacket); break; } case PacketType.WeaponAmmo: { var iPacket = (WeaponAmmoPacket)pInfo.Packet; PacketAmmoPool.Return(iPacket); break; } } } PrunedPacketsToClient.Clear(); }