Emit 'dispose' on a dispose call instead of 'destroy'
[KiwiIRC.git] / server / irc / state.js
1 var util = require('util'),
2 events = require('events'),
3 _ = require('lodash'),
4 IrcConnection = require('./connection.js').IrcConnection;
5
6 var State = function (client, save_state) {
7 var that = this;
8
9 events.EventEmitter.call(this);
10 this.client = client;
11 this.save_state = save_state || false;
12
13 this.irc_connections = [];
14 this.next_connection = 0;
15
16 this.client.on('dispose', function () {
17 if (!that.save_state) {
18 _.each(that.irc_connections, function (irc_connection, i, cons) {
19 if (irc_connection) {
20 irc_connection.end('QUIT :' + (global.config.quit_message || ''));
21 irc_connection.dispose();
22 cons[i] = null;
23 }
24 });
25
26 that.dispose();
27 }
28 });
29 };
30
31 util.inherits(State, events.EventEmitter);
32
33 module.exports = State;
34
35 State.prototype.connect = function (hostname, port, ssl, nick, user, pass, callback) {
36 var that = this;
37 var con, con_num;
38 if (global.config.restrict_server) {
39 con = new IrcConnection(
40 global.config.restrict_server,
41 global.config.restrict_server_port,
42 global.config.restrict_server_ssl,
43 nick,
44 user,
45 global.config.restrict_server_password,
46 this);
47
48 } else {
49 con = new IrcConnection(
50 hostname,
51 port,
52 ssl,
53 nick,
54 user,
55 pass,
56 this);
57 }
58
59 con_num = this.next_connection++;
60 this.irc_connections[con_num] = con;
61 con.con_num = con_num;
62
63 new IrcCommands(con, con_num, this).bindEvents();
64
65 con.on('connected', function () {
66 return callback(null, con_num);
67 });
68
69 con.on('error', function (err) {
70 console.log('irc_connection error (' + hostname + '):', err);
71 return callback(err.code, {server: con_num, error: err});
72 });
73
74 con.on('close', function () {
75 that.irc_connections[con_num] = null;
76 });
77 };
78
79 State.prototype.sendIrcCommand = function () {
80 this.client.sendIrcCommand.apply(this.client, arguments);
81 };
82
83 State.prototype.sendKiwiCommand = function () {
84 this.client.sendKiwicommand.apply(this.client, arguments);
85 };
86
87 State.prototype.dispose = function () {
88 this.emit('dispose');
89 this.removeAllListeners();
90 };