Exemplo n.º 1
0
 private void ProcessBody(IAsyncResult ar)
 {
     if (Connected)
     {
         try
         {
             int byteRead = socket.EndReceive(ar);
             if (byteRead == 0)
             {
                 pool.RemoveSocket(this);
                 pool.NetworkClose();
                 return;
             }
             var readBytes = (byte[])ar.AsyncState;
             messageStream.Write(readBytes, 0, byteRead);
             messageStream.Flush();
             long remaining = readBytes.Length - byteRead;
             if (remaining > 0)
             {
                 ReadBuffer(remaining, BODY);
             }
             else if (remaining == 0)
             {
                 messageStream.Position = 4;
                 try
                 {
                     var mail = formatter.Deserialize <Mail>(messageStream);
                     messageStream.Close();
                     messageStream = new MemoryStream();
                     pool.ReceiveMail(mail);
                 }
                 catch (Exception e)
                 {
                     pool.RemoveSocket(this);
                     pool.MessageError(this, e);
                 }
                 ReadBuffer(4, HEADER);
             }
         }
         catch (Exception e)
         {
             pool.RemoveSocket(this);
             pool.NetworkException(e);
         }
     }
 }