Browse Source
Allow setting up multiple signaling servers.
Signed-off-by: Joachim Bauch <bauch@struktur.de>
pull/366/head
Joachim Bauch
8 years ago
Failed to extract signature
4 changed files with
22 additions and
7 deletions
-
js/signaling.js
-
lib/Config.php
-
lib/Controller/BackendController.php
-
lib/Controller/SignalingController.php
|
|
|
@ -439,8 +439,15 @@ |
|
|
|
}.bind(this)); |
|
|
|
}; |
|
|
|
|
|
|
|
function StandaloneSignaling(settings, url) { |
|
|
|
function StandaloneSignaling(settings, urls) { |
|
|
|
SignalingBase.prototype.constructor.apply(this, arguments); |
|
|
|
if (typeof(urls) === "string") { |
|
|
|
urls = [urls]; |
|
|
|
} |
|
|
|
// We can connect to any of the servers.
|
|
|
|
var idx = Math.floor(Math.random() * urls.length); |
|
|
|
// TODO(jojo): Try other server if connection fails.
|
|
|
|
var url = urls[idx]; |
|
|
|
// Make sure we are using websocket urls.
|
|
|
|
if (url.indexOf("https://") === 0) { |
|
|
|
url = "wss://" + url.substr(8); |
|
|
|
@ -755,9 +762,9 @@ |
|
|
|
} else { |
|
|
|
settings = {}; |
|
|
|
} |
|
|
|
var url = settings['server']; |
|
|
|
if (url) { |
|
|
|
return new StandaloneSignaling(settings, url); |
|
|
|
var urls = settings['server']; |
|
|
|
if (urls) { |
|
|
|
return new StandaloneSignaling(settings, urls); |
|
|
|
} else { |
|
|
|
return new InternalSignaling(settings); |
|
|
|
} |
|
|
|
|
|
|
|
@ -109,7 +109,11 @@ class Config { |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getSignalingServer() { |
|
|
|
return $this->config->getAppValue('spreed', 'signaling_server', ''); |
|
|
|
$server = $this->config->getAppValue('spreed', 'signaling_server', ''); |
|
|
|
if ($server === '') { |
|
|
|
return []; |
|
|
|
} |
|
|
|
return explode('\n', $server); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
@ -73,6 +73,8 @@ class BackendController extends Controller { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// We can use any server of the available backends.
|
|
|
|
$signaling = $signaling[array_rand($signaling)]; |
|
|
|
if (substr($signaling, -1) === '/') { |
|
|
|
$signaling = substr($signaling, 0, strlen($signaling) - 1); |
|
|
|
} |
|
|
|
|
|
|
|
@ -90,7 +90,8 @@ class SignalingController extends OCSController { |
|
|
|
* @return DataResponse |
|
|
|
*/ |
|
|
|
public function signaling($messages) { |
|
|
|
if ($this->config->getSignalingServer() !== '') { |
|
|
|
$signaling = $this->config->getSignalingServer(); |
|
|
|
if (!empty($signaling)) { |
|
|
|
throw new \Exception('Internal signaling disabled.'); |
|
|
|
} |
|
|
|
|
|
|
|
@ -124,7 +125,8 @@ class SignalingController extends OCSController { |
|
|
|
* @return DataResponse |
|
|
|
*/ |
|
|
|
public function pullMessages() { |
|
|
|
if ($this->config->getSignalingServer() !== '') { |
|
|
|
$signaling = $this->config->getSignalingServer(); |
|
|
|
if (!empty($signaling)) { |
|
|
|
throw new \Exception('Internal signaling disabled.'); |
|
|
|
} |
|
|
|
|
|
|
|
|