/// <summary> /// Initialises a new instance with the specified timer duration. The first countdown starts immediately. /// </summary> /// <param name="pTimeout">The duration of each successive countdown, in milliseconds.</param> /// <param name="pParentContext">Context for trace messages.</param> public cCountdownTimer(int pTimeout, cTrace.cContext pParentContext) { var lContext = pParentContext.NewObject(nameof(cCountdownTimer), pTimeout); mTimeout = pTimeout; mTask = Task.Delay(mTimeout, mCancellationTokenSource.Token); }
public cSelectedMailboxCache(cSelectedMailboxCache pOldCache, uint pUIDValidity, cTrace.cContext pParentContext) { var lContext = pParentContext.NewObject(nameof(cSelectedMailboxCache), pOldCache, pUIDValidity); mSynchroniser = pOldCache.mSynchroniser; mMailboxCacheItem = pOldCache.mMailboxCacheItem; mUIDValidity = pUIDValidity; mNoModSeq = pOldCache.mNoModSeq; int lMessageCount = pOldCache.mItems.Count; mItems = new List <cItem>(lMessageCount); for (int i = 0; i < lMessageCount; i++) { mItems.Add(new cItem(this, mCacheSequence++)); } mRecentCount = pOldCache.mRecentCount; mUIDNext = 0; mUIDNextMessageCount = 0; mUIDNextUnknownCount = lMessageCount; mUnseenCount = 0; mUnseenUnknownCount = lMessageCount; mHighestModSeq = 0; ZSetMailboxStatus(lContext); }
public cCallbackSynchroniser(object pSender, cTrace.cContext pParentContext) { var lContext = pParentContext.NewObject(nameof(cCallbackSynchroniser)); mSender = pSender; mForegroundReleaser = new cReleaser("callbacksynchroniser_foreground", mCancellationTokenSource.Token); mBackgroundReleaser = new cReleaser("callbacksynchroniser_background", mCancellationTokenSource.Token); mBackgroundTask = ZBackgroundTaskAsync(lContext); }
public cSelectedMailbox(cCallbackSynchroniser pSynchroniser, cMailboxCacheItem pMailboxCacheItem, bool pSelectedForUpdate, bool pAccessReadOnly, int pExists, int pRecent, uint pUIDNext, uint pUIDValidity, uint pHighestModSeq, cTrace.cContext pParentContext) { var lContext = pParentContext.NewObject(nameof(cSelectedMailbox), pMailboxCacheItem, pSelectedForUpdate, pAccessReadOnly, pExists, pRecent, pUIDNext, pUIDValidity, pHighestModSeq); mSynchroniser = pSynchroniser ?? throw new ArgumentNullException(nameof(pSynchroniser)); mMailboxCacheItem = pMailboxCacheItem ?? throw new ArgumentNullException(nameof(pMailboxCacheItem)); mSelectedForUpdate = pSelectedForUpdate; mAccessReadOnly = pAccessReadOnly; mCache = new cSelectedMailboxCache(pSynchroniser, pMailboxCacheItem, pUIDValidity, pExists, pRecent, pUIDNext, pHighestModSeq, lContext); }
public cSelectedMailboxCache(cCallbackSynchroniser pSynchroniser, cMailboxCacheItem pMailboxCacheItem, uint pUIDValidity, int pMessageCount, int pRecentCount, uint pUIDNext, uint pHighestModSeq, cTrace.cContext pParentContext) { var lContext = pParentContext.NewObject(nameof(cSelectedMailboxCache), pMailboxCacheItem, pUIDValidity, pMessageCount, pRecentCount, pUIDNext, pHighestModSeq); mSynchroniser = pSynchroniser ?? throw new ArgumentNullException(nameof(pSynchroniser)); mMailboxCacheItem = pMailboxCacheItem ?? throw new ArgumentNullException(nameof(pMailboxCacheItem)); mUIDValidity = pUIDValidity; mNoModSeq = pHighestModSeq == 0; mItems = new List <cItem>(pMessageCount); for (int i = 0; i < pMessageCount; i++) { mItems.Add(new cItem(this, mCacheSequence++)); } mRecentCount = pRecentCount; mUIDNext = pUIDNext; if (mUIDNext == 0) { mUIDNextMessageCount = 0; mUIDNextUnknownCount = pMessageCount; } else { mUIDNextMessageCount = pMessageCount; mUIDNextUnknownCount = 0; } mUnseenCount = 0; mUnseenUnknownCount = pMessageCount; mHighestModSeq = pHighestModSeq; ZSetMailboxStatus(lContext); }
public cCommandPipeline(cCallbackSynchroniser pSynchroniser, Action <cTrace.cContext> pDisconnected, cBatchSizerConfiguration pNetworkWriteConfiguration, cIdleConfiguration pIdleConfiguration, cTrace.cContext pParentContext) { var lContext = pParentContext.NewObject(nameof(cCommandPipeline), pIdleConfiguration); mSynchroniser = pSynchroniser ?? throw new ArgumentNullException(nameof(pSynchroniser)); mDisconnected = pDisconnected ?? throw new ArgumentNullException(nameof(pDisconnected)); if (pNetworkWriteConfiguration == null) { throw new ArgumentNullException(nameof(pNetworkWriteConfiguration)); } mConnection = new cConnection(pNetworkWriteConfiguration); mIdleConfiguration = pIdleConfiguration; mResponseTextProcessor = new cResponseTextProcessor(pSynchroniser); // these depend on the cancellationtokensource being constructed mBackgroundReleaser = new cReleaser("commandpipeline_background", mBackgroundCancellationTokenSource.Token); mBackgroundAwaiter = new cAwaiter(mBackgroundCancellationTokenSource.Token); mBackgroundSendBuffer = new cSendBuffer(pSynchroniser, mConnection, mBackgroundCancellationTokenSource.Token); // plumbing mIdleBlock.Released += mBackgroundReleaser.Release; // when the idle block is removed, kick the background process }
// (note for when adding more: they need to be disposed) public cSession(cCallbackSynchroniser pSynchroniser, fCapabilities pIgnoreCapabilities, fMailboxCacheDataItems pMailboxCacheDataItems, cBatchSizerConfiguration pNetworkWriteConfiguration, cIdleConfiguration pIdleConfiguration, cBatchSizerConfiguration pFetchCacheItemsConfiguration, cBatchSizerConfiguration pFetchBodyReadConfiguration, Encoding pEncoding, cTrace.cContext pParentContext) { var lContext = pParentContext.NewObject(nameof(cSession), pIgnoreCapabilities, pMailboxCacheDataItems, pNetworkWriteConfiguration, pIdleConfiguration, pFetchCacheItemsConfiguration, pFetchBodyReadConfiguration); mSynchroniser = pSynchroniser ?? throw new ArgumentNullException(nameof(pSynchroniser)); mIgnoreCapabilities = pIgnoreCapabilities; mMailboxCacheDataItems = pMailboxCacheDataItems; mPipeline = new cCommandPipeline(pSynchroniser, ZDisconnected, pNetworkWriteConfiguration, pIdleConfiguration, lContext); mFetchCacheItemsSizer = new cBatchSizer(pFetchCacheItemsConfiguration); mFetchBodyReadSizer = new cBatchSizer(pFetchBodyReadConfiguration); mCommandPartFactory = new cCommandPartFactory(false, null); if (pEncoding == null) { mEncodingPartFactory = mCommandPartFactory; } else { mEncodingPartFactory = new cCommandPartFactory(false, pEncoding); } }