forked from remy/Socket.io-node-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathio-client.js
73 lines (56 loc) · 1.57 KB
/
io-client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
(function () {
var sys = require('sys'),
utils = require('./socket.io-node/lib/socket.io/utils'),
WebSocket = require('./socket.io-node/support/node-websocket-client/lib/websocket').WebSocket,
EventEmitter = require('events').EventEmitter,
io = {};
var Socket = io.Socket = function (host, options) {
this.url = 'ws://' + host + ':' + options.port + '/socket.io/websocket';
this.connected = false;
this.sessionId = null;
this._heartbeats = 0;
this.options = { origin: options.origin || 'http://forbind.net' };
};
Socket.prototype = new EventEmitter;
Socket.prototype.connect = function () {
var self = this;
function heartBeat() {
self.send('~h~' + ++self._heartbeats);
}
this.conn = new WebSocket(this.url, 'borf', this.options);
this.conn.onopen = function () {
self.connected = true;
self.emit('connect');
};
this.conn.onmessage = function (event) {
var rawmsg = utils.decode(event.data)[0],
frame = rawmsg.substr(0, 3),
msg;
switch (frame){
case '~h~':
return heartBeat();
case '~j~':
msg = JSON.parse(rawmsg.substr(3));
break;
}
if (msg !== undefined) {
self.emit('message', msg);
}
};
this.conn.onclose = function () {
self.emit('disconnect');
self.connected = false;
};
};
Socket.prototype.send = function (data) {
if (this.connected) {
this.conn.send(utils.encode(data));
}
};
Socket.prototype.disconnect = function () {
if (this.connected) {
this.conn.close();
}
};
this.io = exports.io = io;
})();