Example #1
0
        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);
        }
Example #2
0
        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;
            }
        }