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); } } }
/** * 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); }