public void Return(EventArgsPair eventArgs) { lock (syncRoot) { eventArgs.Send.SetBuffer(eventArgs.BufferOffset, bufferSize * 2); eventArgs.Receive.SetBuffer(eventArgs.BufferOffset, bufferSize * 2); pool.Push(eventArgs); } }
public Channel(Direction direction, Socket source, Socket target, ProxyClient client) { this.direction = direction; this.source = source; this.target = target; this.client = client; eventArgs = client.eventArgsManager.Take(); eventArgs.Send.Completed += SendEventArgs_Completed; eventArgs.Receive.Completed += ReceiveEventArgs_Completed; }
public void Dispose() { if (!disposed) { var eventArgs = this.eventArgs; this.eventArgs = null; if (eventArgs != null) { eventArgs.Send.Completed -= SendEventArgs_Completed; eventArgs.Receive.Completed -= ReceiveEventArgs_Completed; client.eventArgsManager.Return(eventArgs); } disposed = true; } }