public override byte[] Freeze() { lock (Sync) { _Incoming = null; _Outgoing = null; Frozen = true; gotReqHead = gotReqBody = gotResHead = hasResBody = false; Base.Unpipe(); IncomingHead.Unpipe(); IncomingHead.OnFail -= OnSegmentFail; if (!gotReqHead) { IncomingHead.OnCollect -= PushIncoming; } IncomingBody.Unpipe(); IncomingBody.Excess.Unpipe(); IncomingBody.OnFail -= OnSegmentFail; if (!gotReqBody) { IncomingBody.OnFinish -= FinishIncomingMessage; } OutgoingHead.Unpipe(); OutgoingHead.OnFail -= OnSegmentFail; OutgoingBody.Unpipe(); OutgoingBody.OnFail -= OnSegmentFail; if (!hasResBody) { OutgoingBody.OnFinish -= FinishOutgoingMessage; } return(excess.Read()); } }
private void FinishIncomingMessage() { lock (Sync) { gotReqBody = true; IncomingBody.OnFinish -= FinishIncomingMessage; IncomingBody.Unpipe(); _Incoming.Finish(); Base.Unpipe(); } }