Example #1
0
 /**
  * One time call constructor to get ini values
  */
 private static function initialize()
 {
     /* To use constants in INI conf file */
     Logger::globalConstDefine();
     if (!static::$initialized) {
         static::$iniValues = parse_ini_file(static::$INI_FILE_NAME, true);
         static::$iniSectionsComments = static::parseSectionsComments();
         static::$iniParamsComments = static::parseParamsComments();
         static::$initialized = true;
     }
     if (static::$iniValues === false) {
         throw new Exception('ERROR::The INI file ' . static::$INI_FILE_NAME . ' cannot be found', Exception::$WARNING);
     }
 }
 /**
  * Index a document in ES (a chat message)
  *
  * @param      Client            $clientFrom  The client to send the message from
  * @param      ClientCollection  $clientsTo   The client(s) to send the message
  * @param      Room              $room        The room
  * @param      string            $message     The text message
  * @param      string            $type        The message type ('public' || 'private')
  * @param      string            $date        The server micro timestamp at the moment the message was sent
  */
 private function indexMessage(Client $clientFrom, ClientCollection $clientsTo, Room $room, string $message, string $type, string $date)
 {
     if ($clientFrom->getConnection()->getRemoteAddress() !== '127.0.0.1') {
         foreach ($clientsTo as $clientTo) {
             $es = EsClientBuilder::create()->build();
             $params = ['index' => $this->esIndex . '_write', 'type' => 'message', 'body' => ['message' => $message, 'type' => $type, 'date' => $date, 'room' => $room->id, 'userFrom' => ['id' => $clientFrom->isRegistered() ? $clientFrom->getUser()->id : -1, 'ip' => $clientFrom->getConnection()->getRemoteAddress(), 'location' => $clientFrom->getLocation(), 'pseudonym' => $room->getClientPseudonym($clientFrom)], 'userTo' => ['id' => $clientTo->isRegistered() ? $clientTo->getUser()->id : -1, 'ip' => $clientTo->getConnection()->getRemoteAddress(), 'location' => $clientTo->getLocation(), 'pseudonym' => $room->getClientPseudonym($clientTo)]]];
             try {
                 $es->index($params);
             } catch (\Exception $e) {
                 $this->logger->log(LogLevel::ERROR, sprintf('[chatService] Document not indexed in ES `%s` %s', $e, static::formatVariable($params)));
             }
         }
     }
 }
 /**
  * Service dispatcher to call the class which can treat the client request
  *
  * @param      array                                   $data    JSON decoded client data
  * @param      Client                                  $client  The client calling the request
  *
  * @return     \Generator|\Icicle\Awaitable\Awaitable
  */
 private function serviceSelector(array $data, Client $client)
 {
     $this->logger->log(LogLevel::DEBUG, 'Data: ' . static::formatVariable($data));
     foreach ($data['service'] as $service) {
         switch ($service) {
             case $this->services['clientService']->getServiceName():
                 (yield $this->services['clientService']->process($data, $client));
                 break;
             case 'chatService':
                 break;
             default:
                 (yield $this->services[$service]->process($data, $client, $this->rooms));
         }
     }
 }
 /**
  * Remove a logger to the implemented logger
  *
  * @param      int   $loggerType  The logger type
  */
 public function removeLogger(int $loggerType)
 {
     $this->logger->removeLogger($loggerType);
 }