123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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) {
- }
- 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}));
- }
|