-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathsocket.js
71 lines (69 loc) · 1.77 KB
/
socket.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
/*jslint browser: true */
/*global window, WebSocket, Error*/
(function (window) {
'use strict';
var Socket = function Socket(options) {
this.options = options || {};
this.topicCallbacks = {};
this.websocket = null;
this.init();
};
Socket.prototype = {
init: function init() {
if (!this.options.uri) {
this.error('Missing URI');
}
this.websocket = new WebSocket(this.options.uri);
this.websocket.onmessage = this.defaults.onMessage(this);
},
error: function error(message, shouldReturn) {
var err = new Error('Socket: ' + message);
if (shouldReturn === undefined || shouldReturn !== true) {
throw err;
}
return err;
},
defaults: {
onMessage: function onMessage(that) {
return function onMessage(e) {
var obj = JSON.parse(e.data);
var callback = that.topicCallbacks[obj.event];
if (callback) {
callback(obj.data);
}
};
}
},
send: function send(event, data) {
var message = JSON.stringify({
event: event,
data: data
});
this.websocket.send(message);
},
close: function close() {
this.websocket.close();
},
on: function on(topic, callback) {
this.topicCallbacks[topic] = callback;
return this;
},
onOpen: function (callback) {
this.websocket.onopen = callback;
return this;
},
onClose: function (callback) {
this.websocket.onclose = callback;
return this;
},
onError: function (callback) {
this.websocket.onerror = callback;
return this;
},
onMessage: function (callback) {
this.websocket.onmessage = callback;
return this;
}
};
window.Socket = Socket;
}(window));