From 97a6ff277266e7f5140169d525ad58790f5cb5d3 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Mon, 24 Aug 2015 17:30:20 +0100 Subject: [PATCH] fixed how channels and users are cached --- lib/Client.js | 123 +++++++++++++++++++++++++++++-------------------- lib/channel.js | 79 +++++++++++++++++++++++-------- lib/server.js | 103 ++++++++++++++++------------------------- src/Client.js | 8 ++-- src/channel.js | 17 +++++++ src/server.js | 10 ++-- 6 files changed, 197 insertions(+), 143 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index d5d9bb683..978473d59 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -186,7 +186,32 @@ var Client = (function () { for (var _iterator = data.guilds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _server = _step.value; - self.addServer(_server); + var server = self.addServer(_server); + + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = _server.channels[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var channel = _step2.value; + + server.channels.push(self.addChannel(channel, server.id)); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2["return"]) { + _iterator2["return"](); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } } } catch (err) { _didIteratorError = true; @@ -206,8 +231,6 @@ var Client = (function () { self.trigger("ready"); self.debug("cached " + self.serverCache.length + " servers, " + self.channelCache.length + " channels and " + self.userCache.length + " users."); - console.log(self.channelCache[0]); - setInterval(function () { self.keepAlive.apply(self); }, data.heartbeat_interval); @@ -256,50 +279,16 @@ var Client = (function () { }, { key: "getUser", value: function getUser(key, value) { - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = this.userCache[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var user = _step2.value; - - if (user[key] === value) { - return user; - } - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2["return"]) { - _iterator2["return"](); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - return null; - } - - //def getChannel - }, { - key: "getChannel", - value: function getChannel(key, value) { var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { - for (var _iterator3 = this.channelCache[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var channel = _step3.value; + for (var _iterator3 = this.userCache[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var user = _step3.value; - if (channel[key] === value) { - return channel; + if (user[key] === value) { + return user; } } } catch (err) { @@ -320,22 +309,20 @@ var Client = (function () { return null; } - //def getServer + //def getChannel }, { - key: "getServer", - value: function getServer() { - var key = arguments.length <= 0 || arguments[0] === undefined ? "id" : arguments[0]; - var value = arguments.length <= 1 || arguments[1] === undefined ? "abc123" : arguments[1]; + key: "getChannel", + value: function getChannel(key, value) { var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { - for (var _iterator4 = this.serverCache[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var server = _step4.value; + for (var _iterator4 = this.channelCache[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var channel = _step4.value; - if (server[key] === value) { - return server; + if (channel[key] === value) { + return channel; } } } catch (err) { @@ -356,6 +343,42 @@ var Client = (function () { return null; } + //def getServer + }, { + key: "getServer", + value: function getServer() { + var key = arguments.length <= 0 || arguments[0] === undefined ? "id" : arguments[0]; + var value = arguments.length <= 1 || arguments[1] === undefined ? "abc123" : arguments[1]; + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; + + try { + for (var _iterator5 = this.serverCache[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var server = _step5.value; + + if (server[key] === value) { + return server; + } + } + } catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; + } finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5["return"]) { + _iterator5["return"](); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } + } + } + + return null; + } + //def trySendConnData }, { key: "trySendConnData", diff --git a/lib/channel.js b/lib/channel.js index 679efb5ff..8938e594a 100644 --- a/lib/channel.js +++ b/lib/channel.js @@ -5,29 +5,70 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Channel = (function () { - function Channel(data, server) { - _classCallCheck(this, Channel); + function Channel(data, server) { + _classCallCheck(this, Channel); - this.server = server; - this.name = data.name; - this.type = data.type; - this.id = data.id; - //this.isPrivate = isPrivate; //not sure about the implementation of this... + this.server = server; + this.name = data.name; + this.type = data.type; + this.id = data.id; + this.messages = []; + //this.isPrivate = isPrivate; //not sure about the implementation of this... + } + + _createClass(Channel, [{ + key: "equals", + value: function equals(object) { + return object.id === this.id; } + }, { + key: "addMessage", + value: function addMessage(data) { + if (!this.getMessage("id", data.id)) { + this.messages.push(data); + } + return this.getMessage("id", data.id); + } + }, { + key: "getMessage", + value: function getMessage(key, value) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - _createClass(Channel, [{ - key: "equals", - value: function equals(object) { - return object.id === this.id; - } - }, { - key: "client", - get: function get() { - return this.server.client; - } - }]); + try { + for (var _iterator = this.messages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var message = _step.value; - return Channel; + if (message[key] === value) { + return message; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return null; + } + }, { + key: "client", + get: function get() { + return this.server.client; + } + }]); + + return Channel; })(); module.exports = Channel; \ No newline at end of file diff --git a/lib/server.js b/lib/server.js index b9cfbbd7d..3549683de 100644 --- a/lib/server.js +++ b/lib/server.js @@ -13,8 +13,8 @@ var Server = (function () { this.ownerID = data.owner_id; this.name = data.name; this.id = data.id; - this.members = new Set(); - this.channels = new Set(); + this.members = []; + this.channels = []; this.icon = data.icon; this.afkTimeout = data.afk_timeout; this.afkChannelId = data.afk_channel_id; @@ -32,7 +32,7 @@ var Server = (function () { // get a user from this server's member list, // it will be identical (unless an async change occurred) // to the client's cache. - this.members.add(client.addUser(member.user)); + this.members.push(client.addUser(member.user)); } } catch (err) { _didIteratorError = true; @@ -48,31 +48,6 @@ var Server = (function () { } } } - - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = data.channels[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var channel = _step2.value; - - this.channels.add(client.addChannel(channel, this.id)); - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2["return"]) { - _iterator2["return"](); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } } _createClass(Server, [{ @@ -80,16 +55,48 @@ var Server = (function () { // get/set value: function getChannel(key, value) { + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = this.channels[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var channel = _step2.value; + + if (channel[key] === value) { + return channel; + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2["return"]) { + _iterator2["return"](); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + return null; + } + }, { + key: "getMember", + value: function getMember(key, value) { var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { - for (var _iterator3 = this.channels[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var channel = _step3.value; + for (var _iterator3 = this.members[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var member = _step3.value; - if (channel[key] === value) { - return channel; + if (member[key] === value) { + return member; } } } catch (err) { @@ -110,38 +117,6 @@ var Server = (function () { return null; } }, { - key: "getMember", - value: function getMember(key, value) { - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = this.members[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var member = _step4.value; - - if (member[key] === value) { - return member; - } - } - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4["return"]) { - _iterator4["return"](); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } - - return null; - } - }, { key: "iconURL", get: function get() { if (!this.icon) return null; diff --git a/src/Client.js b/src/Client.js index 8abbcdbb5..6ebddfc12 100644 --- a/src/Client.js +++ b/src/Client.js @@ -175,14 +175,16 @@ class Client { for(var _server of data.guilds){ - self.addServer(_server); + var server = self.addServer(_server); + + for(var channel of _server.channels){ + server.channels.push( self.addChannel(channel, server.id) ); + } } self.trigger("ready"); self.debug(`cached ${self.serverCache.length} servers, ${self.channelCache.length} channels and ${self.userCache.length} users.`); - console.log(self.channelCache[0]); - setInterval(function () { self.keepAlive.apply(self); }, data.heartbeat_interval); diff --git a/src/channel.js b/src/channel.js index 79006f309..4b92e834b 100644 --- a/src/channel.js +++ b/src/channel.js @@ -5,6 +5,7 @@ class Channel { this.name = data.name; this.type = data.type; this.id = data.id; + this.messages = []; //this.isPrivate = isPrivate; //not sure about the implementation of this... } @@ -15,6 +16,22 @@ class Channel { equals(object) { return object.id === this.id; } + + addMessage(data){ + if(!this.getMessage("id", data.id)){ + this.messages.push(data); + } + return this.getMessage("id", data.id); + } + + getMessage(key, value){ + for(var message of this.messages){ + if(message[key] === value){ + return message; + } + } + return null; + } } diff --git a/src/server.js b/src/server.js index e09cdb805..322db6a44 100644 --- a/src/server.js +++ b/src/server.js @@ -5,8 +5,8 @@ class Server { this.ownerID = data.owner_id; this.name = data.name; this.id = data.id; - this.members = new Set(); - this.channels = new Set(); + this.members = []; + this.channels = []; this.icon = data.icon; this.afkTimeout = data.afk_timeout; this.afkChannelId = data.afk_channel_id; @@ -18,13 +18,9 @@ class Server { // get a user from this server's member list, // it will be identical (unless an async change occurred) // to the client's cache. - this.members.add(client.addUser(member.user)); + this.members.push(client.addUser(member.user)); } - - for (var channel of data.channels) { - this.channels.add(client.addChannel(channel, this.id)); - } } get iconURL() {