Exemplo n.º 1
0
        private static void SendCompleted(SocketAsyncEventArgs e)
        {
            SocketAsyncEventArgsX ex = (SocketAsyncEventArgsX)e;

            Buffers.Buffer buffer    = (Buffers.Buffer)ex.BufferX;
            AsyncTcpClient tcpclient = (AsyncTcpClient)e.UserToken;

            try
            {
                if (e.SocketError == SocketError.IOPending || e.SocketError == SocketError.Success)
                {
                    System.Threading.Interlocked.Increment(ref tcpclient.mSendQuantity);
                    tcpclient.mSendBytes += e.BytesTransferred;
                    if (e.BytesTransferred < e.Count)
                    {
                        buffer.Postion = buffer.Postion + e.BytesTransferred;
                        buffer.SetLength(buffer.Length - e.BytesTransferred);
                        buffer.AsyncTo(tcpclient.mSendEventArgs, tcpclient.Socket);
                    }
                    else
                    {
                        IBuffer nextbuf = buffer.Next;
                        try
                        {
                            buffer.Completed?.Invoke(buffer);
                        }
                        catch
                        {
                        }
                        buffer.Free();
                        if (nextbuf != null)
                        {
                            tcpclient.CommitBuffer(nextbuf);
                        }
                        else
                        {
                            tcpclient.SendCompleted();
                        }
                    }
                }
                else
                {
                    Buffers.Buffer.Free(ex.BufferX);
                    tcpclient.DisConnect();
                    tcpclient.ProcessError(new SocketException((int)e.SocketError), $"Send error {e.SocketError}");
                }
                if (tcpclient.SocketProcessHandler != null)
                {
                    tcpclient.SocketProcessHandler.SendCompleted(tcpclient, e);
                }
            }
            catch (Exception e_)
            {
                tcpclient.ProcessError(e_, "client network send error!");
            }
        }
Exemplo n.º 2
0
 private void BeginReceive()
 {
     if (IsConnected)
     {
         Buffers.Buffer buffer = (Buffers.Buffer)ReceiveBufferPool.Pop();
         buffer.UserToken = this;
         try
         {
             buffer.AsyncFrom(mReceiveEventArgs, mSocket);
         }
         catch (Exception e_)
         {
             buffer.Free();
             DisConnect();
             ProcessError(e_, "client begin network receive error!");
         }
     }
 }
Exemplo n.º 3
0
 public void BeginReceive()
 {
     if (IsConnected && System.Threading.Interlocked.Exchange(ref mReceiveState, 1) == 0)
     {
         Buffers.Buffer buffer = (Buffers.Buffer)BufferPool.Pop();
         buffer.UserToken = this;
         try
         {
             buffer.AsyncFrom(mReceiveEventArgs, mSocket);/// see ref=<see cref="SocketAsyncEventArgs.Completed"/>
         }
         catch (Exception e_)
         {
             InitReceiveState();
             buffer.Free();
             DisConnect();
             ProcessError(e_, "client begin network receive error!");
         }
     }
 }
Exemplo n.º 4
0
 private void BeginReceive()
 {
     if (IsConnected)
     {
         Buffers.Buffer buffer = (Buffers.Buffer)BufferPool.ReceiveDefault.Pop();
         if (!buffer.BindIOCompleted)
         {
             buffer.BindIOEvent(IO_Completed);
         }
         buffer.UserToken = this;
         try
         {
             buffer.AsyncFrom(mSocket);
         }
         catch (Exception e_)
         {
             buffer.Free();
             DisConnect();
             ProcessError(e_, "client begin network receive error!");
         }
     }
 }