Connection limiting
[KiwiIRC.git] / js / gateway.js
1 /*jslint browser: true, confusion: true, sloppy: true, maxerr: 50, indent: 4 */
2 /*globals io, $ */
3 var gateway = {
4
5 revision: 16,
6
7 nick: 'kiwi',
8 session_id: null,
9 syncing: false,
10 channel_prefix: '#',
11 network_name: '',
12 user_prefixes: ['~','&','@','+'],
13 socket: null,
14 kiwi_server: null,
15
16 start: function (kiwi_server) {
17 if (typeof kiwi_server !== 'undefined') {
18 gateway.kiwi_server = kiwi_server;
19 }
20 },
21
22 connect: function (host, port, ssl, callback) {
23 if (typeof gateway.kiwi_server !== 'undefined') {
24 gateway.socket = io.connect(kiwi_server, {'max reconnection attempts': 3});
25 gateway.socket.of('/kiwi').on('connect_failed', function (reason) {
26 console.debug('Unable to connect Socket.IO', reason);
27 front.tabviews.server.addMsg(null, ' ', 'Unable to connect to Kiwi IRC.\nYour IP address has too many open connections to Kiwi', 'error');
28 gateway.socket.disconnect();
29 $(gateway).trigger("ondisconnect", {});
30 gateway.sendData = function () {};
31 }).on('error', function (e) {
32 console.debug(e);
33 });
34 gateway.socket.on('connect', function () {
35 gateway.sendData = function (data, callback) {
36 gateway.socket.emit('message', {sid: this.session_id, data: $.toJSON(data)}, callback);
37 };
38 gateway.socket.on('message', gateway.parse);
39 gateway.socket.on('disconnect', function () {
40 // Teardown procedure here
41 $(gateway).trigger("ondisconnect", {});
42 });
43 gateway.socket.emit('irc connect', gateway.nick, host, port, ssl, callback);
44 });
45 }
46 },
47
48 /*
49 Events:
50 msg
51 action
52 server_connect
53 options
54 motd
55 notice
56 userlist
57 nick
58 join
59 topic
60 part
61 kick
62 quit
63 whois
64 syncchannel_redirect
65 debug
66 */
67 parse: function (item) {
68 if (item.event !== undefined) {
69 $(gateway).trigger("on" + item.event, item);
70
71 switch (item.event) {
72 case 'options':
73 $.each(item.options, function (name, value) {
74 switch (name) {
75 case 'CHANTYPES':
76 gateway.channel_prefix = value.charAt(0);
77 break;
78 case 'NETWORK':
79 gateway.network_name = value;
80 break;
81 case 'PREFIX':
82 gateway.user_prefixes = value;
83 break;
84 }
85 });
86 break;
87
88 case 'sync':
89 if (gateway.onSync && gateway.syncing) {
90 gateway.syncing = false;
91 gateway.onSync(item);
92 }
93 break;
94 }
95 }
96 },
97
98 sendData: function () {},
99
100 sync: function (callback) {
101 if (this.session_id === null) {
102 return;
103 }
104
105 var data = {
106 method: 'sync',
107 args: {}
108 };
109
110 gateway.syncing = true;
111 gateway.sendData(data, callback);
112 },
113
114 debug: function (callback) {
115 var data = {
116 method: 'debug',
117 args: {}
118 };
119
120 gateway.sendData(data, callback);
121 },
122
123
124 msg: function (s_target, s_msg, callback) {
125 var data = {
126 method: 'msg',
127 args: {
128 target: s_target,
129 msg: s_msg
130 }
131 };
132
133 gateway.sendData(data, callback);
134 },
135
136 action: function (s_target, s_msg, callback) {
137 var data = {
138 method: 'action',
139 args: {
140 target: s_target,
141 msg: s_msg
142 }
143 };
144
145 gateway.sendData(data, callback);
146 },
147
148
149 notice: function (s_target, s_msg, callback) {
150 var data = {
151 method: 'notice',
152 args: {
153 target: s_target,
154 msg: s_msg
155 }
156 };
157
158 gateway.sendData(data, callback);
159 },
160
161
162 join: function (s_channel, callback) {
163 var data = {
164 method: 'join',
165 args: {
166 channel: s_channel
167 }
168 };
169
170 gateway.sendData(data, callback);
171 },
172
173
174 raw: function (v_data, callback) {
175 var data = {
176 method: 'raw',
177 args: {
178 data: v_data
179 }
180 };
181
182 gateway.sendData(data, callback);
183 },
184
185
186 quit: function (msg, callback) {
187 //alert("closing");
188 msg = msg || "";
189 var data = {
190 method: 'quit',
191 args: {
192 message: msg
193 }
194 };
195
196 gateway.sendData(data, callback);
197 }
198
199
200
201
202 };