Refactoring, new dataStore() object
[KiwiIRC.git] / js / gateway.js
1 /*jslint browser: true, confusion: true, sloppy: true, maxerr: 50, indent: 4 */
2 /*globals io, $, kiwi_server */
3 kiwi.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 kiwi.gateway.kiwi_server = kiwi_server;
19 }
20 },
21
22 connect: function (host, port, ssl, callback) {
23 if (typeof kiwi.gateway.kiwi_server !== 'undefined') {
24 kiwi.gateway.socket = io.connect(kiwi_server, {'max reconnection attempts': 3});
25 kiwi.gateway.socket.of('/kiwi').on('connect_failed', function (reason) {
26 // TODO: When does this even actually get fired? I can't find a case! ~Darren
27 console.debug('Unable to connect Socket.IO', reason);
28 //kiwi.front.tabviews.server.addMsg(null, ' ', 'Unable to connect to Kiwi IRC.\n' + reason, 'error');
29 kiwi.gateway.socket.disconnect();
30 $(kiwi.gateway).trigger("onconnect_fail", {reason: reason});
31 kiwi.gateway.sendData = function () {};
32 }).on('error', function (e) {
33 $(kiwi.gateway).trigger("onconnect_fail", {reason: e});
34 console.debug(e);
35 console.log(e);
36 });
37 kiwi.gateway.socket.on('connect', function () {
38 kiwi.gateway.sendData = function (data, callback) {
39 kiwi.gateway.socket.emit('message', {sid: this.session_id, data: $.toJSON(data)}, callback);
40 };
41 kiwi.gateway.socket.on('message', kiwi.gateway.parse);
42 kiwi.gateway.socket.on('disconnect', function () {
43 // Teardown procedure here
44 $(kiwi.gateway).trigger("ondisconnect", {});
45 });
46 kiwi.gateway.socket.emit('irc connect', kiwi.gateway.nick, host, port, ssl, callback);
47 });
48 kiwi.gateway.socket.on('too_many_connections', function () {
49 $(kiwi.gateway).trigger("onconnect_fail", {reason: 'too_many_connections'});
50 });
51 }
52 },
53
54 /*
55 Events:
56 msg
57 action
58 server_connect
59 options
60 motd
61 notice
62 userlist
63 nick
64 join
65 topic
66 part
67 kick
68 quit
69 whois
70 syncchannel_redirect
71 debug
72 */
73 parse: function (item) {
74 if (item.event !== undefined) {
75 $(kiwi.gateway).trigger("on" + item.event, item);
76
77 switch (item.event) {
78 case 'options':
79 $.each(item.options, function (name, value) {
80 switch (name) {
81 case 'CHANTYPES':
82 kiwi.gateway.channel_prefix = value.charAt(0);
83 break;
84 case 'NETWORK':
85 kiwi.gateway.network_name = value;
86 break;
87 case 'PREFIX':
88 kiwi.gateway.user_prefixes = value;
89 break;
90 }
91 });
92 break;
93
94 case 'sync':
95 if (kiwi.gateway.onSync && kiwi.gateway.syncing) {
96 kiwi.gateway.syncing = false;
97 kiwi.gateway.onSync(item);
98 }
99 break;
100
101 case 'kiwi':
102 $(kiwi.gateway).trigger('kiwi.' + item.namespace, item.data);
103 break;
104 }
105 }
106 },
107
108 sendData: function () {},
109
110 sync: function (callback) {
111 if (this.session_id === null) {
112 return;
113 }
114
115 var data = {
116 method: 'sync',
117 args: {}
118 };
119
120 kiwi.gateway.syncing = true;
121 kiwi.gateway.sendData(data, callback);
122 },
123
124 debug: function (callback) {
125 var data = {
126 method: 'debug',
127 args: {}
128 };
129
130 kiwi.gateway.sendData(data, callback);
131 },
132
133
134 msg: function (s_target, s_msg, callback) {
135 var data = {
136 method: 'msg',
137 args: {
138 target: s_target,
139 msg: s_msg
140 }
141 };
142
143 kiwi.gateway.sendData(data, callback);
144 },
145
146 action: function (s_target, s_msg, callback) {
147 var data = {
148 method: 'action',
149 args: {
150 target: s_target,
151 msg: s_msg
152 }
153 };
154
155 kiwi.gateway.sendData(data, callback);
156 },
157
158
159 kiwi: function (s_target, s_data, callback) {
160 var data = {
161 method: 'kiwi',
162 args: {
163 target: s_target,
164 data: s_data
165 }
166 };
167 kiwi.gateway.sendData(data, callback);
168 },
169
170
171 notice: function (s_target, s_msg, callback) {
172 var data = {
173 method: 'notice',
174 args: {
175 target: s_target,
176 msg: s_msg
177 }
178 };
179
180 kiwi.gateway.sendData(data, callback);
181 },
182
183
184 join: function (s_channel, callback) {
185 var data = {
186 method: 'join',
187 args: {
188 channel: s_channel
189 }
190 };
191
192 kiwi.gateway.sendData(data, callback);
193 },
194
195 setTopic: function (s_channel, new_topic, callback) {
196 var data = {
197 method: 'topic',
198 args: {
199 channel: s_channel,
200 topic: new_topic
201 }
202 };
203
204 kiwi.gateway.sendData(data, callback);
205 },
206
207
208 raw: function (v_data, callback) {
209 var data = {
210 method: 'raw',
211 args: {
212 data: v_data
213 }
214 };
215
216 kiwi.gateway.sendData(data, callback);
217 },
218
219
220 quit: function (msg, callback) {
221 //alert("closing");
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
234
235
236 };