Add apple push notification service #162

This commit is contained in:
Kendrick Chan 2018-08-15 15:09:04 +08:00
parent 198eab156c
commit 30e08259db
3 changed files with 62 additions and 1 deletions

View file

@ -70,3 +70,8 @@ services:
$ip_address: "%env(MQTT_IP_ADDRESS)%"
$port: "%env(MQTT_PORT)%"
$cert: "%env(MQTT_CERT)%"
App\Service\APNSClient:
arguments:
$ip_address: "%env(APNS_REDIS_IP_ADDRESS)%"
$port: "%env(APNS_REDIS_PORT)%"

View file

@ -29,6 +29,7 @@ use App\Service\InvoiceCreator;
use App\Service\MapTools;
use App\Service\HubCounter;
use App\Service\MQTTClient;
use App\Service\APNSClient;
use Doctrine\ORM\Query;
use Doctrine\DBAL\Connection;
@ -1110,7 +1111,7 @@ class JobOrderController extends BaseController
return $this->render('job-order/form.html.twig', $params);
}
public function assigningSubmit(Request $req, ValidatorInterface $validator, MQTTCLient $mclient, $id)
public function assigningSubmit(Request $req, ValidatorInterface $validator, MQTTCLient $mclient, APNSClient $aclient, $id)
{
$this->denyAccessUnlessGranted('jo_assign.list', null, 'No access.');
@ -1201,6 +1202,10 @@ class JobOrderController extends BaseController
$mclient->sendEvent($obj, $payload);
$mclient->sendRiderEvent($obj, $payload);
// sned push notification
$aclient->sendPush($obj, "A RESQ rider is on his way to you.");
// return successful response
return $this->json([
'success' => 'Changes have been saved!'

View file

@ -0,0 +1,51 @@
<?php
namespace App\Service;
use Mosquitto\Client as MosquittoClient;
use App\Entity\JobOrder;
use Redis;
class APNSClient
{
const REDIS_KEY = 'apns_push';
// protected $mclient;
protected $redis;
public function __construct($ip_address, $port)
{
$this->redis = new Redis();
$this->redis->connect($ip_address, $port);
}
public function __destruct()
{
// $this->mclient->disconnect();
}
public function push($token, $message)
{
// $this->mclient->publish($channel, $message);
$data = $token . '|' . $message;
$this->redis->lpush(self::REDIS_KEY, $data);
}
public function sendPush($jo, $message)
{
$sessions = $jo->getCustomer()->getMobileSessions();
if (count($sessions) == 0)
{
error_log("no sessions to send mqtt event to");
return;
}
foreach ($sessions as $sess)
{
$push_id = $sess->getDevicePushID();
if ($push_id != null && strlen(trim($push_id)) > 0)
$this->push($push_id, $message);
}
}
}