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