public void Stop() { SharedClass.Logger.Info("Stopping AccountId : " + this.AccountId.ToString() + " Processor"); BulkRequest bulkRequest = null; this._shouldIProcess = false; while (this.QueueCount() > 0) { bulkRequest = this.DeQueue(); if (bulkRequest != null) { bulkRequest.ReEnQueueToDataBase(isDeQueued: false, reason: ""); } } while ((int)this._activeThreads > 0) { SharedClass.Logger.Info("AccountId " + this.AccountId.ToString() + " has still " + this.ActiveThreads.ToString() + " active process threads running"); Thread.Sleep(1000); } SharedClass.ReleaseAccountProcessor(this.AccountId); }
public void StartBulkProcess(object input) { BulkRequest bulkRequest = input as BulkRequest; SharedClass.Logger.Info("Started Processing BulkRequest " + bulkRequest.DisplayString()); ++this.ActiveThreads; System.Data.DataTable mobileUUIDsTable = new System.Data.DataTable(); string[] destinationsArray = null; string[] uuidsArray = null; JObject ChunkProcessResponse = null; mobileUUIDsTable.Columns.Add("Mobile", typeof(string)); mobileUUIDsTable.Columns.Add("UUID", typeof(string)); try { destinationsArray = bulkRequest.Destinations.ToString().Split(','); uuidsArray = bulkRequest.UUIDs.ToString().Split(','); if (destinationsArray.Length != uuidsArray.Length) { SharedClass.Logger.Error("Destinations Count (" + destinationsArray.Length.ToString() + ") And UUIDs Count (" + uuidsArray.Length.ToString() + ") Mismatch. Terminating Process."); bulkRequest.ReEnQueueToDataBase(isDeQueued: true, reason: "Destinations and UUIDs count mismatch"); return; } for (int iterator = bulkRequest.ProcessedCount; iterator < destinationsArray.Length; iterator++) { mobileUUIDsTable.Rows.Add(destinationsArray[iterator], uuidsArray[iterator]); if (mobileUUIDsTable.Rows.Count == SharedClass.BulkRequestBatchCount) { ChunkProcessResponse = ProcessChunk(bulkRequest, mobileUUIDsTable); if (Convert.ToBoolean(ChunkProcessResponse.SelectToken("Success").ToString()) == false) { SharedClass.Logger.Error("Error Processing BulkRequest : " + bulkRequest.DisplayString() + ", Reason : " + ChunkProcessResponse.SelectToken("Message").ToString()); bulkRequest.ReEnQueueToDataBase(isDeQueued: true, reason: ChunkProcessResponse.SelectToken("Message").ToString()); return; } else { bulkRequest.ProcessedCount += mobileUUIDsTable.Rows.Count; bulkRequest.UpdateProcessedCount(); } mobileUUIDsTable.Rows.Clear(); } } if (mobileUUIDsTable.Rows.Count > 0) { ChunkProcessResponse = ProcessChunk(bulkRequest, mobileUUIDsTable); if (Convert.ToBoolean(ChunkProcessResponse.SelectToken("Success").ToString()) == false) { SharedClass.Logger.Error("Error Processing BulkRequest : " + bulkRequest.DisplayString() + ", Reason : " + ChunkProcessResponse.SelectToken("Message").ToString()); bulkRequest.ReEnQueueToDataBase(isDeQueued: true, reason: ChunkProcessResponse.SelectToken("Message").ToString()); return; } else { bulkRequest.ProcessedCount += mobileUUIDsTable.Rows.Count; bulkRequest.UpdateProcessedCount(); } mobileUUIDsTable.Rows.Clear(); } } catch (Exception e) { SharedClass.Logger.Error("Error Processing BulkRequest : " + e.ToString()); bulkRequest.UpdateProcessedCount(); } finally { --this.ActiveThreads; } }