Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Signaling/BackendNotifier.php')
-rw-r--r--lib/Signaling/BackendNotifier.php41
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,
],
]);
}
-
}