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