Esempio n. 1
0
        internal virtual WebResponse GetResponse(WebRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            HttpWebRequest request2 = request as HttpWebRequest;
            TimeoutState   state    = null;

            if ((request2 != null) && (request2.Timeout > 0))
            {
                state = new TimeoutState(request2);
            }
            this._webRequest = request;
            WebRequestState state2 = new WebRequestState(request);
            IAsyncResult    result = request.BeginGetResponse(new AsyncCallback(WebRequestPSCmdlet.ResponseCallback), state2);

            if (state != null)
            {
                ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(WebRequestPSCmdlet.TimeoutCallback), state, state.httpRequest.Timeout, true);
            }
            state2.waithandle.WaitOne(-1, false);
            this._webRequest = null;
            if (state2.webException == null)
            {
                return(state2.response);
            }
            if (((state != null) && state.abort) && state2.webException.Status.Equals(WebExceptionStatus.RequestCanceled))
            {
                throw new WebException(WebCmdletStrings.RequestTimeout, WebExceptionStatus.Timeout);
            }
            throw state2.webException;
        }
Esempio n. 2
0
                public static void Register(WaitHandle handle, Action <HttpTransportAsyncResult, bool> callback, HttpTransportAsyncResult value, TimeSpan timeout)
                {
                    value.TimeoutStarted = DateTime.UtcNow.TimeOfDay;
                    var x = new TimeoutState(handle, callback, value);
                    var h = ThreadPool.RegisterWaitForSingleObject(handle, TimeoutState.StaticWaitOrTimerCallback, x, timeout, true);

                    x.Registered = h;
                }
Esempio n. 3
0
        internal virtual WebResponse GetResponse(WebRequest request)
        {
            if (null == request)
            {
                throw new ArgumentNullException("request");
            }

            // Construct TimeoutState
            HttpWebRequest httpRequest  = request as HttpWebRequest;
            TimeoutState   timeoutState = null;

            if (httpRequest != null && httpRequest.Timeout > 0)
            {
                timeoutState = new TimeoutState(httpRequest);
            }

            // Construct WebRequestState
            _webRequest = request;
            WebRequestState requestState = new WebRequestState(request);

            // Call asynchronous GetResponse
            IAsyncResult asyncResult = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(ResponseCallback), requestState);

            // Set timeout if necessary
            if (timeoutState != null)
            {
                ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), timeoutState, timeoutState.httpRequest.Timeout, true);
            }

            // Wait on signal
            requestState.waithandle.WaitOne(-1, false);
            requestState.waithandle.Close();
            _webRequest = null;

            // The current thread will be waked up in three cases:
            //    1. the EngGetResponse is done. In this case, we EITHER get the response (requestState.response != null),
            //       OR a WebException is raised (requestState.webException != null).
            //    2. the ^C is typed, a PipelineStoppedException is raised. StopProcessing will abort the request. In this
            //       case, there will be a WebException with status 'RequestCancelled'.
            //    3. the time is up. The TimeoutCallback method will abort the request. In this case, there will also be a
            //       WebException with status 'RequestCancelled' and timeoutState.abort will be true.
            if (requestState.webException != null)
            {
                // Case 3. We wrap the exception to be 'Timeout' WebException
                if (timeoutState != null && timeoutState.abort && requestState.webException.Status.Equals(WebExceptionStatus.RequestCanceled))
                {
                    throw new WebException(WebCmdletStrings.RequestTimeout, WebExceptionStatus.Timeout);
                }

                // Case 1 or 2
                throw requestState.webException;
            }

            return(requestState.response);
        }
Esempio n. 4
0
 /// <summary>
 /// Call back method for timeout
 /// </summary>
 /// <param name="state"></param>
 /// <param name="timeout"></param>
 private static void TimeoutCallback(object state, bool timeout)
 {
     if (timeout)
     {
         TimeoutState timeoutState = state as TimeoutState;
         if (timeoutState != null)
         {
             timeoutState.abort = true;
             timeoutState.httpRequest.Abort();
         }
     }
 }
Esempio n. 5
0
 private static void TimeoutCallback(object state, bool timeout)
 {
     if (timeout)
     {
         TimeoutState state2 = state as TimeoutState;
         if (state2 != null)
         {
             state2.abort = true;
             state2.httpRequest.Abort();
         }
     }
 }
Esempio n. 6
0
 protected void WaitOrTimeout(object state, bool isTimeout)
 {
     try
     {
         if (isTimeout)
         {
             TimeoutState waitOrTimeoutState = state as TimeoutState;
             if (null != cancelCallback)
             {
                 cancelCallback(waitOrTimeoutState.state);
             }
             else
             {
                 waitOrTimeoutState.thread.Abort();
             }
         }
     }
     catch { }
 }
Esempio n. 7
0
        public IAsyncResult BeginInvoke(object arg, AsyncCallback asyncCallback, object state, int timeout)
        {
            wrapper = delegate(object argv)
            {
                AutoResetEvent e = new AutoResetEvent(false);
                try
                {
                    TimeoutState waitOrTimeoutState = new TimeoutState(Thread.CurrentThread, state);
                    ThreadPool.RegisterWaitForSingleObject(e, WaitOrTimeout, waitOrTimeoutState, timeout, true);
                    return(workCallback(argv));
                }
                finally
                {
                    e.Set();
                }
            };
            IAsyncResult asyncResult = wrapper.BeginInvoke(arg, asyncCallback, state);

            return(asyncResult);
        }
Esempio n. 8
0
        public override void OnInit(string gameStarter, string[] userlist, string[] param)
        {
            _super = param[0] == "superuno"; // Check if playing Uno or SuperUno

            _state = new State(
                delegate(string tx) { SendOut(tx); },
                delegate(string tg, string tx) { SendOut(tg, tx); },
                _super
            );

            _inState = InputState.Recruit;
            _timeoutState = TimeoutState.InactiveWarn1;

            _top = _state.DrawDeck.Draw();
            _state.DiscardPile.Add(_top);

            Player ps = _state.Players.Add(gameStarter);

            SetTopic(Messages.TopicRecruit);
            SendOut(String.Format(Messages.OutGameStart, ps, Name));
        }
        /// <summary>
        /// 开始调用委托
        /// </summary>
        /// <param name="arg"></param>
        /// <param name="asyncCallback"></param>
        /// <param name="state"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public IAsyncResult BeginInvoke(object arg, AsyncCallback asyncCallback, object state, int timeout)
        {
            wrapper = delegate(object argv)
            {
                AutoResetEvent e = new AutoResetEvent(false);

                try
                {
                    TimeoutState waitOrTimeoutState = new TimeoutState(Thread.CurrentThread, state);

                    ThreadPool.RegisterWaitForSingleObject(e, WaitOrTimeout, waitOrTimeoutState, timeout, true);

                    return workCallback(argv);
                }
                finally
                {
                    e.Set();
                }
            };

            IAsyncResult asyncResult = wrapper.BeginInvoke(arg, asyncCallback, state);

            return asyncResult;
        }
 public Task Timeout(TimeoutState state, IMessageHandlerContext context)
 {
     throw new NotImplementedException();
 }
Esempio n. 11
0
 internal virtual WebResponse GetResponse(WebRequest request)
 {
     if (request == null)
     {
         throw new ArgumentNullException("request");
     }
     HttpWebRequest request2 = request as HttpWebRequest;
     TimeoutState state = null;
     if ((request2 != null) && (request2.Timeout > 0))
     {
         state = new TimeoutState(request2);
     }
     this._webRequest = request;
     WebRequestState state2 = new WebRequestState(request);
     IAsyncResult result = request.BeginGetResponse(new AsyncCallback(WebRequestPSCmdlet.ResponseCallback), state2);
     if (state != null)
     {
         ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(WebRequestPSCmdlet.TimeoutCallback), state, state.httpRequest.Timeout, true);
     }
     state2.waithandle.WaitOne(-1, false);
     this._webRequest = null;
     if (state2.webException == null)
     {
         return state2.response;
     }
     if (((state != null) && state.abort) && state2.webException.Status.Equals(WebExceptionStatus.RequestCanceled))
     {
         throw new WebException(WebCmdletStrings.RequestTimeout, WebExceptionStatus.Timeout);
     }
     throw state2.webException;
 }
 public void Timeout(TimeoutState state)
 {
     Log.Warn("Sending CheckFileImportSuccessAndFailureCount.");
     SendCheckFileImportSuccessAndFailureCount(Data.ImportId);
 }
        internal virtual WebResponse GetResponse(WebRequest request)
        {
            if (null == request) { throw new ArgumentNullException("request"); }

            // Construct TimeoutState
            HttpWebRequest httpRequest = request as HttpWebRequest;
            TimeoutState timeoutState = null;
            if (httpRequest != null && httpRequest.Timeout > 0)
            {
                timeoutState = new TimeoutState(httpRequest);
            }

            // Construct WebRequestState
            _webRequest = request;
            WebRequestState requestState = new WebRequestState(request);

            // Call asynchronous GetResponse
            IAsyncResult asyncResult = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(ResponseCallback), requestState);
            // Set timeout if necessary
            if (timeoutState != null)
            {
                ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), timeoutState, timeoutState.httpRequest.Timeout, true);
            }

            // Wait on signal
            requestState.waithandle.WaitOne(-1, false);
            requestState.waithandle.Close();
            _webRequest = null;

            // The current thread will be waked up in three cases:
            //    1. the EngGetResponse is done. In this case, we EITHER get the response (requestState.response != null),
            //       OR a WebException is raised (requestState.webException != null).
            //    2. the ^C is typed, a PipelineStoppedException is raised. StopProcessing will abort the request. In this
            //       case, there will be a WebException with status 'RequestCancelled'.
            //    3. the time is up. The TimeoutCallback method will abort the request. In this case, there will also be a
            //       WebException with status 'RequestCancelled' and timeoutState.abort will be true.
            if (requestState.webException != null)
            {
                // Case 3. We wrap the exception to be 'Timeout' WebException
                if (timeoutState != null && timeoutState.abort && requestState.webException.Status.Equals(WebExceptionStatus.RequestCanceled))
                {
                    throw new WebException(WebCmdletStrings.RequestTimeout, WebExceptionStatus.Timeout);
                }

                // Case 1 or 2
                throw requestState.webException;
            }

            return (requestState.response);
        }