/**
  * Change a user right in a room to display it in the admin panel
  *
  * @param      Room        $room    The room where the right has been updated
  * @param      Client      $client  The client who got a right changed
  *
  * @return     \Generator
  */
 public function changeUserRight(Room $room, Client $client)
 {
     $clientRight = $client->getUser()->getRoomRight()->getEntityById($room->id)->__toArray();
     foreach ($room->getClients() as $roomClient) {
         if ($roomClient->isRegistered()) {
             (yield $roomClient->getConnection()->send(json_encode(['service' => $this->serviceName, 'action' => 'updateRoom', 'roomId' => $room->id, 'changedRight' => $clientRight])));
         }
     }
 }
 /**
  * Determine if a pseudonym is already used in the room
  *
  * @param      string  $pseudonym  The pseudonym to check
  *
  * @return     bool    True if the pseudonym is already used in the room, false otherwise
  */
 public function isPseudonymAlreadyUsed(string $pseudonym) : bool
 {
     return in_array($pseudonym, $this->room->getPseudonyms());
 }
 /**
  * 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)));
             }
         }
     }
 }