Restore .kiwi()
[KiwiIRC.git] / client / js / gateway.js
1 /*jslint devel: true, browser: true, confusion: true, sloppy: true, maxerr: 50, indent: 4 */
2 /*globals io, $, kiwi, kiwi_server */
3 kiwi.gateway = {
4 nick: 'kiwi',
5 session_id: null,
6 syncing: false,
7 channel_prefix: '#',
8 network_name: '',
9 user_prefixes: ['~', '&', '@', '+'],
10 socket: null,
11 kiwi_server: null,
12
13 start: function (kiwi_server) {
14 if (typeof kiwi_server !== 'undefined') {
15 kiwi.gateway.kiwi_server = kiwi_server;
16 }
17 },
18
19 connect: function (host, port, ssl, password, callback) {
20 if (typeof kiwi.gateway.kiwi_server !== 'undefined') {
21 kiwi.gateway.socket = io.connect(kiwi_server, {
22 'try multiple transports': true,
23 'connect timeout': 3000,
24 'max reconnection attempts': 7,
25 'reconnection delay': 2000
26 });
27 kiwi.gateway.socket.on('connect_failed', function (reason) {
28 // TODO: When does this even actually get fired? I can't find a case! ~Darren
29 console.debug('Unable to connect Socket.IO', reason);
30 console.log("kiwi.gateway.socket.on('connect_failed')");
31 //kiwi.front.tabviews.server.addMsg(null, ' ', 'Unable to connect to Kiwi IRC.\n' + reason, 'error');
32 kiwi.gateway.socket.disconnect();
33 $(kiwi.gateway).trigger("onconnect_fail", {reason: reason});
34 kiwi.gateway.sendData = function () {};
35 }).on('error', function (e) {
36 $(kiwi.gateway).trigger("onconnect_fail", {reason: e});
37 console.log("kiwi.gateway.socket.on('error')");
38 console.log(e);
39 });
40
41 kiwi.gateway.socket.on('connecting', function (transport_type) {
42 console.log("kiwi.gateway.socket.on('connecting')");
43 $(kiwi.gateway).trigger("connecting");
44 });
45
46 kiwi.gateway.socket.on('connect', function () {
47 // This is also called when reconnected..
48 kiwi.gateway.sendData = function (data, callback) {
49 kiwi.gateway.socket.emit('message', {sid: this.session_id, data: $.toJSON(data)}, callback);
50 };
51
52 kiwi.gateway.socket.emit('irc connect', kiwi.gateway.nick, host, port, ssl, password, callback);
53 console.log("kiwi.gateway.socket.on('connect')");
54 });
55 kiwi.gateway.socket.on('too_many_connections', function () {
56 $(kiwi.gateway).trigger("onconnect_fail", {reason: 'too_many_connections'});
57 });
58
59 kiwi.gateway.socket.on('message', kiwi.gateway.parse);
60 kiwi.gateway.socket.on('disconnect', function () {
61 // Teardown procedure here
62 $(kiwi.gateway).trigger("ondisconnect", {});
63 console.log("kiwi.gateway.socket.on('disconnect')");
64 });
65 kiwi.gateway.socket.on('close', function () {
66 console.log("kiwi.gateway.socket.on('close')");
67 });
68
69 kiwi.gateway.socket.on('reconnecting', function (reconnectionDelay, reconnectionAttempts) {
70 console.log("kiwi.gateway.socket.on('reconnecting')");
71 $(kiwi.gateway).trigger("onreconnecting", {delay: reconnectionDelay, attempts: reconnectionAttempts});
72 });
73 kiwi.gateway.socket.on('reconnect_failed', function () {
74 console.log("kiwi.gateway.socket.on('reconnect_failed')");
75 });
76 }
77 },
78
79 /*
80 Events:
81 msg
82 action
83 server_connect
84 options
85 motd
86 notice
87 userlist
88 nick
89 join
90 topic
91 part
92 kick
93 quit
94 whois
95 syncchannel_redirect
96 debug
97 */
98 parse: function (item) {
99 if (item.event !== undefined) {
100 $(kiwi.gateway).trigger("on" + item.event, item);
101
102 switch (item.event) {
103 case 'options':
104 $.each(item.options, function (name, value) {
105 switch (name) {
106 case 'CHANTYPES':
107 kiwi.gateway.channel_prefix = value.charAt(0);
108 break;
109 case 'NETWORK':
110 kiwi.gateway.network_name = value;
111 break;
112 case 'PREFIX':
113 kiwi.gateway.user_prefixes = value;
114 break;
115 }
116 });
117 break;
118
119 case 'sync':
120 if (kiwi.gateway.onSync && kiwi.gateway.syncing) {
121 kiwi.gateway.syncing = false;
122 kiwi.gateway.onSync(item);
123 }
124 break;
125
126 case 'kiwi':
127 $(kiwi.gateway).trigger('kiwi.' + item.namespace, item.data);
128 break;
129 }
130 }
131 },
132
133 sendData: function () {},
134
135 privmsg: function (target, msg, callback) {
136 var data = {
137 method: 'privmsg',
138 args: {
139 target: target,
140 msg: msg
141 }
142 };
143
144 kiwi.gateway.sendData(data, callback);
145 },
146
147 notice: function (target, msg, callback) {
148 var data = {
149 method: 'notice',
150 args: {
151 target: target,
152 msg: msg
153 }
154 };
155
156 kiwi.gateway.sendData(data, callback);
157 },
158
159 ctcp: function (request, type, target, params, callback) {
160 var data = {
161 method: 'ctcp',
162 args: {
163 request: request,
164 type: type,
165 target: target,
166 params: params,
167 }
168 };
169
170 kiwi.gateway.sendData(data, callback);
171 },
172
173 join: function (channel, key, callback) {
174 var data = {
175 method: 'join',
176 args: {
177 channel: channel,
178 key: key
179 }
180 };
181
182 kiwi.gateway.sendData(data, callback);
183 },
184
185 part: function (channel, callback) {
186 var data = {
187 method: 'part',
188 args: {
189 channel: channel
190 }
191 };
192
193 kiwi.gateway.sendData(data, callback);
194 },
195
196 topic: function (channel, new_topic, callback) {
197 var data = {
198 method: 'topic',
199 args: {
200 channel: channel,
201 topic: new_topic
202 }
203 };
204
205 kiwi.gateway.sendData(data, callback);
206 },
207
208 kick: function (channel, nick, reason, callback) {
209 var data = {
210 method: 'kick',
211 args: {
212 channel: channel,
213 nick: nick,
214 reason: reason
215 }
216 };
217
218 kiwi.gateway.sendData(data, callback);
219 },
220
221 quit: function (msg, callback) {
222 msg = msg || "";
223 var data = {
224 method: 'quit',
225 args: {
226 message: msg
227 }
228 };
229
230 kiwi.gateway.sendData(data, callback);
231 },
232
233 raw: function (data, callback) {
234 var data = {
235 method: 'raw',
236 args: {
237 data: data
238 }
239 };
240
241 kiwi.gateway.sendData(data, callback);
242 },
243
244 nick: function (new_nick, callback) {
245 var data = {
246 method: 'nick',
247 args: {
248 nick: new_nick
249 }
250 };
251
252 kiwi.gateway.sendData(data, callback);
253 },
254
255 kiwi: function (target, data, callback) {
256 var data = {
257 method: 'kiwi',
258 args: {
259 target: target,
260 data: data
261 }
262 };
263
264 kiwi.gateway.sendData(data, callback);
265 },
266 };