diff --git a/src/server.js b/src/server.js index a131e176..95f5d3bd 100644 --- a/src/server.js +++ b/src/server.js @@ -71,6 +71,7 @@ var Server = function () { initModule = new BackendModule(); } else if (Config.get('enable-partition')) { initModule = new PartitionModule(); + self.partitionDecider = initModule.getPartitionDecider(); } else { initModule = new LegacyModule(); } @@ -186,8 +187,15 @@ Server.prototype.isChannelLoaded = function (name) { }; Server.prototype.getChannel = function (name) { - var self = this; var cname = name.toLowerCase(); + if (this.partitionDecider && + !this.partitionDecider.isChannelOnThisPartition(cname)) { + const error = new Error(`Channel '${cname}' is mapped to a different partition`); + error.code = 'EWRONGPART'; + throw error; + } + + var self = this; for (var i = 0; i < self.channels.length; i++) { if (self.channels[i].uniqueName === cname) return self.channels[i]; diff --git a/src/user.js b/src/user.js index b779a672..bbb6d7e9 100644 --- a/src/user.js +++ b/src/user.js @@ -53,7 +53,20 @@ function User(socket) { } self.waitFlag(Flags.U_READY, function () { - var chan = Server.getServer().getChannel(data.name); + var chan; + try { + chan = Server.getServer().getChannel(data.name); + } catch (error) { + if (error.code !== 'EWRONGPART') { + throw error; + } + + self.socket.emit("errorMsg", { + msg: "Channel '" + data.name + "' is hosted on another server. " + + "Try refreshing the page to update the connection URL." + }); + return; + } chan.joinUser(self, data); }); });