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