-
Notifications
You must be signed in to change notification settings - Fork 4
/
socker.client.js
62 lines (54 loc) · 1.48 KB
/
socker.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
;(function(){
var cbStack = {};
//socker-client
var sockerClient = function(socket){
socket.addEventListener('message', function(data){
try{
data = JSON.parse(data);
}catch(e){
//throw new Error("data is not an object " + data);
//ignore?
}
if(data.__cbid){
var callback = cbStack[data.__cbid];
if(!callback) throw new Error("cbid " + data.__cbid + "is not available");
if(data.type === "ERROR"){
callback.call(this, data.__raw);
} else {
callback.call(this, null, data.__raw, data.type);
}
}
});
socket.serve = function(path, data, callback){
if(typeOfArgument(data) === "[object Function]"){
callback = data;
if(typeOfArgument(path) === "[object String]"){
data = {};
}
}
if(typeOfArgument(path) === "[object Object]") {
data = path;
}
var packet = packetBuild(path, data);
cbStack[packet.__cbid] = callback;
socket.send(JSON.stringify(packet));
}
return socket;
}
function packetBuild(path, data){
var clone = JSON.parse(JSON.stringify(data));
clone.path = path;
clone.__cbid = Math.ceil(Math.random()*Math.pow(10,16));
return clone;
}
function typeOfArgument(arg){
return Object.prototype.toString.call(arg);
}
if (typeof exports == "object") {
module.exports = sockerClient;
} else if (typeof define == "function" && define.amd) {
define(function(){ return sockerClient; });
} else {
this["sockerClient"] = sockerClient;
}
})();