Commit | Line | Data |
---|---|---|
635e02c3 D |
1 | var _ = require('lodash'); |
2 | ||
635e02c3 | 3 | |
ba21099b | 4 | module.exports.bindIrcEvents = function (events_scope, event_map, context, irc_connection) { |
4c25c0d7 D |
5 | var namespace_prefix = events_scope ? |
6 | events_scope + ':' : | |
7 | ''; | |
8 | ||
d2c73ae6 D |
9 | // Make sure we have a holder for the bound events |
10 | if (!event_map._bound_events) | |
11 | event_map._bound_events = {}; | |
12 | ||
635e02c3 | 13 | _.each(event_map, function (fn, event_name) { |
d2c73ae6 D |
14 | if (event_name[0] === '_') return; |
15 | ||
635e02c3 | 16 | // Bind the event to `context`, storing it with the event listing |
d2c73ae6 | 17 | if (!event_map._bound_events[event_name]) { |
ac24e0a7 | 18 | event_map._bound_events[event_name] = _.bind(fn, context); |
635e02c3 D |
19 | } |
20 | ||
21 | // Add the listener to the IRC connection object | |
4c25c0d7 | 22 | irc_connection.on(namespace_prefix + event_name, event_map._bound_events[event_name]); |
635e02c3 D |
23 | }); |
24 | }; | |
25 | ||
26 | ||
ba21099b | 27 | module.exports.unbindIrcEvents = function (events_scope, event_map, irc_connection) { |
4c25c0d7 D |
28 | var namespace_prefix = events_scope ? |
29 | events_scope + ':' : | |
30 | ''; | |
31 | ||
d2c73ae6 D |
32 | // No bound events? Then we have nothing to do |
33 | if (!event_map._bound_events) return; | |
34 | ||
635e02c3 | 35 | _.each(event_map, function(fn, event_name) { |
d2c73ae6 D |
36 | if (event_name[0] === '_') return; |
37 | ||
38 | if (event_map._bound_events[event_name]) { | |
635e02c3 | 39 | // Remove the listener from the IRC connection object |
4c25c0d7 | 40 | irc_connection.removeListener(namespace_prefix + event_name, event_map._bound_events[event_name]); |
635e02c3 D |
41 | |
42 | // Remove the bound function as no longer needed | |
ac24e0a7 | 43 | delete event_map._bound_events[event_name]; |
635e02c3 D |
44 | } |
45 | }); | |
ac24e0a7 D |
46 | |
47 | delete event_map._bound_events; | |
635e02c3 | 48 | }; |