-
Notifications
You must be signed in to change notification settings - Fork 11
/
client.js
121 lines (105 loc) · 3.12 KB
/
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
var RemoteJSDebugger = function () {
if (RemoteJSDebugger.instance === undefined) {
RemoteJSDebugger.instance = this;
if (window.io === undefined) {
var url = this.serviceUrl() + 'socket.io/socket.io.js';
this.loadScript(url, this.createInstance);
} else {
this.createInstance();
}
}
return RemoteJSDebugger.instance;
};
RemoteJSDebugger.prototype.createInstance = function () {
RemoteJSDebugger.instance.connect();
RemoteJSDebugger.console = window.console || {
log: function () {}, debug: function () {}
};
var log = function (data) {
RemoteJSDebugger.instance.send('log', data);
};
window.console = {
log: log,
debug: log
};
};
RemoteJSDebugger.prototype.loadScript = function (src, loadCallback) {
var script = document.createElement("script");
script.src = src;
script.type = "text/javascript";
if (loadCallback) script.onload = loadCallback;
document.getElementsByTagName("head")[0].appendChild(script);
};
RemoteJSDebugger.prototype.socketOpen = function () {
RemoteJSDebugger.console.log('Socket open');
};
RemoteJSDebugger.prototype.socketGetMessage = function (msg) {
try {
RemoteJSDebugger.instance.run(msg);
} catch(exception) {
RemoteJSDebugger.instance.sendException(exception);
}
};
RemoteJSDebugger.prototype.run = function (command) {
RemoteJSDebugger.commands[command.cmd](command.data);
};
RemoteJSDebugger.commands = {
run: function (cmd) {
RemoteJSDebugger.instance.sendResult(eval(cmd));
}
};
RemoteJSDebugger.prototype.socketClose = function () {
RemoteJSDebugger.console.log('Socket closed');
};
RemoteJSDebugger.prototype.socketSend = function (data) {
this.socket.send(data);
};
RemoteJSDebugger.prototype.serviceUrl = function () {
if(window.remoteJsServiceUrl) {
return window.remoteJsServiceUrl;
}
var script, scripts = document.getElementsByTagName('script');
for (var i in scripts) {
script = scripts[i].src;
if (script && script.match('/client.js')) break;
}
if(!script) {
var msg = "Could not find window.remoteJsServiceUrl try setting it explicitly";
alert(msg);
throw new Error(msg);
}
return script.replace('/client.js', '/');
};
RemoteJSDebugger.prototype.connect = function () {
if (this.socket === undefined || this.socket.readyState === this.socket.CLOSED) {
var url = this.serviceUrl() + 'remote-js',
socket = io.connect(url);
socket.on('connect', this.socketOpen);
socket.on('command', this.socketGetMessage);
socket.on('disconnect', this.socketClose);
this.socket = socket;
}
};
RemoteJSDebugger.prototype.send = function (msg, object) {
this.socket.emit("message", {msg: msg, data: object});
};
RemoteJSDebugger.prototype.sendResult = function (result) {
try {
this.send('cmdresult', result);
} catch(ex) {
// can't send it the easy way send a simplified version.
var data = {};
for(var k in result) {
if(result[k]) {
data[k] = result[k].toString();
} else {
data[k] = result[k];
}
}
this.send('cmdresult', data);
}
};
RemoteJSDebugger.prototype.sendException = function (exception) {
this.send('exception', exception);
};
var rjs = new RemoteJSDebugger();