diff options
Diffstat (limited to 'lib/Signaling/BackendNotifier.php')
-rw-r--r-- | lib/Signaling/BackendNotifier.php | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/lib/Signaling/BackendNotifier.php b/lib/Signaling/BackendNotifier.php index 8e79ac4ed..718521821 100644 --- a/lib/Signaling/BackendNotifier.php +++ b/lib/Signaling/BackendNotifier.php @@ -1,4 +1,5 @@ <?php + declare(strict_types=1); /** * @copyright Copyright (c) 2017 Joachim Bauch <bauch@struktur.de> @@ -40,15 +41,19 @@ class BackendNotifier { private $clientService; /** @var ISecureRandom */ private $secureRandom; + /** @var Manager */ + private $signalingManager; public function __construct(Config $config, ILogger $logger, IClientService $clientService, - ISecureRandom $secureRandom) { + ISecureRandom $secureRandom, + Manager $signalingManager) { $this->config = $config; $this->logger = $logger; $this->clientService = $clientService; $this->secureRandom = $secureRandom; + $this->signalingManager = $signalingManager; } /** @@ -79,23 +84,24 @@ class BackendNotifier { /** * Perform a request to the signaling backend. * - * @param string $url + * @param Room $room * @param array $data * @throws \Exception */ - private function backendRequest(string $url, array $data): void { - $servers = $this->config->getSignalingServers(); - if (empty($servers)) { + private function backendRequest(Room $room, array $data): void { + if ($this->config->getSignalingMode() === Config::SIGNALING_INTERNAL) { return; } - // We can use any server of the available backends. - $signaling = $servers[random_int(0, count($servers) - 1)]; + // FIXME some need to go to all HPBs, but that doesn't scale, so bad luck for now :( + $signaling = $this->signalingManager->getSignalingServerForConversation($room); $signaling['server'] = rtrim($signaling['server'], '/'); - $url = rtrim($signaling['server'], '/') . $url; + + $url = '/api/v1/room/' . $room->getToken(); + $url = $signaling['server'] . $url; if (strpos($url, 'wss://') === 0) { $url = 'https://' . substr($url, 6); - } else if (strpos($url, 'ws://') === 0) { + } elseif (strpos($url, 'ws://') === 0) { $url = 'http://' . substr($url, 5); } $body = json_encode($data); @@ -131,7 +137,7 @@ class BackendNotifier { foreach ($users as $user) { $userIds[] = $user['userId']; } - $this->backendRequest('/api/v1/room/' . $room->getToken(), [ + $this->backendRequest($room, [ 'type' => 'invite', 'invite' => [ 'userids' => $userIds, @@ -152,7 +158,7 @@ class BackendNotifier { */ public function roomsDisinvited(Room $room, array $userIds): void { $this->logger->info('No longer invited to ' . $room->getToken() . ': ' . print_r($userIds, true), ['app' => 'spreed']); - $this->backendRequest('/api/v1/room/' . $room->getToken(), [ + $this->backendRequest($room, [ 'type' => 'disinvite', 'disinvite' => [ 'userids' => $userIds, @@ -173,7 +179,7 @@ class BackendNotifier { */ public function roomSessionsRemoved(Room $room, array $sessionIds): void { $this->logger->info('Removed from ' . $room->getToken() . ': ' . print_r($sessionIds, true), ['app' => 'spreed']); - $this->backendRequest('/api/v1/room/' . $room->getToken(), [ + $this->backendRequest($room, [ 'type' => 'disinvite', 'disinvite' => [ 'sessionids' => $sessionIds, @@ -193,7 +199,7 @@ class BackendNotifier { */ public function roomModified(Room $room): void { $this->logger->info('Room modified: ' . $room->getToken(), ['app' => 'spreed']); - $this->backendRequest('/api/v1/room/' . $room->getToken(), [ + $this->backendRequest($room, [ 'type' => 'update', 'update' => [ 'userids' => $room->getParticipantUserIds(), @@ -212,7 +218,7 @@ class BackendNotifier { public function roomDeleted(Room $room, array $participants): void { $this->logger->info('Room deleted: ' . $room->getToken(), ['app' => 'spreed']); $userIds = array_keys($participants['users']); - $this->backendRequest('/api/v1/room/' . $room->getToken(), [ + $this->backendRequest($room, [ 'type' => 'delete', 'delete' => [ 'userids' => $userIds, @@ -254,7 +260,7 @@ class BackendNotifier { $changed[] = $participant; } } - $this->backendRequest('/api/v1/room/' . $room->getToken(), [ + $this->backendRequest($room, [ 'type' => 'participants', 'participants' => [ 'changed' => $changed, @@ -297,7 +303,7 @@ class BackendNotifier { } } - $this->backendRequest('/api/v1/room/' . $room->getToken(), [ + $this->backendRequest($room, [ 'type' => 'incall', 'incall' => [ 'incall' => $flags, @@ -316,12 +322,11 @@ class BackendNotifier { * @throws \Exception */ public function sendRoomMessage(Room $room, array $message): void { - $this->backendRequest('/api/v1/room/' . $room->getToken(), [ + $this->backendRequest($room, [ 'type' => 'message', 'message' => [ 'data' => $message, ], ]); } - } |