Пример #1
0
            /// <summary>
            /// Processes Netko's update routine.
            /// </summary>
            public void Update()
            {
                for (int i = 0; i < Items.Count; i++)
                {
                    NetkoItem item = Items[i];

                    //Termination must be checked first...
                    if (RemoveTerminated(item, ref i))
                    {
                        continue;
                    }

                    //Making a request
                    if (StartRequest(item))
                    {
                        continue;
                    }

                    //Finished request
                    if (FinishRequest(item))
                    {
                        continue;
                    }

                    //OnProcessing event
                    item.Update();
                }
            }
Пример #2
0
            /// <summary>
            /// Finishes the specified item if there was an explicit error or request is done.
            /// Returns whether finish process was done.
            /// </summary>
            private bool FinishRequest(NetkoItem item)
            {
                if (item.RequestInfo.IsFinished)
                {
                    // Request count management.
                    CurrentProcessCount--;

                    // OnFinished callack.
                    item.DispatchEvent(2);

                    // If item wasn't flagged for retry (IsProcessing == true), we should terminate it.
                    if (item.RequestInfo.IsProcessing)
                    {
                        item.Terminate();
                    }
                    // Flagged retry
                    else
                    {
                        //If attempted termination after calling retry, this is an invalid action.
                        if (item.RequestInfo.IsTerminated)
                        {
                            RenLog.LogWarning(
                                "Netko.Updater.FinishRequest - You should not call item.Terminate() directly after " +
                                "retrying! Forcing retry..."
                                );
                            // Force retry.
                            item.Retry();
                        }
                    }
                    return(true);
                }
                return(false);
            }
Пример #3
0
 /// <summary>
 /// Starts the specified item's request.
 /// Returns whether item has successfully started its request or is waiting in the queue.
 /// </summary>
 private bool StartRequest(NetkoItem item)
 {
     if (!item.RequestInfo.IsProcessing)
     {
         // Start the request only if there is an empty space in the queue.
         if (CanMakeRequest)
         {
             CurrentProcessCount++;
             item.Send();
         }
         return(true);
     }
     return(false);
 }
Пример #4
0
 /// <summary>
 /// Removes specified item if terminated.
 /// Returns whether removal was successful.
 /// </summary>
 private bool RemoveTerminated(NetkoItem item, ref int i)
 {
     if (item.RequestInfo.IsTerminated)
     {
         // If items weren't being processed and just got terminated, we should manually handle the process count management.
         if (!item.RequestInfo.IsProcessing)
         {
             CurrentProcessCount--;
         }
         Items.RemoveAt(i--);
         return(true);
     }
     return(false);
 }
Пример #5
0
 /// <summary>
 /// Registers the specified item to processing queue and returns it.
 /// </summary>
 public NetkoItem RegisterItem(NetkoItem item)
 {
     updater.AddItem(item);
     return(item);
 }
Пример #6
0
 /// <summary>
 /// Adds the specified item to the queue.
 /// </summary>
 public void AddItem(NetkoItem item)
 {
     Items.Add(item);
 }
Пример #7
0
 /// <summary>
 /// Removes the specified item from queue.
 /// </summary>
 public void RemoveItem(NetkoItem item)
 {
     Items.Remove(item);
 }