コード例 #1
0
 private static void HandleResponders(IEnumerable <Responder> responders, AsyncToken token)
 {
     foreach (Responder responder in responders)
     {
         token.AddResponder(responder);
     }
 }
コード例 #2
0
        /// <summary>
        /// Sends a request
        /// This method is always called when calling any of Send overrides
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public AsyncToken Send(WebRequest request)
        {
            if (string.IsNullOrEmpty(request.Url))
            {
                throw new Exception("URL not set");
            }

            if (CacheBuster)
            {
                request.CacheBuster = true;
            }

            #region Handling relative ULRs

            string url = request.Url;

            if (url.StartsWith("~"))
            {
                url = Url + request.Url.TrimStart('~');
            }

            request.Url = url;

            #endregion

#if DEBUG
            if (DebugMode || LogCalls)
            {
                Debug.Log(string.Format(@"* {0}
{1}", this, request));
            }
#endif

            // create token
            AsyncToken token = new AsyncToken {
                Request = request, Timeout = Timeout
            };

            // add it to queue
            _queued.Add(token);

            if (!SystemManager.Instance.UpdateSignal.HasSlot(UpdateSlot))
            {
#if DEBUG
                if (DebugMode)
                {
                    Debug.Log("Connecting to UpdateSignal");
                }
#endif
                SystemManager.Instance.UpdateSignal.Connect(UpdateSlot);
            }

            IsWorking = true;

            DispatchStatusEvent();

            // return it to caller
            return(token);
        }
コード例 #3
0
 /// <summary>
 /// Cancels the request
 /// </summary>
 /// <param name="token"></param>
 public void Cancel(AsyncToken token)
 {
     // todo: execute responders! (we need this to remove progress bars etc.)
     token.Dispose();
     _queued.Remove(token);
     _active.Remove(token);
     _finished.Remove(token);
     _synced.Remove(token);
     _forRemoval.Remove(token);
     DispatchStatusEvent();
 }
コード例 #4
0
        ///<summary>
        /// Sends a request
        ///</summary>
        ///<param name="responders"></param>
        ///<returns></returns>
        ///<exception cref="Exception"></exception>
        public AsyncToken Send(params Responder[] responders)
        {
            if (string.IsNullOrEmpty(Url))
            {
                throw new Exception("Url not defined");
            }

            AsyncToken token = Send(new WebRequest(Url));

            HandleResponders(responders, token);
            return(token);
        }
コード例 #5
0
ファイル: AsyncToken.cs プロジェクト: fredwen2008/eDriven
        /// <summary>
        /// Clones the token (without responders)
        /// Copies Data
        /// Sets this as original token
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            AsyncToken original = Original ?? this;

            AsyncToken token = new AsyncToken
            {
                Original  = original,
                Request   = original.Request,
                Response  = original.Response,
                StartTime = original.StartTime,
                Data      = Data
            };

            return(token);
        }
コード例 #6
0
ファイル: AsyncToken.cs プロジェクト: bwheatley/edriven
        /// <summary>
        /// Clones the token (without responders)
        /// Copies Data
        /// Sets this as original token
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            AsyncToken original = Original ?? this;

            AsyncToken token = new AsyncToken
                                   {
                                       Original = original,
                                       Request = original.Request,
                                       Response = original.Response,
                                       StartTime = original.StartTime,
                                       Data = Data
                                   };
            return token;
        }
コード例 #7
0
ファイル: HttpConnector.cs プロジェクト: BiDuc/eDriven
 private void GenerateWww(AsyncToken token)
 {
     token.Response = token.Request.CreateWww(); // the WWW request is now alive!
     token.Timeout = Timeout;
     token.StartTime = DateTime.Now;
 }
コード例 #8
0
ファイル: HttpConnector.cs プロジェクト: BiDuc/eDriven
 private static void HandleResponders(IEnumerable<Responder> responders, AsyncToken token)
 {
     foreach (Responder responder in responders)
     {
         token.AddResponder(responder);
     }
 }
コード例 #9
0
ファイル: HttpConnector.cs プロジェクト: BiDuc/eDriven
        /// <summary>
        /// Sends a request
        /// This method is always called when calling any of Send overrides
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public AsyncToken Send(WebRequest request)
        {
            if (string.IsNullOrEmpty(request.Url))
                throw new Exception("URL not set");

            if (CacheBuster)
                request.CacheBuster = true;

            #region Handling relative ULRs

            string url = request.Url;

            if (url.StartsWith("~"))
            {
                url = Url + request.Url.TrimStart('~');
            }

            request.Url = url;

            #endregion

            #if DEBUG
            if (DebugMode || LogCalls)
                Debug.Log(string.Format(@"* {0}
            {1}", this, request));
            #endif

            // create token
            AsyncToken token = new AsyncToken {Request = request, Timeout = Timeout};

            // add it to queue
            _queued.Add(token);

            if (!SystemManager.Instance.UpdateSignal.HasSlot(UpdateSlot))
            {
            #if DEBUG
                if (DebugMode)
                {
                    Debug.Log("Connecting to UpdateSignal");
                }
            #endif
                SystemManager.Instance.UpdateSignal.Connect(UpdateSlot);
            }

            IsWorking = true;

            DispatchStatusEvent();

            // return it to caller
            return token;
        }
コード例 #10
0
ファイル: HttpConnector.cs プロジェクト: BiDuc/eDriven
 /// <summary>
 /// Cancels the request
 /// </summary>
 /// <param name="token"></param>
 public void Cancel(AsyncToken token)
 {
     // todo: execute responders! (we need this to remove progress bars etc.)
     token.Dispose();
     _queued.Remove(token);
     _active.Remove(token);
     _finished.Remove(token);
     _synced.Remove(token);
     _forRemoval.Remove(token);
     DispatchStatusEvent();
 }
コード例 #11
0
ファイル: HttpConnector.cs プロジェクト: BiDuc/eDriven
        private void QueuedToActive(AsyncToken token)
        {
            #if DEBUG
            if (DebugMode)
                Debug.Log(GetInfo());
            #endif

            // create WWW
            GenerateWww(token);

            _active.Add(token);

            // in Sync and SyncAll modes add it to synced list also
            if (ProcessingMode.Async != ProcessingMode)
                _synced.Add(token);

            // remove from queued
            _queued.Remove(token);

            #if DEBUG
            if (DebugMode || LogCalls)
            {
                Debug.Log(string.Format(@"{0} queued --1--> {1} active", _queued.Count, _active.Count));
            }
            #endif
            DispatchStatusEvent();
        }
コード例 #12
0
ファイル: HttpConnector.cs プロジェクト: BiDuc/eDriven
        private void ProcessResponders(AsyncToken token)
        {
            if (token.IsTimeout){
                DispatchEvent(new Event(TIMEOUT));
                token.Response.Dispose();
            }

            /* Timeout */
            if (token.IsTimeout /*|| !token.Response.isDone*/) // response never returned, timeout expired
            {
            #if DEBUG
                if (DebugMode)
                {
                    Debug.Log("1 request timeout");
                }
            #endif
                token.Responders.ForEach(delegate(Responder responder)
                                             {
                                                 // If no fault handler defined for the responder,
                                                 // and one is defined globally
                                                 // reference that handler
                                                 if (null == responder.FaultHandler)
                                                 {
                                                     responder.FaultHandler = FaultHandler ?? DefaultFaultHandler;
                                                 }

                                                 responder.Fault("Request timeout");
                                             });
            }

            /* Error */
            else if (!string.IsNullOrEmpty(token.Response.error)) // NOTE: Response could have isDone == true and still have and error!
            {
            #if DEBUG
                if (DebugMode)
                {
                    Debug.Log("Error: " + token.Response.error);
                }
            #endif
                token.Responders.ForEach(delegate(Responder responder)
                                             {
                                                 // If no fault handler defined for the responder,
                                                 // and one is defined globally
                                                 // reference that handler
                                                 if (null == responder.FaultHandler)
                                                 {
                                                     responder.FaultHandler = FaultHandler ?? DefaultFaultHandler;
                                                 }

                                                 responder.Fault(token.Response.error);
                                             });
            }

            /* OK */
            else
            {
                //token.Result = token.Response; // add result to token (for alternative processing)

                //Debug.Log(1);

                token.Responders.ForEach(delegate(Responder responder)
                                             {
                                                 try {
                                                     //if (DebugMode)
                                                     //    Debug.Log("ProcessResponders: token.Response.isDone: " + token.Response.isDone);

                                                     //Debug.Log(2);

                                                     switch (ResponseMode)
                                                     {
                                                         case ResponseMode.Token:
                                                             responder.Result(token);
                                                             break;
                                                         case ResponseMode.WWW:
                                                             responder.Result(token.Response);
                                                             break;
                                                     }

                                                     //responder.Result((ResponseMode == ResponseMode.Token) ? token : token.Response);
                                                 }
                                                 catch (Exception ex)
                                                 {
                                                     Debug.Log("Error executing result responder: " + ex); // NOTE: Silent fail
                                                 }
                                             });
            }

            // clear responders
            token.ClearResponders();
        }
コード例 #13
0
        //public void DisposeAllResponses()
        //{
        //    _active.ForEach(delegate(AsyncToken token)
        //                        {
        //                            DisposeResources(token.Response);
        //                        });
        //}

        #endregion

        #region Helper

        private void GenerateWww(AsyncToken token)
        {
            token.Response  = token.Request.CreateWww(); // the WWW request is now alive!
            token.Timeout   = Timeout;
            token.StartTime = DateTime.Now;
        }
コード例 #14
0
//private void HandleTimeouts()
        //{
        //    List<AsyncToken> timeoutRequests = _finished.FindAll(delegate(AsyncToken token) { return !token.Response.isDone; });

        //    timeoutRequests.ForEach(delegate(AsyncToken token)
        //                                {
        //                                    token.Responders.ForEach(delegate(Responder responder)
        //                                                                 {
        //                                                                     responder.Fault("Request timeout");
        //                                                                 });
        //                                });

        //    if (timeoutRequests.Count > 0)
        //        DispatchEvent(new Event(TIMEOUT));

        //    // remove responses that have time out
        //    _finished.RemoveAll(delegate(AsyncToken token)
        //                            {
        //                                return !token.Response.isDone;
        //                            });
        //}

        #endregion

        private void ProcessResponders(AsyncToken token)
        {
            if (token.IsTimeout)
            {
                DispatchEvent(new Event(TIMEOUT));
                token.Response.Dispose();
            }

            /* Timeout */
            if (token.IsTimeout /*|| !token.Response.isDone*/) // response never returned, timeout expired
            {
#if DEBUG
                if (DebugMode)
                {
                    Debug.Log("1 request timeout");
                }
#endif
                token.Responders.ForEach(delegate(Responder responder)
                {
                    // If no fault handler defined for the responder,
                    // and one is defined globally
                    // reference that handler
                    if (null == responder.FaultHandler)
                    {
                        responder.FaultHandler = FaultHandler ?? DefaultFaultHandler;
                    }

                    responder.Fault("Request timeout");
                });
            }

            /* Error */
            else if (!string.IsNullOrEmpty(token.Response.error)) // NOTE: Response could have isDone == true and still have and error!
            {
#if DEBUG
                if (DebugMode)
                {
                    Debug.Log("Error: " + token.Response.error);
                }
#endif
                token.Responders.ForEach(delegate(Responder responder)
                {
                    // If no fault handler defined for the responder,
                    // and one is defined globally
                    // reference that handler
                    if (null == responder.FaultHandler)
                    {
                        responder.FaultHandler = FaultHandler ?? DefaultFaultHandler;
                    }

                    responder.Fault(token.Response.error);
                });
            }

            /* OK */
            else
            {
                //token.Result = token.Response; // add result to token (for alternative processing)

                //Debug.Log(1);

                token.Responders.ForEach(delegate(Responder responder)
                {
                    try {
                        //if (DebugMode)
                        //    Debug.Log("ProcessResponders: token.Response.isDone: " + token.Response.isDone);

                        //Debug.Log(2);

                        switch (ResponseMode)
                        {
                        case ResponseMode.Token:
                            responder.Result(token);
                            break;

                        case ResponseMode.WWW:
                            responder.Result(token.Response);
                            break;
                        }

                        //responder.Result((ResponseMode == ResponseMode.Token) ? token : token.Response);
                    }
                    catch (Exception ex)
                    {
                        Debug.Log("Error executing result responder: " + ex);                              // NOTE: Silent fail
                    }
                });
            }

            // clear responders
            token.ClearResponders();
        }