<?php
namespace AdminBundle\Services;
use AdminBundle\Entity\NotificationHistory;
use AdminBundle\Entity\User;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use ZMQ;
use ZMQContext;
use ZMQSocket;
class WebsocketNotificationService
{
/** @var EntityManagerInterface */
private $em;
/** @var string */
private $tcpServer;
/** @var string */
private $port;
/**
* @param string $tcpServer
* @param string $port
*/
public function __construct(EntityManagerInterface $em, $tcpServer, $port)
{
$this->em = $em;
$this->tcpServer = $tcpServer;
$this->port = $port;
$context = new ZMQContext();
$this->socket = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
$this->server = "tcp://{$tcpServer}:{$port}";
}
/**
* @param array $data
*/
public function send($data)
{
$this->socket->connect($this->server);
$this->socket->send(json_encode($data));
$this->createHistory($data);
$this->socket->disconnect("tcp://{$this->tcpServer}:{$this->port}");
}
/**
* @param array $data
*/
private function createHistory($data)
{
$user = $this->em->getRepository(User::class)->findOneByApiKey($data['apiKey']);
if (!$user) {
return;
}
$this
->em
->getRepository(NotificationHistory::class)
->insert($user->getId(), $data['data']['event'], $data, new DateTime())
;
}
}