public void CleanClientPackets()
        {
            foreach (var packet in ClientPacketsToClean)
            {
                PacketObjPool.Return(packet);
            }

            ClientPacketsToClean.Clear();
        }
        private void ProccessServerPacket(byte[] rawData)
        {
            var packet = MyAPIGateway.Utilities.SerializeFromBinary <Packet>(rawData);

            if (packet == null)
            {
                return;
            }

            var packetSize = rawData.Length;

            var report = Reporter.ReportPool.Get();

            report.Receiver   = NetworkReporter.Report.Received.Server;
            report.PacketSize = packetSize;
            Reporter.ReportData[packet.PType].Add(report);

            var packetObj = PacketObjPool.Get();

            packetObj.ErrorPacket.RecievedTick = Tick;
            packetObj.Packet = packet; packetObj.PacketSize = packetSize; packetObj.Report = report;

            switch (packetObj.Packet.PType)
            {
            case PacketType.ClientMouseEvent: {
                ServerClientMouseEvent(packetObj);
                break;
            }

            case PacketType.ActiveControlUpdate: {
                ServerActiveControlUpdate(packetObj);
                break;
            }

            case PacketType.FakeTargetUpdate: {
                ServerFakeTargetUpdate(packetObj);
                break;
            }

            case PacketType.AmmoCycleRequest: {
                ServerAmmoCycleRequest(packetObj);
                break;
            }

            case PacketType.ReticleUpdate: {
                ServerReticleUpdate(packetObj);
                break;
            }

            case PacketType.PlayerControlRequest:
            {
                ServerPlayerControlRequest(packetObj);
                break;
            }

            case PacketType.ClientAiAdd:
            case PacketType.ClientAiRemove: {
                ServerClientAiExists(packetObj);
                break;
            }

            case PacketType.OverRidesUpdate: {
                ServerOverRidesUpdate(packetObj);
                break;
            }

            case PacketType.RequestMouseStates: {
                ServerRequestMouseStates(packetObj);
                break;
            }

            case PacketType.RequestShootUpdate: {
                ServerRequestShootUpdate(packetObj);
                break;
            }

            case PacketType.FixedWeaponHitEvent: {
                ServerFixedWeaponHitEvent(packetObj);
                break;
            }

            case PacketType.RequestSetRof:
            case PacketType.RequestSetGuidance:
            case PacketType.RequestSetOverload:
            case PacketType.RequestSetRange:
            case PacketType.RequestSetDps:
            {
                ServerUpdateSetting(packetObj);
                break;
            }

            case PacketType.FocusUpdate:
            case PacketType.FocusLockUpdate:
            case PacketType.NextActiveUpdate:
            case PacketType.ReleaseActiveUpdate: {
                ServerFocusUpdate(packetObj);
                break;
            }

            case PacketType.ProblemReport: {
                ServerRequestReport(packetObj);
                break;
            }

            case PacketType.TerminalMonitor: {
                ServerTerminalMonitor(packetObj);
                break;
            }

            default:
                packetObj.Report.PacketValid = false;
                Reporter.ReportData[PacketType.Invalid].Add(packetObj.Report);
                break;
            }

            if (!packetObj.Report.PacketValid)
            {
                Log.LineShortDate(packetObj.ErrorPacket.Error, "net");
            }

            PacketObjPool.Return(packetObj);
        }