示例#1
0
        /// <summary>
        /// Handles the initial packet sent by the server
        /// </summary>
        static public void Handle_SC_Initial(SC_Initial pkt, Client client)
        {               //Has he already been initialized?
            if (client._bInitialized)
            {           //Make a note
                Log.write(TLog.Warning, "Server attempted to initialize connection twice.");
                //client.destroy();
                return;
            }

            client._C2S_UDPSize  = Client.udpMaxSize;
            client._S2C_UDPSize  = pkt.serverUDPMax;
            client._connectionID = pkt.connectionID;

            //Set up our CRC state
            client._CRCLength   = pkt.CRCLen;
            client._CRC_C2S.key = (uint)pkt.CRCSeed;
            client._CRC_S2C.key = (uint)pkt.CRCSeed;

            //Enable CRC!
            client._CRC_C2S.bActive = (pkt.CRCLen > 0);
            client._CRC_S2C.bActive = (pkt.CRCLen > 0);

            //We're now initialized
            client._bInitialized = true;
        }
示例#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);
        }
示例#3
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);
        }
示例#4
0
    {           /// <summary>
                /// Handles the initial packet sent by the client
                /// </summary>
        static public void Handle_CS_Initial(CS_Initial pkt, Client client)
        {       //Has he already been initialized?
            if (client._bInitialized)
            {   //Make a note
                Log.write(TLog.Warning, "Client " + client + " attempted to initialize connection twice.");
                client.destroy();
                return;
            }

            client._C2S_UDPSize  = pkt.udpMaxPacket;
            client._connectionID = pkt.connectionID;

            //Set up our CRC keys
            int CRCKey = new Random().Next();

            client._CRC_C2S.key = (uint)CRCKey;
            client._CRC_S2C.key = (uint)CRCKey;

            //Send our initial login packet
            SC_Initial sci = new SC_Initial();

            sci.connectionID  = pkt.connectionID;
            sci.CRCSeed       = CRCKey;
            client._CRCLength = sci.CRCLen = (byte)Client.crcLength;
            sci.serverUDPMax  = Client.udpMaxSize;
            sci.unk1          = 2;

            client.send(sci);

            //Enable CRC!
            client._CRC_C2S.bActive = true;
            client._CRC_S2C.bActive = true;

            //He's now initialized
            client._bInitialized = true;
        }
示例#5
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 SC_Initial.TypeID:
                packet = new SC_Initial(typeID, buffer, offset, size);
                break;

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

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

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

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

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

            case SC_Chat.TypeID:
                packet = new SC_Chat(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 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);
        }