diff options
author | Joas Schilling <coding@schilljs.com> | 2020-04-27 16:47:58 +0300 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2020-05-12 11:40:21 +0300 |
commit | 3fe01a19ec17deae14b8ff5dbd8ef9d3e7e331f3 (patch) | |
tree | ab3bba7904f3c0cb29dad74742d7da5dc352f5a5 /lib | |
parent | 650427e01af6f22590206253d2ab1a7542f42b10 (diff) |
Allow to hardcode a signaling server per conversation token
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Signaling/Manager.php | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/Signaling/Manager.php b/lib/Signaling/Manager.php index 521e7ada9..b5269016b 100644 --- a/lib/Signaling/Manager.php +++ b/lib/Signaling/Manager.php @@ -27,16 +27,21 @@ use OCA\Talk\Config; use OCA\Talk\Room; use OCP\ICache; use OCP\ICacheFactory; +use OCP\IConfig; class Manager { + /** @var IConfig */ + protected $serverConfig; /** @var Config */ protected $talkConfig; /** @var ICache */ private $cache; - public function __construct(Config $talkConfig, + public function __construct(IConfig $serverConfig, + Config $talkConfig, ICacheFactory $cacheFactory) { + $this->serverConfig = $serverConfig; $this->talkConfig = $talkConfig; $this->cache = $cacheFactory->createDistributed('hpb_servers'); } @@ -81,11 +86,19 @@ class Manager { return $servers[$serverId]; } - $randomServerId = random_int(0, count($servers) - 1); + $serverIdToAssign = random_int(0, count($servers) - 1); + $hardcodedServers = $this->serverConfig->getSystemValue('talk_hardcoded_hpb', []); + if (isset($hardcodedServers[$room->getToken()])) { + $hardcodedServerId = $hardcodedServers[$room->getToken()]; + if (isset($servers[$hardcodedServerId])) { + $serverIdToAssign = $hardcodedServerId; + } + } + $serverId = $this->cache->get($room->getToken()); if ($serverId === null) { - $this->cache->set($room->getToken(), $randomServerId); - $serverId = $randomServerId; + $this->cache->set($room->getToken(), $serverIdToAssign); + $serverId = $serverIdToAssign; $room->setAssignedSignalingServer($serverId); } |