Example #1
0
        public async void Read()
        {
            try
            {
                while (true)
                {
                    if (IsDisconnected)
                    {
                        return;
                    }

                    byte[] _buffer   = new byte[2];
                    int    bytesRead = await Stream.ReadAsync(_buffer, 0, 2);

                    if (bytesRead == 0)
                    {
                        Log.Debug("Client closed connection");
                        CloseConnection();
                        return;
                    }

                    if (bytesRead != 2)
                    {
                        throw new Exception("Wrong packet");
                    }

                    short length = BitConverter.ToInt16(_buffer, 0);
                    _buffer = new byte[length - 2];

                    bytesRead = await Stream.ReadAsync(_buffer, 0, length - 2);

                    if (bytesRead != length - 2)
                    {
                        throw new Exception("Wrong packet");
                    }

                    _crypt.Decrypt(_buffer);

                    Task.Factory.StartNew(() => _gamePacketHandler.HandlePacket(_buffer.ToPacket(), this));
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
                CloseConnection();
            }
        }
Example #2
0
        private void OnReceiveCallback(IAsyncResult result)
        {
            if (IsTerminated)
            {
                return;
            }

            Stream.EndRead(result);

            byte[] buff = new byte[_buffer.Length];
            _buffer.CopyTo(buff, 0);
            _crypt.Decrypt(buff);
            TrafficUp += _buffer.Length;

            GamePacketHandler.HandlePacket(new Packet(1, buff), this);

            new System.Threading.Thread(Read).Start();
        }