| 12
 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
 
 | 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)
 }
 }
 this.send(JSON.stringify({"action": action, "message_id": message_id, "response_data": e}));
 }
 
 var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=mt");
 
 |