/// <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(); } }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Registers the specified item to processing queue and returns it. /// </summary> public NetkoItem RegisterItem(NetkoItem item) { updater.AddItem(item); return(item); }
/// <summary> /// Adds the specified item to the queue. /// </summary> public void AddItem(NetkoItem item) { Items.Add(item); }
/// <summary> /// Removes the specified item from queue. /// </summary> public void RemoveItem(NetkoItem item) { Items.Remove(item); }