public sCommandDetails(cCommandTag pTag, ReadOnlyCollection <cCommandPart> pParts, cCommandDisposables pDisposables, uint?pUIDValidity, cCommandHook pHook) { Tag = pTag ?? throw new ArgumentNullException(nameof(pTag)); Parts = pParts ?? throw new ArgumentNullException(nameof(pParts)); Disposables = pDisposables ?? throw new ArgumentNullException(nameof(pDisposables)); UIDValidity = pUIDValidity; Hook = pHook ?? throw new ArgumentNullException(nameof(pHook)); }
public cCommand(sCommandDetails pCommandDetails) { Tag = pCommandDetails.Tag ?? throw new ArgumentOutOfRangeException(nameof(pCommandDetails)); mParts = pCommandDetails.Parts ?? throw new ArgumentOutOfRangeException(nameof(pCommandDetails)); mDisposables = pCommandDetails.Disposables ?? throw new ArgumentOutOfRangeException(nameof(pCommandDetails)); mSASLAuthentication = mDisposables.SASLAuthentication; UIDValidity = pCommandDetails.UIDValidity; Hook = pCommandDetails.Hook ?? throw new ArgumentOutOfRangeException(nameof(pCommandDetails)); }
private async Task ZIdleIdleAsync(int pIdleRestartInterval, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandPipeline), nameof(ZIdleIdleAsync), pIdleRestartInterval); using (cCountdownTimer lCountdownTimer = new cCountdownTimer(pIdleRestartInterval, lContext)) { while (true) { cCommandTag lTag = new cCommandTag(); mIdleBuffer.Clear(); mIdleBuffer.AddRange(lTag); mIdleBuffer.Add(cASCII.SPACE); mIdleBuffer.AddRange(kIdleIdle); mIdleBuffer.Add(cASCII.CR); mIdleBuffer.Add(cASCII.LF); lContext.TraceVerbose("sending {0}", mIdleBuffer); mSynchroniser.InvokeNetworkSend(mIdleBuffer, lContext); await mConnection.WriteAsync(mIdleBuffer.ToArray(), mBackgroundCancellationTokenSource.Token, lContext).ConfigureAwait(false); if (await ZIdleProcessResponsesAsync(false, null, lTag, true, lContext).ConfigureAwait(false) != eIdleProcessResponsesTerminatedBy.continuerequest) { throw new cUnexpectedServerActionException(fCapabilities.idle, "idle completed before done sent", lContext); } var lProcessResponsesTerminatedBy = await ZIdleProcessResponsesAsync(true, lCountdownTimer.GetAwaitCountdownTask(), lTag, false, lContext).ConfigureAwait(false); if (lProcessResponsesTerminatedBy == eIdleProcessResponsesTerminatedBy.commandcompletion) { throw new cUnexpectedServerActionException(fCapabilities.idle, "idle completed before done sent", lContext); } mIdleBuffer.Clear(); mIdleBuffer.AddRange(kIdleDone); mIdleBuffer.Add(cASCII.CR); mIdleBuffer.Add(cASCII.LF); lContext.TraceVerbose("sending {0}", mIdleBuffer); mSynchroniser.InvokeNetworkSend(mIdleBuffer, lContext); await mConnection.WriteAsync(mIdleBuffer.ToArray(), mBackgroundCancellationTokenSource.Token, lContext).ConfigureAwait(false); await ZIdleProcessResponsesAsync(false, null, lTag, false, lContext).ConfigureAwait(false); if (lProcessResponsesTerminatedBy == eIdleProcessResponsesTerminatedBy.backgroundreleaser) { return; } lCountdownTimer.Restart(lContext); } } }
private async Task ZIdlePollCommandAsync(cBytes pCommand, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandPipeline), nameof(ZIdlePollCommandAsync), pCommand); cCommandTag lTag = new cCommandTag(); mIdleBuffer.Clear(); mIdleBuffer.AddRange(lTag); mIdleBuffer.Add(cASCII.SPACE); mIdleBuffer.AddRange(pCommand); mIdleBuffer.Add(cASCII.CR); mIdleBuffer.Add(cASCII.LF); lContext.TraceVerbose("sending {0}", mIdleBuffer); mSynchroniser.InvokeNetworkSend(mIdleBuffer, lContext); await mConnection.WriteAsync(mIdleBuffer.ToArray(), mBackgroundCancellationTokenSource.Token, lContext).ConfigureAwait(false); await ZIdleProcessResponsesAsync(false, null, lTag, false, lContext).ConfigureAwait(false); }
public void AddTag(cCommandTag pTag) { if (pTag == null) { throw new ArgumentNullException(nameof(pTag)); } if (mTracing) { if (mCurrentTraceBuffer != null) { mTraceBuffers.Add(new cBytes(mCurrentTraceBuffer)); } mCurrentTraceBuffer = new List <byte>(pTag); mCurrentTraceBuffer.Add(cASCII.SPACE); mLastByteWasSecret = false; } mSendBuffer.AddRange(pTag); mSendBuffer.Add(cASCII.SPACE); }
private async Task <eIdleProcessResponsesTerminatedBy> ZIdleProcessResponsesAsync(bool pMonitorBackgroundReleaser, Task pCountdownTask, cCommandTag pTag, bool pExpectContinueRequest, cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommandPipeline), nameof(ZIdleProcessResponsesAsync), pMonitorBackgroundReleaser, pTag, pExpectContinueRequest); Task lBackgroundReleaserTask; if (pMonitorBackgroundReleaser) { lBackgroundReleaserTask = mBackgroundReleaser.GetAwaitReleaseTask(lContext); } else { lBackgroundReleaserTask = null; } while (true) { Task lBuildResponseTask = mConnection.GetBuildResponseTask(lContext); Task lTask = await mBackgroundAwaiter.AwaitAny(lBuildResponseTask, lBackgroundReleaserTask, pCountdownTask).ConfigureAwait(false); if (ReferenceEquals(lTask, lBackgroundReleaserTask)) { return(eIdleProcessResponsesTerminatedBy.backgroundreleaser); } if (ReferenceEquals(lTask, pCountdownTask)) { return(eIdleProcessResponsesTerminatedBy.countdowntask); } var lResponse = mConnection.GetResponse(lContext); mSynchroniser.InvokeNetworkReceive(lResponse, lContext); var lCursor = new cBytesCursor(lResponse); if (lCursor.SkipBytes(kPlusSpace)) { if (!pExpectContinueRequest) { throw new cUnexpectedServerActionException(fCapabilities.idle, "unexpected continuation request", lContext); } mResponseTextProcessor.Process(eResponseTextContext.continuerequest, lCursor, null, lContext); return(eIdleProcessResponsesTerminatedBy.continuerequest); } if (ZProcessDataResponse(lCursor, lContext)) { continue; } if (pTag != null && ZProcessCommandCompletionResponse(lCursor, pTag, false, null, lContext) != null) { return(eIdleProcessResponsesTerminatedBy.commandcompletion); } lContext.TraceError("unrecognised response: {0}", lResponse); } }
private readonly bool mSort; // if the results are coming sorted this should be set to true public cCommandHookSearchExtended(cCommandTag pCommandTag, cSelectedMailbox pSelectedMailbox, bool pSort) : base(pCommandTag, pSelectedMailbox) { mSort = pSort; }
public cCommandHookBaseSearchExtended(cCommandTag pCommandTag, cSelectedMailbox pSelectedMailbox) { mCommandTag = pCommandTag ?? throw new ArgumentNullException(nameof(pCommandTag)); mSelectedMailbox = pSelectedMailbox ?? throw new ArgumentNullException(nameof(pSelectedMailbox)); }
public cSetUnseenCountExtendedCommandHook(cCommandTag pCommandTag, cSelectedMailbox pSelectedMailbox) : base(pCommandTag, pSelectedMailbox) { }