From eda9d44a85df69b4e291d64aa239089ff93400cc Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 15 Apr 2020 17:07:58 +0200 Subject: Send the backend message to the correct backend server for now Signed-off-by: Joas Schilling --- lib/Controller/SignalingController.php | 2 +- lib/Signaling/BackendNotifier.php | 21 +++++++-------------- lib/Signaling/Manager.php | 26 ++++++++++++++++---------- 3 files changed, 24 insertions(+), 25 deletions(-) (limited to 'lib') diff --git a/lib/Controller/SignalingController.php b/lib/Controller/SignalingController.php index 0ac38ea35..2410744c5 100644 --- a/lib/Controller/SignalingController.php +++ b/lib/Controller/SignalingController.php @@ -149,7 +149,7 @@ class SignalingController extends OCSController { } $signalingMode = $this->talkConfig->getSignalingMode(); - $signaling = $this->signalingManager->getSignalingServerForConversation($room); + $signaling = $this->signalingManager->getSignalingServerLinkForConversation($room); return new DataResponse([ 'signalingMode' => $signalingMode, diff --git a/lib/Signaling/BackendNotifier.php b/lib/Signaling/BackendNotifier.php index da76192d5..87d6a4558 100644 --- a/lib/Signaling/BackendNotifier.php +++ b/lib/Signaling/BackendNotifier.php @@ -40,15 +40,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; } /** @@ -88,19 +92,8 @@ class BackendNotifier { return; } - $servers = $this->config->getSignalingServers(); - $serverId = null; - if ($this->config->getSignalingMode() === Config::SIGNALING_CLUSTER_CONVERSATION) { - // FIXME need to send it to the right signaling server - $serverId = $room->getAssignedSignalingServer(); - // FIXME some need to go to all HPBs? - } - if ($serverId === null) { - // We can use any server of the available backends. - $serverId = random_int(0, count($servers) - 1); - } - - $signaling = $servers[$serverId]; + // 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 = '/api/v1/room/' . $room->getToken(); diff --git a/lib/Signaling/Manager.php b/lib/Signaling/Manager.php index 23580cb68..521e7ada9 100644 --- a/lib/Signaling/Manager.php +++ b/lib/Signaling/Manager.php @@ -41,10 +41,16 @@ class Manager { $this->cache = $cacheFactory->createDistributed('hpb_servers'); } - public function getSignalingServerForConversation(?Room $room): string { + public function getSignalingServerLinkForConversation(?Room $room): string { + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) { + return ''; + } + + return $this->getSignalingServerForConversation($room)['server']; + } + + public function getSignalingServerForConversation(?Room $room): array { switch ($this->talkConfig->getSignalingMode()) { - case Config::SIGNALING_INTERNAL: - return ''; case Config::SIGNALING_EXTERNAL: return $this->getSignalingServerRandomly(); case Config::SIGNALING_CLUSTER_CONVERSATION: @@ -53,26 +59,26 @@ class Manager { } return $this->getSignalingServerConversationCluster($room); default: - throw new \RuntimeException('Unknown signaling mode'); + throw new \RuntimeException('Unsupported signaling mode'); } } - public function getSignalingServerRandomly(): string { + public function getSignalingServerRandomly(): array { $servers = $this->talkConfig->getSignalingServers(); try { $serverId = random_int(0, count($servers) - 1); - return $servers[$serverId]['server']; + return $servers[$serverId]; } catch (\Exception $e) { - return $servers[0]['server']; + return $servers[0]; } } - public function getSignalingServerConversationCluster(Room $room): string { + public function getSignalingServerConversationCluster(Room $room): array { $serverId = $room->getAssignedSignalingServer(); $servers = $this->talkConfig->getSignalingServers(); if ($serverId !== null && isset($servers[$serverId])) { - return $servers[$serverId]['server']; + return $servers[$serverId]; } $randomServerId = random_int(0, count($servers) - 1); @@ -83,6 +89,6 @@ class Manager { $room->setAssignedSignalingServer($serverId); } - return $servers[$serverId]['server']; + return $servers[$serverId]; } } -- cgit v1.2.3