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(); } }
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(); } }
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(); } }
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(); } }