public void TrySetProgress_ReturnsCorrentValue(AsyncOperationStatus status, bool expectedResult)
        {
            // Arrange
            var op = new AsyncCompletionSource(status);

            // Act
            var result = op.TrySetProgress(1);

            // Assert
            Assert.Equal(expectedResult, result);
        }
Example #2
0
        public void Progress_ReturnsCorrentValue(AsyncOperationStatus status, float expectedValue)
        {
            // Arrange
            var progress = 0.3f;
            var op       = new AsyncCompletionSource(status);

            // Act
            op.TrySetProgress(progress);

            // Assert
            Assert.Equal(expectedValue, op.Progress);
        }
        public void TrySetCompleted_SetsStatusToRanToCompletion(AsyncOperationStatus status)
        {
            // Arrange
            var op = new AsyncCompletionSource(status);

            // Act
            var result = op.TrySetCompleted();

            // Assert
            Assert.True(op.IsCompletedSuccessfully);
            Assert.True(result);
        }
 /// <summary>
 /// Callback for the authentication status of the Social API.
 /// </summary>
 /// <param name='success'>
 /// Success.
 /// </param>
 void AuthenticateCallback(bool success)
 {
     // Change the state of this menu to track the Social API status.
     if (success)
     {
         socialInitialization = AsyncOperationStatus.Success;
     }
     else
     {
         socialInitialization = AsyncOperationStatus.Failed;
     }
 }
        public void TrySetCanceled_SetsStatusToCanceled(AsyncOperationStatus status)
        {
            // Arrange
            var op = new AsyncCompletionSource(status);

            // Act
            var result = op.TrySetCanceled();

            // Assert
            Assert.True(op.IsCanceled);
            Assert.True(result);
        }
        public void TrySetResult_SetsStatusToRanToCompletion(AsyncOperationStatus status)
        {
            // Arrange
            var resultValue = new object();
            var op          = new AsyncCompletionSource <object>(status);

            // Act
            var result = op.TrySetResult(resultValue);

            // Assert
            Assert.True(op.IsCompletedSuccessfully);
            Assert.Equal(resultValue, op.Result);
            Assert.True(result);
        }
        public void TrySetException_SetsStatusToCanceled(AsyncOperationStatus status)
        {
            // Arrange
            var e  = new OperationCanceledException();
            var op = new AsyncCompletionSource(status);

            // Act
            var result = op.TrySetException(e);

            // Assert
            Assert.True(op.IsCanceled);
            Assert.True(result);
            Assert.Equal(e, op.Exception);
        }
Example #8
0
        private void LdrOnCompleted(IAddressableLoader loader, AsyncOperationStatus status)
        {
            loader.CompletedEvent -= LdrOnCompleted;

            var atlases = loader.Assets.Where(o => o is SpriteAtlas).Cast <SpriteAtlas>().ToArray();
            var sounds  = loader.Assets.Where(o => o is AudioSettings).Cast <AudioSettings>().ToArray();
            var locales = loader.Assets.Where(IsLocale).Cast <TextAsset>().ToArray();
            var windows = loader.Assets.Where(o => (o as GameObject)?.GetComponent <Window>())
                          .Cast <GameObject>().Select(o => o.GetComponent <Window>()).ToArray();

            if (atlases.Length > 0)
            {
                foreach (var pair in _delayedAtlasRequests.ToList())
                {
                    if (atlases.Any(atlas =>
                    {
                        if (atlas.name != pair.Key)
                        {
                            return(false);
                        }
                        pair.Value?.Invoke(atlas);
                        _delayedAtlasRequests.Remove(pair.Key);
                        return(true);
                    }))
                    {
                        Debug.LogFormat("Request for atlas {0} was found and satisfied.", pair.Key);
                        break;
                    }
                }
            }

            foreach (var audioSettings in sounds)
            {
                foreach (var pair in audioSettings.Clips)
                {
                    AudioManager.RegisterClips(pair.Value, pair.Key);
                }
            }

            foreach (var locale in locales)
            {
                LocaleService.AddLocaleCsv(locale.text);
            }

            foreach (var window in windows)
            {
                WindowManager.RegisterWindow(window, true);
            }
        }
Example #9
0
        public void Constructor_SetsCorrectStatusAndOptions(AsyncOperationStatus status, AsyncCreationOptions options)
        {
            // Arrange/Act
            var op  = new AsyncResult(status, options);
            var op2 = new AsyncResult(status, options, null);
            var op3 = new AsyncResult(status, options, null, null);

            // Assert
            Assert.Equal(status, op.Status);
            Assert.Equal(options, op.CreationOptions);
            Assert.Equal(status, op2.Status);
            Assert.Equal(options, op2.CreationOptions);
            Assert.Equal(status, op3.Status);
            Assert.Equal(options, op3.CreationOptions);
        }
Example #10
0
        public void Constructor_SetsCorrectCompletionStatus(AsyncOperationStatus status)
        {
            // Arrange/Act
            var op  = new AsyncResult(status);
            var op2 = new AsyncResult(status, null);
            var op3 = new AsyncResult(status, null, null);

            // Assert
            AssertCompleted(op, status);
            Assert.True(op.CompletedSynchronously);
            AssertCompleted(op2, status);
            Assert.True(op2.CompletedSynchronously);
            AssertCompleted(op3, status);
            Assert.True(op3.CompletedSynchronously);
        }
Example #11
0
        AsyncOperationStatus ProcessClose(AsyncProtocolRequest asyncRequest, AsyncOperationStatus status)
        {
            Debug("ProcessClose: {0}", status);

            lock (ioLock) {
                if (xobileTlsContext == null)
                {
                    return(AsyncOperationStatus.Complete);
                }

                xobileTlsContext.Close();
                xobileTlsContext = null;
                return(AsyncOperationStatus.Continue);
            }
        }
Example #12
0
        private void NotifyCompleted(AsyncOperationStatus status)
        {
            try
            {
                OnProgressChanged();
                OnStatusChanged(status);
                OnCompleted();

                InvokeCallbacks();
            }
            finally
            {
                _waitHandle?.Set();
            }
        }
Example #13
0
        private void AssertCompleted(IAsyncOperation op, AsyncOperationStatus status)
        {
            if (status == AsyncOperationStatus.RanToCompletion)
            {
                Assert.Null(op.Exception);
            }
            else
            {
                Assert.NotNull(op.Exception);
            }

            Assert.True(op.IsCompleted);
            Assert.Equal(status == AsyncOperationStatus.RanToCompletion, op.IsCompletedSuccessfully);
            Assert.Equal(status == AsyncOperationStatus.Faulted, op.IsFaulted);
            Assert.Equal(status == AsyncOperationStatus.Canceled, op.IsCanceled);
            Assert.Equal(status, op.Status);
        }
Example #14
0
        internal static string ToSerializedValue(this AsyncOperationStatus value)
        {
            switch (value)
            {
            case AsyncOperationStatus.Started:
                return("Started");

            case AsyncOperationStatus.InProgress:
                return("InProgress");

            case AsyncOperationStatus.Succeeded:
                return("Succeeded");

            case AsyncOperationStatus.Failed:
                return("Failed");
            }
            return(null);
        }
Example #15
0
        internal void DecrementReferenceCount()
        {
            if (m_referenceCount <= 0)
            {
                throw new Exception(string.Format("Cannot decrement reference count for operation {0} because it is already 0", this));
            }

            m_referenceCount--;

            if (m_RM != null && m_RM.postProfilerEvents)
            {
                m_RM.PostDiagnosticEvent(new ResourceManager.DiagnosticEventContext(new AsyncOperationHandle(this), ResourceManager.DiagnosticEventType.AsyncOperationReferenceCount, m_referenceCount));
            }

            if (m_referenceCount == 0)
            {
                if (m_RM != null && m_RM.postProfilerEvents)
                {
                    m_RM.PostDiagnosticEvent(new ResourceManager.DiagnosticEventContext(new AsyncOperationHandle(this), ResourceManager.DiagnosticEventType.AsyncOperationDestroy));
                }

                if (m_DestroyedAction != null)
                {
                    m_DestroyedAction.Invoke(new AsyncOperationHandle <TObject>(this));
                    m_DestroyedAction.Clear();
                }

                Destroy();
                Result                         = default(TObject);
                m_referenceCount               = 1;
                m_Status                       = AsyncOperationStatus.None;
                m_taskCompletionSource         = null;
                m_taskCompletionSourceTypeless = null;
                m_Error                        = null;
                m_Version++;
                m_RM = null;

                if (m_OnDestroyAction != null)
                {
                    m_OnDestroyAction(this);
                    m_OnDestroyAction = null;
                }
            }
        }
        /// <summary>
        /// Call the event handlers for this operation.
        /// </summary>
        public void InvokeCompletionEvent()
        {
            Validate();
            m_InsideCompletionEvent = true;

            if (m_CompletedAction != null)
            {
                var tmpEvent = m_CompletedAction;
                m_CompletedAction = null;
                try
                {
                    tmpEvent(this);
                }
                catch (Exception e)
                {
                    m_Status           = AsyncOperationStatus.Failed;
                    OperationException = e;
                }
            }

            if (m_CompletedActionT != null)
            {
                for (int i = 0; i < m_CompletedActionT.Count; i++)
                {
                    try
                    {
                        m_CompletedActionT[i](this);
                    }
                    catch (Exception e)
                    {
                        m_Status           = AsyncOperationStatus.Failed;
                        OperationException = e;
                    }
                }
                m_CompletedActionT.Clear();
            }
            m_InsideCompletionEvent = false;
            if (m_ReleaseToCacheOnCompletion)
            {
                AsyncOperationCache.Instance.Release(this);
            }
        }
        public static string GetDetailPageId(object type, object status)
        {
            AsyncOperationType   asyncOperationType   = (AsyncOperationType)type;
            AsyncOperationStatus asyncOperationStatus = (AsyncOperationStatus)status;
            string             result = null;
            AsyncOperationType asyncOperationType2 = asyncOperationType;

            if (asyncOperationType2 != AsyncOperationType.Migration)
            {
                if (asyncOperationType2 == AsyncOperationType.CertExpiry)
                {
                    result = "Certificates";
                }
            }
            else
            {
                result = "MigrationBatches";
            }
            return(result);
        }
        public static string GetStartedByText(object type, object status, object startedBy, object startTime)
        {
            AsyncOperationType   asyncOperationType   = (AsyncOperationType)type;
            AsyncOperationStatus asyncOperationStatus = (AsyncOperationStatus)status;
            string             result = Strings.ProcessStartedBy((startedBy as string) ?? string.Empty, (string)startTime);
            AsyncOperationType asyncOperationType2 = asyncOperationType;

            if (asyncOperationType2 != AsyncOperationType.Migration)
            {
                if (asyncOperationType2 == AsyncOperationType.CertExpiry)
                {
                    result = string.Empty;
                }
            }
            else if (asyncOperationStatus == AsyncOperationStatus.Created || asyncOperationStatus == AsyncOperationStatus.Removing)
            {
                result = string.Empty;
            }
            return(result);
        }
        /// <summary>
        /// Complete the operation and invoke events.
        /// </summary>
        /// <param name="result">The result object for the operation.</param>
        /// <param name="success">True if successful.</param>
        /// <param name="errorMsg">The error message if the operation has failed.</param>
        public void Complete(TObject result, bool success, string errorMsg)
        {
            IUpdateReceiver upOp = this as IUpdateReceiver;

            if (m_UpdateCallbacks != null && upOp != null)
            {
                m_UpdateCallbacks.Remove(m_UpdateCallback);
            }

            m_Result = result;
            m_Status = success ? AsyncOperationStatus.Succeeded : AsyncOperationStatus.Failed;

            m_RM.PostDiagnosticEvent(new ResourceManager.DiagnosticEventContext(new AsyncOperationHandle(this), ResourceManager.DiagnosticEventType.AsyncOperationPercentComplete, 1));
            m_RM.PostDiagnosticEvent(new ResourceManager.DiagnosticEventContext(new AsyncOperationHandle(this), ResourceManager.DiagnosticEventType.AsyncOperationComplete));

            if (m_Status == AsyncOperationStatus.Failed)
            {
                if (string.IsNullOrEmpty(errorMsg))
                {
                    errorMsg = "Unknown error in AsyncOperation";
                }

                m_RM.PostDiagnosticEvent(new ResourceManager.DiagnosticEventContext(new AsyncOperationHandle(this), ResourceManager.DiagnosticEventType.AsyncOperationFail, 0, errorMsg));


                OperationException = new Exception(errorMsg);

                ICachable cachedOperation = this as ICachable;
                if (cachedOperation != null)
                {
                    m_RM.RemoveOperationFromCache(cachedOperation.Hash);
                }

                RegisterForDeferredCallbackEvent(false);
            }
            else
            {
                InvokeCompletionEvent();
                DecrementReferenceCount();
            }
        }
Example #20
0
        AsyncOperationStatus ProcessHandshake(AsyncProtocolRequest asyncRequest, AsyncOperationStatus status)
        {
            Debug("ProcessHandshake: {0}", status);

            /*
             * The first time we're called (AsyncOperationStatus.Initialize), we need to setup the SslContext and
             * start the handshake.
             */
            if (status == AsyncOperationStatus.Initialize)
            {
                xobileTlsContext.StartHandshake();
                return(AsyncOperationStatus.Continue);
            }
            else if (status == AsyncOperationStatus.ReadDone)
            {
                // remote prematurely closed connection.
                throw new IOException("Remote prematurely closed connection.");
            }
            else if (status != AsyncOperationStatus.Continue)
            {
                throw new InvalidOperationException();
            }

            /*
             * SSLHandshake() will return repeatedly with 'SslStatus.WouldBlock', we then need
             * to take care of I/O and call it again.
             */
            if (!xobileTlsContext.ProcessHandshake())
            {
                /*
                 * Flush the internal write buffer.
                 */
                InnerFlush();
                return(AsyncOperationStatus.Continue);
            }

            xobileTlsContext.FinishHandshake();
            return(AsyncOperationStatus.Complete);
        }
Example #21
0
        AsyncOperationStatus ProcessWrite(AsyncProtocolRequest asyncRequest, AsyncOperationStatus status)
        {
            Debug("ProcessWrite - write user: {0} {1}", status, asyncRequest.UserBuffer);

            if (asyncRequest.UserBuffer.Size == 0)
            {
                asyncRequest.UserResult = asyncRequest.CurrentSize;
                return(AsyncOperationStatus.Complete);
            }

            int  ret;
            bool wantMore;

            lock (ioLock) {
                ret = Context.Write(asyncRequest.UserBuffer.Buffer, asyncRequest.UserBuffer.Offset, asyncRequest.UserBuffer.Size, out wantMore);
            }
            Debug("ProcessWrite - write user done: {0} - {1} {2}", asyncRequest.UserBuffer, ret, wantMore);

            if (ret < 0)
            {
                asyncRequest.UserResult = -1;
                return(AsyncOperationStatus.Complete);
            }

            asyncRequest.CurrentSize       += ret;
            asyncRequest.UserBuffer.Offset += ret;
            asyncRequest.UserBuffer.Size   -= ret;

            if (wantMore || writeBuffer.Size > 0)
            {
                return(AsyncOperationStatus.WantWrite);
            }

            asyncRequest.ResetWrite();
            asyncRequest.UserResult = asyncRequest.CurrentSize;
            return(AsyncOperationStatus.Complete);
        }
        private static string GetItemTextForMigration(AsyncOperationType type, AsyncOperationStatus status, object displayName, object originalExtAttributes)
        {
            string empty  = string.Empty;
            string empty2 = string.Empty;
            string empty3 = string.Empty;

            if (originalExtAttributes != DBNull.Value)
            {
                KeyValuePair <string, LocalizedString>[] source = (KeyValuePair <string, LocalizedString>[])originalExtAttributes;
                Dictionary <string, string> dictionary          = source.ToDictionary((KeyValuePair <string, LocalizedString> item) => item.Key.ToString(), (KeyValuePair <string, LocalizedString> item) => item.Value.ToString());
                dictionary.TryGetValue(AsyncNotificationAdapter.TotalSyncedCount, out empty);
                dictionary.TryGetValue(AsyncNotificationAdapter.TotalItemCount, out empty2);
                dictionary.TryGetValue(AsyncNotificationAdapter.TotalFailedCount, out empty3);
            }
            int totalSyncedCount;

            int.TryParse(empty, out totalSyncedCount);
            int totalItemCount;

            int.TryParse(empty2, out totalItemCount);
            int totalFailedCount;

            int.TryParse(empty3, out totalFailedCount);
            return(NotificationService.GetItemTextImp(type, status, displayName, DBNull.Value, new Func <string, string, LocalizedString>(Strings.AsyncProcessQueued), new Func <string, string, string, LocalizedString>(Strings.AsyncProcessInProgressWithPercentage), delegate(string operation, string name)
            {
                if (totalFailedCount > 0)
                {
                    return Strings.MigrationInProgressWithFailedCount(operation, name, totalSyncedCount, totalItemCount, totalFailedCount);
                }
                if (totalItemCount > 0)
                {
                    return Strings.MigrationInProgressWithSyncedCount(operation, name, totalSyncedCount, totalItemCount);
                }
                return Strings.AsyncProcessInProgress(operation, name);
            }, new Func <string, string, LocalizedString>(Strings.AsyncProcessSuspended), new Func <string, string, LocalizedString>(Strings.AsyncProcessCompleted), new Func <string, string, LocalizedString>(Strings.AsyncProcessFailed), new Func <string, string, LocalizedString>(Strings.AsyncProcessWaitingFinalization), new Func <string, string, LocalizedString>(Strings.AsyncProcessCreated), new Func <string, string, LocalizedString>(Strings.AsyncProcessCompleting), new Func <string, string, LocalizedString>(Strings.AsyncProcessRemoving)));
        }
Example #23
0
 protected override AsyncOperationStatus Run(AsyncOperationStatus status)
 {
     return(Parent.ProcessHandshake(status, true));
 }
Example #24
0
 protected override AsyncOperationStatus Run(AsyncOperationStatus status)
 {
     return(Parent.ProcessShutdown(status));
 }
Example #25
0
 /*
  * This will operate on the internal buffers and never block.
  */
 protected abstract AsyncOperationStatus Run(AsyncOperationStatus status);
 public static void CreateNotification(OrganizationId organizationId, string id, AsyncOperationType type, AsyncOperationStatus status, LocalizedString displayName, ADRecipientOrAddress owner, KeyValuePair <string, LocalizedString>[] extendedAttributes, bool throwOnError)
 {
     if (AsyncOperationNotificationDataProvider.IsAsyncNotificationDisabled())
     {
         ExTraceGlobals.StorageTracer.TraceWarning(0L, "DisableAsyncNotification is set in registry, no notification will be created.");
         return;
     }
     if (string.IsNullOrEmpty(id))
     {
         throw new ArgumentNullException("id", "id is mandatory.");
     }
     try
     {
         AsyncOperationNotificationDataProvider asyncOperationNotificationDataProvider = new AsyncOperationNotificationDataProvider(organizationId);
         if (asyncOperationNotificationDataProvider.FindItemByAlternativeId(id) != null)
         {
             throw new StoragePermanentException(ServerStrings.ErrorNotificationAlreadyExists);
         }
         asyncOperationNotificationDataProvider.Save(new AsyncOperationNotification
         {
             AlternativeId      = id,
             ExtendedAttributes = extendedAttributes,
             StartedByValue     = owner,
             DisplayName        = displayName,
             Type   = type,
             Status = status
         });
     }
     catch (Exception ex)
     {
         string printableId = AsyncOperationNotificationDataProvider.GetPrintableId(organizationId, id);
         ExTraceGlobals.StorageTracer.TraceError <string, string>(0L, "AsyncOperationNotificationDataProvider::CreateNotification failed: {0}, message: {1}", printableId, ex.Message);
         StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_ErrorCreateNotification, printableId, new object[]
         {
             printableId,
             ex
         });
         if (throwOnError)
         {
             throw;
         }
     }
 }
Example #27
0
 public OperationResult(AsyncOperationStatus status, T value)
 {
     this.Succeeded = status == AsyncOperationStatus.Succeeded;
     this.Value     = value;
 }
Example #28
0
 /// <summary>
 /// Invoked when the operation completes.
 /// </summary>
 internal virtual void OnCompleted()
 {
     this.Status = AsyncOperationStatus.Completed;
 }
Example #29
0
		AsyncOperationStatus ProcessHandshake (AsyncProtocolRequest asyncRequest, AsyncOperationStatus status)
		{
			Debug ("ProcessHandshake: {0}", status);

			/*
			 * The first time we're called (AsyncOperationStatus.Initialize), we need to setup the SslContext and
			 * start the handshake.
			*/
			if (status == AsyncOperationStatus.Initialize) {
				xobileTlsContext.StartHandshake ();
				return AsyncOperationStatus.Continue;
			} else if (status == AsyncOperationStatus.ReadDone) {
				// remote prematurely closed connection.
				throw new IOException ("Remote prematurely closed connection.");
			} else if (status != AsyncOperationStatus.Continue) {
				throw new InvalidOperationException ();
			}

			/*
			 * SSLHandshake() will return repeatedly with 'SslStatus.WouldBlock', we then need
			 * to take care of I/O and call it again.
			*/
			if (!xobileTlsContext.ProcessHandshake ()) {
				/*
				 * Flush the internal write buffer.
				 */
				InnerFlush ();
				return AsyncOperationStatus.Continue;
			}

			xobileTlsContext.FinishHandshake ();
			return AsyncOperationStatus.Complete;
		}
Example #30
0
		AsyncOperationStatus ProcessRead (AsyncProtocolRequest asyncRequest, AsyncOperationStatus status)
		{
			Debug ("ProcessRead - read user: {0} {1}", status, asyncRequest.UserBuffer);

			int ret;
			bool wantMore;
			lock (ioLock) {
				ret = Context.Read (asyncRequest.UserBuffer.Buffer, asyncRequest.UserBuffer.Offset, asyncRequest.UserBuffer.Size, out wantMore);
			}
			Debug ("ProcessRead - read user done: {0} - {1} {2}", asyncRequest.UserBuffer, ret, wantMore);

			if (ret < 0) {
				asyncRequest.UserResult = -1;
				return AsyncOperationStatus.Complete;
			}

			asyncRequest.CurrentSize += ret;
			asyncRequest.UserBuffer.Offset += ret;
			asyncRequest.UserBuffer.Size -= ret;

			Debug ("Process Read - read user done #1: {0} - {1} {2}", asyncRequest.UserBuffer, asyncRequest.CurrentSize, wantMore);

			if (wantMore && asyncRequest.CurrentSize == 0)
				return AsyncOperationStatus.WantRead;

			asyncRequest.ResetRead ();
			asyncRequest.UserResult = asyncRequest.CurrentSize;
			return AsyncOperationStatus.Complete;
		}
Example #31
0
		AsyncOperationStatus ProcessWrite (AsyncProtocolRequest asyncRequest, AsyncOperationStatus status)
		{
			Debug ("ProcessWrite - write user: {0} {1}", status, asyncRequest.UserBuffer);

			if (asyncRequest.UserBuffer.Size == 0) {
				asyncRequest.UserResult = asyncRequest.CurrentSize;
				return AsyncOperationStatus.Complete;
			}

			int ret;
			bool wantMore;
			lock (ioLock) {
				ret = Context.Write (asyncRequest.UserBuffer.Buffer, asyncRequest.UserBuffer.Offset, asyncRequest.UserBuffer.Size, out wantMore);
			}
			Debug ("ProcessWrite - write user done: {0} - {1} {2}", asyncRequest.UserBuffer, ret, wantMore);

			if (ret < 0) {
				asyncRequest.UserResult = -1;
				return AsyncOperationStatus.Complete;
			}

			asyncRequest.CurrentSize += ret;
			asyncRequest.UserBuffer.Offset += ret;
			asyncRequest.UserBuffer.Size -= ret;

			if (wantMore || writeBuffer.Size > 0)
				return AsyncOperationStatus.WantWrite;

			asyncRequest.ResetWrite ();
			asyncRequest.UserResult = asyncRequest.CurrentSize;
			return AsyncOperationStatus.Complete;
		}
Example #32
0
 /// <summary>
 /// Called when the operation state has changed. Default implementation does nothing.
 /// </summary>
 /// <param name="status">The new status value.</param>
 /// <seealso cref="Status"/>
 /// <seealso cref="TrySetScheduled"/>
 /// <seealso cref="TrySetRunning"/>
 /// <seealso cref="TrySetCanceled(bool)"/>
 /// <seealso cref="TrySetCompleted(bool)"/>
 /// <seealso cref="TrySetException(System.Exception, bool)"/>
 /// <seealso cref="TrySetExceptions(IEnumerable{System.Exception}, bool)"/>
 protected virtual void OnStatusChanged(AsyncOperationStatus status)
 {
 }
Example #33
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AsyncResult"/> class with the specified <see cref="Status"/> and <see cref="CreationOptions"/>.
 /// </summary>
 /// <param name="status">Initial value of the <see cref="Status"/> property.</param>
 /// <param name="asyncCallback">User-defined completion callback.</param>
 /// <param name="asyncState">User-defined data returned by <see cref="AsyncState"/>.</param>
 /// <param name="options">The <see cref="AsyncCreationOptions"/> used to customize the operation's behavior.</param>
 public AsyncResult(AsyncOperationStatus status, AsyncCallback asyncCallback, object asyncState, AsyncCreationOptions options)
     : this((int)status | ((int)options << _optionsOffset))
 {
     _asyncState = asyncState;
     _callback   = asyncCallback;
 }
Example #34
0
		AsyncOperationStatus ProcessClose (AsyncProtocolRequest asyncRequest, AsyncOperationStatus status)
		{
			Debug ("ProcessClose: {0}", status);

			lock (ioLock) {
				if (xobileTlsContext == null)
					return AsyncOperationStatus.Complete;

				xobileTlsContext.Close ();
				xobileTlsContext = null;
				return AsyncOperationStatus.Continue;
			}
		}
Example #35
0
		AsyncOperationStatus ProcessFlush (AsyncProtocolRequest asyncRequest, AsyncOperationStatus status)
		{
			Debug ("ProcessFlush: {0}", status);
			return AsyncOperationStatus.Complete;
		}
Example #36
0
        AsyncOperationStatus ProcessOperation(AsyncOperationStatus status)
        {
            if (status == AsyncOperationStatus.WantRead) {
                if (RequestedSize < 0)
                    throw new InvalidOperationException ();
                else if (RequestedSize == 0)
                    return AsyncOperationStatus.Continue;

                Parent.Debug ("ProcessOperation - read inner: {0}", RequestedSize);
                var ret = Parent.InnerRead (RequestedSize);
                Parent.Debug ("ProcessOperation - read inner done: {0} - {1}", RequestedSize, ret);

                if (ret < 0)
                    return AsyncOperationStatus.ReadDone;

                RequestedSize -= ret;

                if (ret == 0 || RequestedSize == 0)
                    return AsyncOperationStatus.Continue;
                else
                    return AsyncOperationStatus.WantRead;
            } else if (status == AsyncOperationStatus.WantWrite) {
                Parent.InnerWrite ();
                return AsyncOperationStatus.Continue;
            } else if (status == AsyncOperationStatus.Initialize || status == AsyncOperationStatus.Continue) {
                Parent.Debug ("ProcessOperation - continue");
                status = Operation (this, status);
                Parent.Debug ("ProcessOperation - continue done: {0}", status);
                return status;
            } else if (status == AsyncOperationStatus.ReadDone) {
                Parent.Debug ("ProcessOperation - read done");
                status = Operation (this, status);
                Parent.Debug ("ProcessOperation - read done: {0}", status);
                return status;
            }

            throw new InvalidOperationException ();
        }