示例#1
0
 /// <summary>
 ///   Waits for more data to arrive
 /// </summary>
 /// <param name="manager"> Info about data to be received </param>
 private void WaitForData(ReceiveManager manager)
 {
     try
     {
         Socket.BeginReceive(manager.Buffer,
                             manager.Index,
                             manager.Buffer.Length - manager.Index,
                             SocketFlags.None,
                             DataReceived,
                             manager);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
         Console.WriteLine(e.StackTrace);
     }
 }
示例#2
0
 /// <summary>
 ///   Waits for more data to arrive
 /// </summary>
 /// <param name="manager"> Info about data to be received </param>
 private void WaitForData(ReceiveManager manager)
 {
     try
     {
         Socket.BeginReceive(manager.Buffer,
                             manager.Index,
                             manager.Buffer.Length - manager.Index,
                             SocketFlags.None,
                             DataReceived,
                             manager);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
         Console.WriteLine(e.StackTrace);
     }
 }
示例#3
0
        /// <summary>
        ///   Data received event handler
        /// </summary>
        /// <param name="iar"> IAsyncResult of the data received event </param>
        private void DataReceived(IAsyncResult iar)
        {
            ReceiveManager manager = (ReceiveManager)iar.AsyncState;

            try
            {
                int received = Socket.EndReceive(iar);
                manager.Index += received;
                if (manager.Index == manager.Buffer.Length)
                {
                    byte[] data = manager.Buffer;
                    switch (manager.State)
                    {
                    case ReceiveState.Header:
                        int packetLength = MapleCrypto.GetPacketLength(data);
                        manager.State  = ReceiveState.Content;
                        manager.Buffer = new byte[packetLength];
                        manager.Index  = 0;
                        WaitForData(manager);
                        break;

                    case ReceiveState.Content:
                        ReceiveCrypto.Crypt(data);
                        MapleCustomEncryption.Decrypt(data);
                        PacketReceived(new MaplePacketReader(data));
                        WaitForData(new ReceiveManager());
                        break;
                    }
                }
                else
                {
                    Console.WriteLine("[Warning] Not enough data");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
                Close("Exception while receiving data.");
            }
        }