Browse Source

Allow setting up multiple signaling servers.

Signed-off-by: Joachim Bauch <bauch@struktur.de>
pull/366/head
Joachim Bauch 8 years ago
parent
commit
5cb56b5659
Failed to extract signature
  1. 15
      js/signaling.js
  2. 6
      lib/Config.php
  3. 2
      lib/Controller/BackendController.php
  4. 6
      lib/Controller/SignalingController.php

15
js/signaling.js

@ -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);
}

6
lib/Config.php

@ -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);
}
/**

2
lib/Controller/BackendController.php

@ -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);
}

6
lib/Controller/SignalingController.php

@ -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.');
}

Loading…
Cancel
Save