private void OnCleanup() { if (Disposed) { return; } Disposed = ShouldDispose = true; Other.ShouldDispose = true; Other = null; Source.TryDispose(); Target.TryDispose(); RecSAEA.TryDispose(); SendSAEA.TryDispose(); Source = Target = null; RecSAEA = SendSAEA = null; Buffer = null; }
private void Process() { try { while (true) { if (ShouldDispose) { OnCleanup(); return; } if (Receiving) { Receiving = false; SendingOffset = -1; if (Source.ReceiveAsync(RecSAEA)) { return; } } else { if (SendingOffset == -1) { Received = RecSAEA.BytesTransferred; SendingOffset = 0; if (Received == 0) { ShouldDispose = true; continue; } } else { SendingOffset += SendSAEA.BytesTransferred; } if (SendingOffset != Received) { SendSAEA.SetBuffer(Buffer, SendingOffset, Received - SendingOffset); if (Target.SendAsync(SendSAEA)) { return; } } else { Receiving = true; } } } } catch { OnCleanup(); } }
public void Dispose() { Disconnect(); ReceiveSAEA.Dispose(); SendSAEA.Dispose(); }