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