Beispiel #1
0
        /// <summary>
        /// Attempts to create and initialize a connection to the DB server
        /// </summary>
        public bool connect(IPEndPoint dbPoint, bool bBlock)
        {       //Assume the worst
            _syncStart.Reset();
            _bLoginSuccess = false;

            using (LogAssume.Assume(_logger))
            {
                Log.write("Connecting to database server ({0})..", dbPoint);

                //Start our connection
                _conn.begin(dbPoint);

                //Send our initial packet
                CS_Initial init = new CS_Initial();

                _conn._client._connectionID = init.connectionID = new Random().Next();
                init.CRCLength    = Client.crcLength;
                init.udpMaxPacket = Client.udpMaxSize;

                _conn._client.send(init);

                _syncStart.WaitOne(10000);

                //Reset our event
                _syncStart.Reset();

                _server._lastDBAttempt = Environment.TickCount;

                //Were we successful?
                return(_bLoginSuccess);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Called when making a connection to a zoneserver
        /// </summary>
        public void connect(IPEndPoint sPoint)
        {
            _syncStart.Set();

            InfServer.Log.write("Connecting to {0}", sPoint);
            _wGame.updateChat(String.Format("Connecting to {0}", sPoint), "Client", InfServer.Protocol.Helpers.Chat_Type.System, "");

            //Start our connection
            _conn.begin(sPoint);

            //Send our initial packet
            CS_Initial init         = new CS_Initial();
            int        connectionID = new Random().Next();

            init.connectionID           = connectionID;
            _conn._client._connectionID = connectionID;
            _connectionID = connectionID;

            init.CRCLength    = 0;
            init.udpMaxPacket = 496;


            //Send our init!
            _conn._client.send(init);
        }
Beispiel #3
0
        /// <summary>
        /// Called when making a connection to a zoneserver
        /// </summary>
        public void connect(IPEndPoint sPoint)
        {
            Log.write("Connecting to {0}", sPoint);

            //Start our connection
            _conn.begin(sPoint);

            //Send our initial packet
            CS_Initial init = new CS_Initial();

            //Generate a connection ID.
            _conn._client._connectionID = init.connectionID = new Random().Next();
            init.CRCLength    = 0;
            init.udpMaxPacket = 496;

            //Send our init!
            _conn._client.send(init);
        }
Beispiel #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;
        }
Beispiel #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 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);
        }