コード例 #1
0
        private void ProcessRecieve(SocketAsyncEventArgs args)
        {
            try
            {
                var bytesReceived = args.BytesTransferred;

                if (bytesReceived == 0)
                //if (args.SocketError != SocketError.Success)
                {
                    // no bytes means the client disconnected, so clean up!
                    _server.DisconnectClient(this, true);
                }
                else
                {
                    // increment our counters
                    unchecked
                    {
                        _bytesReceived += (uint)bytesReceived;
                    }

                    Interlocked.Add(ref _totalBytesReceived, bytesReceived);

                    _remainingLength += bytesReceived;

                    if (OnReceive(_bufferSegment))
                    {
                        // packet processed entirely
                        _offset          = 0;
                        _remainingLength = 0;
                        _bufferSegment.DecrementUsage();
                        _bufferSegment = Buffers.CheckOut();
                    }
                    else
                    {
                        EnsureBuffer();
                    }

                    ResumeReceive();
                }
            }
            catch (ObjectDisposedException)
            {
                _server.DisconnectClient(this, true);
            }
            catch (Exception e)
            {
                _server.Warning(this, e);
                _server.DisconnectClient(this, true);
            }
            finally
            {
                args.Completed -= ReceiveAsyncComplete;
                SocketHelpers.ReleaseSocketArg(args);
            }
        }
コード例 #2
0
ファイル: ClientBase.cs プロジェクト: 0xFh/Asda2-Project
 private void ProcessRecieve(SocketAsyncEventArgs args)
 {
     try
     {
         int bytesTransferred = args.BytesTransferred;
         if (bytesTransferred == 0)
         {
             _server.DisconnectClient(this, true, false);
         }
         else
         {
             _bytesReceived += (uint)bytesTransferred;
             Interlocked.Add(ref _totalBytesReceived, bytesTransferred);
             _remainingLength += bytesTransferred;
             if (_remainingLength > 6)
             {
                 OnReceive();
             }
             ResumeReceive();
         }
     }
     catch (ObjectDisposedException ex)
     {
         _server.DisconnectClient(this, true, false);
     }
     catch (Exception ex)
     {
         _server.Warning(this, ex);
         _server.DisconnectClient(this, true, false);
     }
     finally
     {
         args.Completed -= ReceiveAsyncComplete;
         SocketHelpers.ReleaseSocketArg(args);
     }
 }
コード例 #3
0
 private void ProcessRecieve(SocketAsyncEventArgs args)
 {
     try
     {
         int bytesTransferred = args.BytesTransferred;
         if (bytesTransferred == 0)
         {
             this._server.DisconnectClient((IClient)this, true, false);
         }
         else
         {
             this._bytesReceived += (uint)bytesTransferred;
             Interlocked.Add(ref ClientBase._totalBytesReceived, (long)bytesTransferred);
             this._remainingLength += bytesTransferred;
             if (this._remainingLength > 6)
             {
                 this.OnReceive();
             }
             this.ResumeReceive();
         }
     }
     catch (ObjectDisposedException ex)
     {
         this._server.DisconnectClient((IClient)this, true, false);
     }
     catch (Exception ex)
     {
         this._server.Warning((IClient)this, ex);
         this._server.DisconnectClient((IClient)this, true, false);
     }
     finally
     {
         args.Completed -= new EventHandler <SocketAsyncEventArgs>(this.ReceiveAsyncComplete);
         SocketHelpers.ReleaseSocketArg(args);
     }
 }
コード例 #4
0
ファイル: ClientBase.cs プロジェクト: 0xFh/Asda2-Project
 private static void SendAsyncComplete(object sender, SocketAsyncEventArgs args)
 {
     args.Completed -= SendAsyncComplete;
     SocketHelpers.ReleaseSocketArg(args);
 }
コード例 #5
0
 private static void SendAsyncComplete(object sender, SocketAsyncEventArgs args)
 {
     args.Completed -= new EventHandler <SocketAsyncEventArgs>(ClientBase.SendAsyncComplete);
     SocketHelpers.ReleaseSocketArg(args);
 }