Merge pull request #204 from M2Ys4U/feedback
[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 con = new IrcConnection(
39 hostname,
40 port,
41 ssl,
42 nick,
43 user,
44 pass,
45 this);
46
47 con_num = this.next_connection++;
48 this.irc_connections[con_num] = con;
49 con.con_num = con_num;
50
51 new IrcCommands(con, con_num, this).bindEvents();
52
53 con.on('connected', function () {
54 return callback(null, con_num);
55 });
56
57 con.on('error', function (err) {
58 console.log('irc_connection error (' + hostname + '):', err);
59 return callback(err.code, {server: con_num, error: err});
60 });
61
62 con.on('close', function () {
63 that.irc_connections[con_num] = null;
64 });
65 };
66
67 State.prototype.sendIrcCommand = function () {
68 this.client.sendIrcCommand.apply(this.client, arguments);
69 };
70
71 State.prototype.sendKiwiCommand = function () {
72 this.client.sendKiwicommand.apply(this.client, arguments);
73 };
74
75 State.prototype.dispose = function () {
76 this.emit('dispose');
77 this.removeAllListeners();
78 };