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