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) { thrownewError('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 = newWebSocket(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') { thrownewError("an func_name must be string"); } if (typeof func !== 'function') { thrownewError("must be function"); } console.log("register func_name: " + func_name); this.handlers[func_name] = func; returntrue } 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) { } 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})); }
在这里插入hook代码
1 2 3 4
var demo = newHlclient("ws://127.0.0.1:12080/ws?group=test"); demo.regAction("encryptest", function (resolve,param) { resolve(encrypt.encrypt(param)); })
var demo = newHlclient("ws://127.0.0.1:12080/ws?group=meituan"); demo.regAction("encryptest", function (resolve,param) { resolve(window.encryptest(param)); })
var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=encrypt"); demo.regAction("encryptest", function (resolve,param) { resolve(window.encryptest(param)); })