protected function processRun()
 {
     parent::processRun();
     $batchSize = $this->resolveBatchSize();
     if ($batchSize != null) {
         $resolvedBatchSize = $batchSize + 1;
     } else {
         $resolvedBatchSize = null;
     }
     $campaignItemsToProcess = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PROCESSING, time(), $resolvedBatchSize);
     $startingMemoryUsage = memory_get_usage();
     $modelsProcessedCount = 0;
     $signalMarkCompletedJob = true;
     foreach ($campaignItemsToProcess as $campaignItem) {
         try {
             $this->processCampaignItemInQueue($campaignItem);
         } catch (NotFoundException $e) {
             //todo: handle if delete returns false.
             $campaignItem->delete();
         } catch (NotSupportedException $e) {
             $this->errorMessage = $e->getMessage();
             //todo: returning false if using job queueing will cause job to not run again. maybe do something different?
             return false;
         }
         $this->runGarbageCollection($campaignItem);
         $modelsProcessedCount++;
         if ($this->hasReachedMaximumProcessingCount($modelsProcessedCount, $batchSize)) {
             Yii::app()->jobQueue->add('CampaignQueueMessagesInOutbox', 5);
             $signalMarkCompletedJob = false;
             break;
         }
         if (!Yii::app()->performance->isMemoryUsageSafe()) {
             $this->addMaximumMemoryUsageReached();
             Yii::app()->jobQueue->add('CampaignQueueMessagesInOutbox', 5);
             $signalMarkCompletedJob = false;
             break;
         }
     }
     $this->addMaxmimumProcessingCountMessage($modelsProcessedCount, $startingMemoryUsage);
     if ($signalMarkCompletedJob) {
         Yii::app()->jobQueue->add('CampaignMarkCompleted', 5);
     }
     return true;
 }
 protected function processRun()
 {
     parent::processRun();
     $batchSize = $this->resolveBatchSize();
     if ($batchSize != null) {
         $resolvedBatchSize = $batchSize + 1;
     } else {
         $resolvedBatchSize = null;
     }
     $autoresponderItemsToProcess = AutoresponderItem::getByProcessedAndProcessDateTime(0, time(), $resolvedBatchSize);
     $startingMemoryUsage = memory_get_usage();
     $modelsProcessedCount = 0;
     foreach ($autoresponderItemsToProcess as $autoresponderItem) {
         try {
             $this->processAutoresponderItemInQueue($autoresponderItem);
         } catch (NotFoundException $e) {
             return $autoresponderItem->delete();
         } catch (NotSupportedException $e) {
             $this->errorMessage = $e->getMessage();
             return false;
         }
         $this->runGarbageCollection($autoresponderItem);
         $modelsProcessedCount++;
         if ($this->hasReachedMaximumProcessingCount($modelsProcessedCount, $batchSize)) {
             Yii::app()->jobQueue->add('AutoresponderQueueMessagesInOutbox', 5);
             break;
         }
         if (!Yii::app()->performance->isMemoryUsageSafe()) {
             $this->addMaximumMemoryUsageReached();
             Yii::app()->jobQueue->add('AutoresponderQueueMessagesInOutbox', 5);
             break;
         }
     }
     $this->addMaxmimumProcessingCountMessage($modelsProcessedCount, $startingMemoryUsage);
     return true;
 }