예제 #1
0
파일: Client.cs 프로젝트: abrn/exalt-root
    // Token: 0x06000231 RID: 561 RVA: 0x0000FC54 File Offset: 0x0000DE54
    private void RemoteRead(IAsyncResult ar)
    {
        bool          flag          = (bool)ar.AsyncState;
        PacketBuffer  packetBuffer  = flag ? this._clientBuffer : this._serverBuffer;
        NetworkStream networkStream = flag ? this._clientStream : this._serverStream;
        bool          flag2;
        RC4Cipher     rc4Cipher = (flag2 = (networkStream == this._clientStream)) ? this._clientReceiveState : this._serverReceiveState;

        try
        {
            if (networkStream.CanRead)
            {
                int num = networkStream.EndRead(ar);
                packetBuffer.Advance(num);
                if (num == 0)
                {
                    this.Dispose(null);
                }
                else if (packetBuffer.Index == 4)
                {
                    packetBuffer.Resize(IPAddress.NetworkToHostOrder(BitConverter.ToInt32(packetBuffer.Bytes, 0)));
                    this.BeginRead(packetBuffer.Index, packetBuffer.BytesRemaining(), flag2);
                }
                else if (packetBuffer.BytesRemaining() > 0)
                {
                    this.BeginRead(packetBuffer.Index, packetBuffer.BytesRemaining(), flag2);
                }
                else
                {
                    rc4Cipher.Cipher(packetBuffer.Bytes);
                    Packet packet     = Packet.Create(packetBuffer.Bytes);
                    object handleLock = this._handleLock;
                    lock (handleLock)
                    {
                        this.HandlePacket(packet);
                    }
                    if (packet.Send)
                    {
                        this.Send(packet, !flag2);
                    }
                    packetBuffer.Reset();
                    this.BeginRead(0, 4, flag2);
                }
            }
        }
        catch (Exception reason)
        {
            this.Dispose(reason);
        }
    }