Beispiel #1
0
 private function _send()
 {
     $model = new SmsQueue();
     $messages = $model->getToSend();
     $loadBalancer = new Logic_LoadBalancer();
     $data = array();
     while ($current = $messages->current()) {
         $data[$current->ws_package_id]['queue'] = $current;
         $data[$current->ws_package_id]['messages'][$current->phone_number] = $current->message;
         $messages->next();
     }
     foreach ($data as $d) {
         $package = $d['queue']->findParentRow('WsPackageSms');
         $serviceSet = $package->findParentRow('WsServiceSet');
         $serviceGroup = $serviceSet->findParentRow('WsServiceSmsGroup');
         $service = $loadBalancer->addServiceGroup($serviceGroup);
         $logic = new Logic_Sms($service->getService());
         $status = $logic->package(null, $d['messages']);
         if (isset($status->packageId) && !empty($status->packageId)) {
             $d['queue']->setFromArray(array('send' => true))->save();
             $packageModel = new SmsPackage();
             $packageModel->updatePackageId($status->packageId, $d['queue']->ws_package_id);
         }
     }
 }
Beispiel #2
0
 /**
  * Realizuje wysyłkę wiadomości w pakiecie
  * @param GearmanJob $job
  */
 public function sendpackage(GearmanJob $job)
 {
     $params = json_decode($job->workload());
     list($mode, $packageDataId, $packageId) = $params;
     $package = new Logic_Package($mode);
     $wsPackage = new WsPackage();
     $wsPackageRow = $wsPackage->findOne($packageId);
     $package->updatePackageStatus($packageId, WsPackageStatus::STATUS_STARTED);
     $wsServiceSetRow = $wsPackageRow->findParentRow('WsServiceSet');
     $rawData = $package->getRawDataToSend($packageDataId);
     $client = Logic_Client::getInstanceByUser($package->getLastPackageStatus($packageId)->created_by);
     $package->updatePackageDataStatus($packageDataId, array('id_status' => WsPackageStatus::STATUS_STARTED));
     $service;
     switch ($mode) {
         case Logic_Package::SMS_MODE:
             $loadBalancer = $client->getLoadBalancer(Wsclient::GROUP_SMS, $wsServiceSetRow->ws_service_group_id);
             $hasErrors = false;
             $service = $loadBalancer->getService();
             do {
                 if (null === $service) {
                     $package->updatePackageDataStatus($packageDataId, array('id_status' => WsPackageStatus::STATUS_ERROR));
                     return $job->sendException("Unable to get service! Check backup service!");
                 }
                 $sms = new Logic_Sms($service, $wsPackageRow->ip, $wsServiceSetRow->id);
                 try {
                     if ($wsPackageRow->getLastStatus()->id_status == WsPackageStatus::STATUS_STARTED) {
                         $response = $sms->package($rawData, $packageId);
                         $package->updatePackageDataStatus($packageDataId, array('id_status' => WsPackageStatus::STATUS_SENT, 'external_package_id' => $response->packageId, 'ws_service_id' => $service->id));
                         $package->confirmPackageSend($wsPackageRow);
                     }
                     break;
                 } catch (Exception $exc) {
                     $hasErrors = true;
                     $package->updatePackageDataStatus($packageDataId, array('id_status' => WsPackageStatus::STATUS_ERROR));
                     $service = $loadBalancer->getService();
                     sleep(1);
                 }
             } while (true === $hasErrors || !(true === is_object($response) && true === property_exists($response, 'packageId')));
             break;
     }
     unset($client);
 }