reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
var rpc_client_id, Hlclient = function (wsURL) {
|
||||
this.wsURL = wsURL;
|
||||
this.handlers = {
|
||||
_execjs: function (resolve, param) {
|
||||
var res = eval(param)
|
||||
if (!res) {
|
||||
resolve("没有返回值")
|
||||
} else {
|
||||
resolve(res)
|
||||
}
|
||||
}
|
||||
};
|
||||
this.socket = undefined;
|
||||
if (!wsURL) {
|
||||
throw new Error('wsURL can not be empty!!')
|
||||
}
|
||||
this.connect()
|
||||
}
|
||||
Hlclient.prototype.connect = function () {
|
||||
if (this.wsURL.indexOf("clientId=") === -1 && rpc_client_id) {
|
||||
this.wsURL += "&clientId=" + rpc_client_id
|
||||
}
|
||||
console.log('begin of connect to wsURL: ' + this.wsURL);
|
||||
var _this = this;
|
||||
try {
|
||||
this.socket = new WebSocket(this.wsURL);
|
||||
this.socket.onmessage = function (e) {
|
||||
_this.handlerRequest(e.data)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log("connection failed,reconnect after 10s");
|
||||
setTimeout(function () {
|
||||
_this.connect()
|
||||
}, 10000)
|
||||
}
|
||||
this.socket.onclose = function () {
|
||||
console.log('rpc已关闭');
|
||||
setTimeout(function () {
|
||||
_this.connect()
|
||||
}, 10000)
|
||||
}
|
||||
this.socket.addEventListener('open', (event) => {
|
||||
console.log("rpc连接成功");
|
||||
});
|
||||
this.socket.addEventListener('error', (event) => {
|
||||
console.error('rpc连接出错,请检查是否打开服务端:', event.error);
|
||||
})
|
||||
};
|
||||
Hlclient.prototype.send = function (msg) {
|
||||
this.socket.send(msg)
|
||||
}
|
||||
Hlclient.prototype.regAction = function (func_name, func) {
|
||||
if (typeof func_name !== 'string') {
|
||||
throw new Error("an func_name must be string");
|
||||
}
|
||||
if (typeof func !== 'function') {
|
||||
throw new Error("must be function");
|
||||
}
|
||||
console.log("register func_name: " + func_name);
|
||||
this.handlers[func_name] = func;
|
||||
return true
|
||||
}
|
||||
Hlclient.prototype.handlerRequest = function (requestJson) {
|
||||
var _this = this;
|
||||
try {
|
||||
var result = JSON.parse(requestJson)
|
||||
} catch (error) {
|
||||
console.log("请求信息解析错误", requestJson);
|
||||
return
|
||||
}
|
||||
if (result["registerId"]) {
|
||||
rpc_client_id = result['registerId']
|
||||
return
|
||||
}
|
||||
if (!result['action'] || !result["message_id"]) {
|
||||
console.warn('没有方法或者消息id,不处理');
|
||||
return
|
||||
}
|
||||
var action = result["action"], message_id = result["message_id"]
|
||||
var theHandler = this.handlers[action];
|
||||
if (!theHandler) {
|
||||
this.sendResult(action, message_id, 'action没找到');
|
||||
return
|
||||
}
|
||||
try {
|
||||
if (!result["param"]) {
|
||||
theHandler(function (response) {
|
||||
_this.sendResult(action, message_id, response);
|
||||
})
|
||||
return
|
||||
}
|
||||
var param = result["param"]
|
||||
try {
|
||||
param = JSON.parse(param)
|
||||
} catch (e) {
|
||||
// Fix: JSRPC may send param without outer braces
|
||||
try {
|
||||
param = JSON.parse('{' + param + '}')
|
||||
} catch (e2) {
|
||||
param = { value: param }
|
||||
}
|
||||
}
|
||||
theHandler(function (response) {
|
||||
_this.sendResult(action, message_id, response);
|
||||
}, param)
|
||||
} catch (e) {
|
||||
console.log("error: " + e);
|
||||
_this.sendResult(action, message_id, e);
|
||||
}
|
||||
}
|
||||
Hlclient.prototype.sendResult = function (action, message_id, e) {
|
||||
if (typeof e === 'object' && e !== null) {
|
||||
try {
|
||||
e = JSON.stringify(e)
|
||||
} catch (v) {
|
||||
console.log(v)//不是json无需操作
|
||||
}
|
||||
}
|
||||
this.send(JSON.stringify({"action": action, "message_id": message_id, "response_data": e}));
|
||||
}
|
||||
|
||||
// Explicitly publish the constructor. DevTools evaluate_script may execute
|
||||
// this file in an isolated lexical scope; the generated JSRPC stub must still
|
||||
// be able to construct the client in a later evaluation.
|
||||
if (typeof window !== 'undefined') window.Hlclient = Hlclient;
|
||||
Reference in New Issue
Block a user