private void remoteReceiveCallback(IAsyncResult ar)
 {
     if (_closed)
     {
         return;
     }
     try
     {
         int bytesRead = _remote.EndReceive(ar);
         if (bytesRead > 0)
         {
             var e = new RelayEventArgs(remoteRecvBuffer, 0, bytesRead);
             _relay.onOutbound(e);
             _local.BeginSendTo(e.Buffer, 0, e.Length, 0, _localEP, new AsyncCallback(localSendCallback), null);
             Delay();
         }
         else
         {
             this.Close();
         }
         Delay();
     }
     catch (Exception e)
     {
         _relay.onError(new RelayErrorEventArgs(e));
         this.Close();
     }
 }
Esempio n. 2
0
 private void StartSend()
 {
     if (_closed)
     {
         return;
     }
     try
     {
         lock (_packages)
         {
             if (_sending || !_connected)
             {
                 return;
             }
             if (_packages.Count > 0)
             {
                 _sending = true;
                 byte[] bytes = _packages.First.Value;
                 _packages.RemoveFirst();
                 _relay.onOutbound(bytes.Length);
                 _remote.BeginSend(bytes, 0, bytes.Length, 0, new AsyncCallback(remoteSendCallback), null);
                 Delay();
             }
         }
     }
     catch (Exception e)
     {
         Logging.LogUsefulException(e);
         this.Close();
     }
 }
Esempio n. 3
0
            private void PipeConnectionReceiveCallback(IAsyncResult ar)
            {
                if (_closed)
                {
                    return;
                }
                try
                {
                    int bytesRead = _local.EndReceive(ar);

                    if (bytesRead > 0)
                    {
                        _relay.onOutbound(bytesRead);
                        _remote.BeginSend(connetionRecvBuffer, 0, bytesRead, 0, new AsyncCallback(PipeRemoteSendCallback), null);
                    }
                    else
                    {
                        this.Close();
                    }
                }
                catch (Exception e)
                {
                    Logging.LogUsefulException(e);
                    this.Close();
                }
            }
Esempio n. 4
0
            private void PipeRemoteReceiveCallback(IAsyncResult ar)
            {
                if (_closed)
                {
                    return;
                }
                try
                {
                    int bytesRead = _remote.EndReceive(ar);

                    if (bytesRead > 0)
                    {
                        _relay.onWriteLog(new WriteLogEventArgs($"{_id}: 接收到 {_remoteEP} 的数据,耗时 {Environment.TickCount - _remoteTime} 毫秒\r\n"));
                        _remoteTime = Environment.TickCount;
                        var e = new RelayEventArgs(remoteRecvBuffer, 0, bytesRead);
                        _relay.onOutbound(e);
                        _local.BeginSend(e.Buffer, e.Offset, e.Length, 0, new AsyncCallback(PipeConnectionSendCallback), null);
                    }
                    else
                    {
                        this.Close();
                    }
                }
                catch (Exception e)
                {
                    _relay.onError(new RelayErrorEventArgs(e));
                    this.Close();
                }
            }