Exemple #1
0
        /// <summary>
        /// Handles the initial packet sent by the server
        /// </summary>
        static public void Handle_SC_Initial(SC_Initial pkt, Client client)
        {
            CS_State csi = new CS_State();


            csi.tickCount       = (ushort)Environment.TickCount;
            csi.packetsSent     = client._packetsSent;
            csi.packetsReceived = client._packetsReceived;

            client.send(csi);
        }
Exemple #2
0
    {           /// <summary>
                /// Handles the initial packet sent by the server
                /// </summary>
        static public void Handle_SC_Initial(SC_Initial pkt, Client client)
        {       //We will be sending out state packet only once, as the sync doesn't
                //really matter on the Zone -> Database connection
            CS_State csi = new CS_State();

            csi.tickCount       = (ushort)Environment.TickCount;
            csi.packetsSent     = client._packetsSent;
            csi.packetsReceived = client._packetsReceived;

            client.send(csi);
        }
Exemple #3
0
        /// <summary>
        /// Handles the client's state packet
        /// </summary>
        static public void Handle_CS_State(CS_State pkt, Client client)
        {               //Update what we know of the client's connection state
            client._stats.clientCurrentUpdate  = pkt.clientCurrentUpdate;
            client._stats.clientAverageUpdate  = pkt.clientAverageUpdate;
            client._stats.clientShortestUpdate = pkt.clientShortestUpdate;
            client._stats.clientLongestUpdate  = pkt.clientLongestUpdate;
            client._stats.clientLastUpdate     = pkt.clientLastUpdate;

            client._stats.clientPacketsSent = pkt.packetsSent;
            client._stats.clientPacketsRecv = pkt.packetsReceived;
            client._stats.serverPacketsSent = client._packetsSent;
            client._stats.serverPacketsRecv = client._packetsReceived;

            //Prepare our reply
            SC_State sci = new SC_State();

            sci.tickCount       = pkt.tickCount;
            sci.serverTickCount = Environment.TickCount;
            sci.clientSentCount = pkt.packetsSent;
            sci.clientRecvCount = pkt.packetsReceived;
            sci.serverRecvCount = client._stats.serverPacketsRecv;
            sci.serverSentCount = client._stats.serverPacketsSent;

            client.send(sci);

            //Set our sync difference
            short wander   = (short)client._timeDiff;
            int   timeDiff = (sci.serverTickCount - pkt.tickCount) & 0xFFFF;

            client._timeDiff = (short)timeDiff;

            //Calculate the clock wander
            if (wander != 0)
            {
                wander = (short)Math.Abs(client._timeDiff - wander);
                client._stats.clockWander[client._stats.wanderIdx++ % 10] = wander;
            }

            //Adjust the client's data rates accordingly
            client.adjustRates(pkt.clientAverageUpdate);
        }
Exemple #4
0
    {           /// <summary>
                /// Creates a new system protocol packet.
                /// </summary>
        public PacketBase createSystemPacket(ushort typeID, byte[] buffer, int offset, int size)
        {       //Ready our packet base
            PacketBase packet = null;

            offset++;
            size--;

            //What are we dealing with?
            switch (typeID)
            {
            case CS_Initial.TypeID:
                packet = new CS_Initial(typeID, buffer, offset, size);
                break;

            case BoxPacket.TypeID:
                packet = new BoxPacket(typeID, buffer, offset, size);
                break;

            case Disconnect.TypeID:
                packet = new Disconnect(typeID, buffer, offset, size);
                break;

            case PingPacket.TypeID:
                packet = new PingPacket(typeID, buffer, offset, size);
                break;

            case CS_State.TypeID:
                packet = new CS_State(typeID, buffer, offset, size);
                break;

            case Reliable.TypeID:
                packet = new Reliable(typeID, buffer, offset, size, 0);
                break;

            case Reliable.TypeID + 1:
                packet = new Reliable(typeID, buffer, offset, size, 1);
                break;

            case Reliable.TypeID + 2:
                packet = new Reliable(typeID, buffer, offset, size, 2);
                break;

            case Reliable.TypeID + 3:
                packet = new Reliable(typeID, buffer, offset, size, 3);
                break;

            case OutOfSync.TypeID:
                packet = new OutOfSync(typeID, buffer, offset, size, 0);
                break;

            case OutOfSync.TypeID + 1:
                packet = new OutOfSync(typeID, buffer, offset, size, 1);
                break;

            case OutOfSync.TypeID + 2:
                packet = new OutOfSync(typeID, buffer, offset, size, 2);
                break;

            case OutOfSync.TypeID + 3:
                packet = new OutOfSync(typeID, buffer, offset, size, 3);
                break;

            case ReliableEcho.TypeID:
                packet = new ReliableEcho(typeID, buffer, offset, size, 0);
                break;

            case ReliableEcho.TypeID + 1:
                packet = new ReliableEcho(typeID, buffer, offset, size, 1);
                break;

            case ReliableEcho.TypeID + 2:
                packet = new ReliableEcho(typeID, buffer, offset, size, 2);
                break;

            case ReliableEcho.TypeID + 3:
                packet = new ReliableEcho(typeID, buffer, offset, size, 3);
                break;

            case ReliableBox.TypeID:
                packet = new ReliableBox(typeID, buffer, offset, size, 0);
                break;

            case ReliableBox.TypeID + 1:
                packet = new ReliableBox(typeID, buffer, offset, size, 1);
                break;

            case ReliableBox.TypeID + 2:
                packet = new ReliableBox(typeID, buffer, offset, size, 2);
                break;

            case ReliableBox.TypeID + 3:
                packet = new ReliableBox(typeID, buffer, offset, size, 3);
                break;

            case DataPacketRcv.TypeID:
                packet = new DataPacketRcv(typeID, buffer, offset, size, 0);
                break;

            case DataPacketRcv.TypeID + 1:
                packet = new DataPacketRcv(typeID, buffer, offset, size, 1);
                break;

            case DataPacketRcv.TypeID + 2:
                packet = new DataPacketRcv(typeID, buffer, offset, size, 2);
                break;

            case DataPacketRcv.TypeID + 3:
                packet = new DataPacketRcv(typeID, buffer, offset, size, 3);
                break;

            default:
                //An undefined packet.
                packet = new PacketDummy(typeID, buffer, offset, size);
                break;
            }

            return(packet);
        }