Move the binding into new prototype object
authorJack Allnutt <m2ys4u@gmail.com>
Fri, 25 Jan 2013 01:20:43 +0000 (01:20 +0000)
committerDarren <darren@darrenwhitlen.com>
Thu, 31 Jan 2013 14:58:43 +0000 (14:58 +0000)
server/irc/binder.js [new file with mode: 0755]
server/irc/channel.js
server/irc/server.js
server/irc/user.js

diff --git a/server/irc/binder.js b/server/irc/binder.js
new file mode 100755 (executable)
index 0000000..a4fab42
--- /dev/null
@@ -0,0 +1,24 @@
+var Binder = function () {};
+
+module.exports = Binder;
+
+Binder.prototype.bindEvents = function () {
+    var that = this;
+    this.irc_events.forEach(function (fn, event_name, irc_events) {
+        // Bind the event to `that` context, storing it with the event listing
+        if (!irc_events[event_name].bound_fn) {
+            irc_events[event_name].bound_fn = fn.bind(that);
+        }
+
+        this.irc_connection.on(this.scope + ':' + event_name, irc_events[event_name].bound_fn);
+    });
+};
+
+
+Binder.prototype.unbindEvents = function () {
+    this.irc_events.forEach(function(fn, event_name, irc_events) {
+        if (irc_events[event_name].bound_fn) {
+            this.irc_connection.removeListener(this.scope + ':' + event_name, irc_events[event_name].bound_fn);
+        }
+    });
+};
\ No newline at end of file
index 1825969562e0db98af8fff94c2dcc1ca6eac44da..3a8993f0d2c3671de615bbd58314e740d52de061 100644 (file)
@@ -1,12 +1,21 @@
+var util    = require('util'),
+    Binder  = require('./binder.js');
 
 function IrcChannel(irc_connection, name) {
     this.irc_connection = irc_connection;
     this.name = name;
 
+    this.scope = 'channel:' + name;
+    Binder.call(this);
+    
     this.members = [];
     this.ban_list_buffer = [];
 }
 
+util.inherits(IrcChannel, Binder);
+
+module.exports = IrcChannel;
+
 
 IrcChannel.prototype.dispose = function (){
     this.unbindEvents();
@@ -14,52 +23,24 @@ IrcChannel.prototype.dispose = function (){
 };
 
 
-IrcChannel.prototype.bindEvents = function() {
-    var that = this;
-
-    // If we havent generated an event listing yet, do so now
-    if (!this.irc_events) {
-        this.irc_events = {
-            join: onJoin,
-            part: onPart,
-            kick: onKick,
-            quit: onQuit,
-            privmsg: onMsg,
-            notice: onNotice,
-            ctcp_request: onCtcpRequest,
-            ctcp_response: onCtcpResponse,
-            topic: onTopic,
-            nicklist: onNicklist,
-            nicklistEnd: onNicklistEnd,
-            banlist: onBanList,
-            banlist_end: onBanListEnd,
-            topicsetby: onTopicSetby
-        };
-    }
-
-    this.irc_events.forEach(function(fn, event_name, irc_events){
-        // Bind the event to `that` context, storing it with the event listing
-        if (!irc_events[event_name].bound_fn) {
-            irc_events[event_name].bound_fn = fn.bind(that);
-        }
-
-        this.irc_connection.on(event_name, irc_events[event_name].bound_fn);
-    });
+IrcChannel.prototype.irc_events = {
+    join:           onJoin,
+    part:           onPart,
+    kick:           onKick,
+    quit:           onQuit,
+    privmsg:        onMsg,
+    notice:         onNotice,
+    ctcp_request:   onCtcpRequest,
+    ctcp_response:  onCtcpResponse,
+    topic:          onTopic,
+    nicklist:       onNicklist,
+    nicklistEnd:    onNicklistEnd,
+    banlist:        onBanList,
+    banlist_end:    onBanListEnd,
+    topicsetby:     onTopicSetby
 };
 
 
-IrcChannel.prototype.unbindEvents = function() {
-    this.irc_events.forEach(function(fn, event_name, irc_events){
-        if (irc_events[event_name].bound_fn) {
-            this.irc_connection.removeListener(event_name, irc_events[event_name].bound_fn);
-        }
-    });
-};
-
-
-
-
-
 function onJoin(event) {
     this.irc_connection.sendIrcCommand('join', {
         channel: this.name,
index ee469c0f20dea93c93a07ccb13a4a6904ccb7158..b9c40cc7f026e15ef23dd79bfc38d5cdca92a026 100755 (executable)
@@ -1,61 +1,45 @@
+var util    = require('util'),
+    Binder  = require('./binder.js');
+
 var IrcServer = function (irc_connection, host, port) {
     this.irc_connection = irc_connection;
     this.host = host;
     this.port = port;
     
+    this.scope = 'server:' + host;
+    
+    Binder.call(this);
+    
     this.list_buffer = [];
     this.motd_buffer = '';
 };
 
+util.inherits(IrcServer, Binder);
+
 module.exports = IrcServer;
 
-IrcServer.prototype.bindEvents = function () {
-    var that = this;
-
-    // If we havent generated an event listing yet, do so now
-    if (!this.irc_events) {
-        this.irc_events = {
-            connect:                onConnect,
-            options:                onOptions,
-            list_start:             onListStart,
-            list_channel:           onListChannel,
-            list_end:               onListEnd,
-            motd_start:             onMotdStart,
-            motd:                   onMotd,
-            motd_end:               onMotdEnd,
-            error:                  onError,
-            channel_redirect:       onChannelRedirect,
-            no_such_nick:           onNoSuchNick,
-            cannot_send_to_channel: onChannotSendToChan,
-            too_many_channels:      onTooManyChannels,
-            user_not_in_channel:    onUserNotInChannel,
-            not_on_channel:         onNotOnChannel,
-            channel_is_full:        onChannelisFull,
-            invite_only_channel:    onInviteOnlyChannel,
-            banned_from_channel:    onBannedFromChannel,
-            bad_channel_key:        onBadChannelKey,
-            chanop_privs_needed:    onChanopPrivsNeeded,
-            nickname_in_use:        onNicknameInUse
-        };
-    }
-
-    this.irc_events.forEach(function (fn, event_name, irc_events) {
-        // Bind the event to `that` context, storing it with the event listing
-        if (!irc_events[event_name].bound_fn) {
-            irc_events[event_name].bound_fn = fn.bind(that);
-        }
-
-        this.irc_connection.on('server:' + this.host + ':' + event_name, irc_events[event_name].bound_fn);
-    });
-};
-
-
-IrcServer.prototype.unbindEvents = function () {
-    this.irc_events.forEach(function(fn, event_name, irc_events) {
-        if (irc_events[event_name].bound_fn) {
-            this.irc_connection.removeListener('server:' + this.host + ':' + event_name, irc_events[event_name].bound_fn);
-        }
-    });
+IrcServer.prototype.irc_events = {
+    connect:                onConnect,
+    options:                onOptions,
+    list_start:             onListStart,
+    list_channel:           onListChannel,
+    list_end:               onListEnd,
+    motd_start:             onMotdStart,
+    motd:                   onMotd,
+    motd_end:               onMotdEnd,
+    error:                  onError,
+    channel_redirect:       onChannelRedirect,
+    no_such_nick:           onNoSuchNick,
+    cannot_send_to_channel: onChannotSendToChan,
+    too_many_channels:      onTooManyChannels,
+    user_not_in_channel:    onUserNotInChannel,
+    not_on_channel:         onNotOnChannel,
+    channel_is_full:        onChannelisFull,
+    invite_only_channel:    onInviteOnlyChannel,
+    banned_from_channel:    onBannedFromChannel,
+    bad_channel_key:        onBadChannelKey,
+    chanop_privs_needed:    onChanopPrivsNeeded,
+    nickname_in_use:        onNicknameInUse
 };
 
 function onConnect(event) {
index c4fa2b78f46ef99536503515d5f0ba00253d0b00..f3ba146f25c909166a29bf25f9f8a8d02051cb67 100755 (executable)
@@ -1,50 +1,33 @@
+var util    = require('util'),\r
+    Binder  = require('./binder.js');\r
+\r
 var IrcUser = function (irc_connection, nick) {\r
     this.irc_connection = irc_connection;\r
     this.nick = nick;\r
+    \r
+    this.scope = 'user:' + nick;\r
+    Binder.call(this);\r
 };\r
 \r
-module.exports = IrcUser;\r
-\r
-IrcUser.prototype.bindEvents = function () {\r
-    var that = this;\r
-\r
-    // If we havent generated an event listing yet, do so now\r
-    if (!this.irc_events) {\r
-        this.irc_events = {\r
-            nick:           onNick,\r
-            away:           onAway,\r
-            quit:           onKick,\r
-            whoisuser:      onWhoisUser,\r
-            whoisoperator:  onWhoisOperator,\r
-            whoischannels:  onWhoisChannels,\r
-            whoismodes:     onWhoisModes,\r
-            whoisidle:      onWhoisIdle,\r
-            whoisregnick:   onRegNick,\r
-            endofwhois:     onEhoisEnd,\r
-            notice:         onNotice,\r
-            ctcp_response:  onCtcpResponse,\r
-            privmsg:        onPrivmsg,\r
-            ctcp_request:   onCtcpRequest\r
-        };\r
-    }\r
-\r
-    this.irc_events.forEach(function (fn, event_name, irc_events) {\r
-        // Bind the event to `that` context, storing it with the event listing\r
-        if (!irc_events[event_name].bound_fn) {\r
-            irc_events[event_name].bound_fn = fn.bind(that);\r
-        }\r
-\r
-        this.irc_connection.on('user:' + this.nick + ':' + event_name, irc_events[event_name].bound_fn);\r
-    });\r
-};\r
+util.inherits(IrcUser, Binder);\r
 \r
+module.exports = IrcUser;\r
 \r
-IrcUser.prototype.unbindEvents = function () {\r
-    this.irc_events.forEach(function(fn, event_name, irc_events) {\r
-        if (irc_events[event_name].bound_fn) {\r
-            this.irc_connection.removeListener('user:' + this.nick + ':' + event_name, irc_events[event_name].bound_fn);\r
-        }\r
-    });\r
+IrcUser.prototype.irc_events = {\r
+    nick:           onNick,\r
+    away:           onAway,\r
+    quit:           onKick,\r
+    whoisuser:      onWhoisUser,\r
+    whoisoperator:  onWhoisOperator,\r
+    whoischannels:  onWhoisChannels,\r
+    whoismodes:     onWhoisModes,\r
+    whoisidle:      onWhoisIdle,\r
+    whoisregnick:   onRegNick,\r
+    endofwhois:     onEhoisEnd,\r
+    notice:         onNotice,\r
+    ctcp_response:  onCtcpResponse,\r
+    privmsg:        onPrivmsg,\r
+    ctcp_request:   onCtcpRequest\r
 };\r
 \r
 function onNick(event) {\r