var sers = { version: "1.0" }; !function (vit) { !function () { vit.stringToBytes = function (e) { var t, n, r = new Array; t = e.length; for (var i = 0; i < t; i++)n = e.charCodeAt(i), n >= 65536 && n <= 1114111 ? (r.push(n >> 18 & 7 | 240), r.push(n >> 12 & 63 | 128), r.push(n >> 6 & 63 | 128), r.push(63 & n | 128)) : n >= 2048 && n <= 65535 ? (r.push(n >> 12 & 15 | 224), r.push(n >> 6 & 63 | 128), r.push(63 & n | 128)) : n >= 128 && n <= 2047 ? (r.push(n >> 6 & 31 | 192), r.push(63 & n | 128)) : r.push(255 & n); return r }, vit.bytesToString = function (e) { if ("string" == typeof e) return e; for (var t = "", n = e, r = 0; r < n.length; r++) { var i = n[r].toString(2), o = i.match(/^1+?(?=0)/); if (o && 8 == i.length) { for (var s = o[0].length, a = n[r].toString(2).slice(7 - s), c = 1; c < s; c++)a += n[c + r].toString(2).slice(2); t += String.fromCharCode(parseInt(a, 2)), r += s - 1 } else t += String.fromCharCode(n[r]) } return t }, vit.bytesToObject = function (bytes) { return eval("(" + vit.bytesToString(bytes) + ")") }, vit.objectSerializeToString = function (e) { if (null == e || void 0 === e) return null; var t = e; return "string" != typeof t && (t = JSON.stringify(t)), t }, vit.objectSerializeToBytes = function (e) { var t = vit.objectSerializeToString(e); return vit.stringToBytes(t) }, vit.arrayConcat = function (e, t) { return e.push.apply(e, t), e }, vit.bytesToArrayBuffer = function (e) { return new Uint8Array(e).buffer }, vit.bytesToDataView = function (e) { return new DataView(vit.bytesToArrayBuffer(e)) }, vit.arrayBufferToBytes = function (e) { return Array.from(new Uint8Array(e)) }, vit.dataViewToBytes = function (e) { return vit.arrayBufferToBytes(e.buffer) }, vit.bytesGetInt32 = function (e, t) { return new DataView(new Uint8Array(e).buffer).getInt32(t || 0, !0) }, vit.int32ToBytes = function (e) { var t = new ArrayBuffer(4), n = new DataView(t); return n.setInt32(0, e, !0), vit.dataViewToBytes(n) }, vit.bytesInsertInt32 = function (e, t, n) { var r = vit.int32ToBytes(n); return e.splice(t, 0, r[0], r[1], r[2], r[3]), e }, vit.guid = function () { function e() { return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) } return e() + e() + e() + e() + e() + e() + e() + e() } }(), function (e) { Date.prototype.pattern = function (e) { var t = { "M+": this.getMonth() + 1, "d+": this.getDate(), "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, "H+": this.getHours(), "m+": this.getMinutes(), "s+": this.getSeconds(), "q+": Math.floor((this.getMonth() + 3) / 3), S: this.getMilliseconds() }, n = { 0: "/u65e5", 1: "/u4e00", 2: "/u4e8c", 3: "/u4e09", 4: "/u56db", 5: "/u4e94", 6: "/u516d" }; /(y+)/.test(e) && (e = e.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length))), /(E+)/.test(e) && (e = e.replace(RegExp.$1, (RegExp.$1.length > 1 ? RegExp.$1.length > 2 ? "/u661f/u671f" : "/u5468" : "") + n[this.getDay() + ""])); for (var r in t) new RegExp("(" + r + ")").test(e) && (e = e.replace(RegExp.$1, 1 == RegExp.$1.length ? t[r] : ("00" + t[r]).substr(("" + t[r]).length))); return e }, e.onmessage, e.error = function (t, n) { console.log(t); var r = (new Date).pattern("[mm:ss.S]") + "[error]" + n; console.log(r); try { e.onmessage && e.onmessage(r) } catch (t) { } }, e.info = function (t) { var n = (new Date).pattern("[mm:ss.S]") + "[info]" + t; console.log(n); try { e.onmessage && e.onmessage(n) } catch (e) { } } }(vit.logger = {}) }("undefined" == typeof vit ? vit = {} : vit), function (e) { function t() { this.write = function (t) { vit.arrayConcat(e, t) }; var e = []; this.read = function () { if (!(e.length < 4)) { var t = vit.bytesGetInt32(e, 0); if (!(e.length < t + 4)) { var n = e.slice(4, t + 4); return e = e.slice(t + 4), n } } } } function n() { function e(e, n, r) { switch (e) { case s.app: return void c.event_onGetRequest(r, function (e) { t(n, e) }); case s.heartBeat: return void (vit.bytesToString(r) == a ? t(n, r) : t(n, [0])) } } function t(e, t) { var i = r(e, t); n(o.reply, 0, i) } function n(e, t, n) { n.splice(0, 0, e, t), c.event_onSendFrame(n) } function r(e, t) { return vit.arrayConcat(e, t) } function i(e) { return { reqKey: vit.bytesGetInt32(e, 0), reqKey_bytes: e.slice(0, 8), oriData: e.slice(8) } } var o = { request: 1, reply: 2, message: 3 }, s = { app: 0, heartBeat: 1 }; const a = "Sers.Mq.Socket.v1"; var c = this, u = {}, v = 100; c.event_onSendFrame, c.event_onGetRequest, c.deliveryToOrganize_onGetMessageFrame = function (t) { var n = t[0], r = t.slice(2); switch (n) { case o.reply: var s = i(r), a = s.reqKey, c = s.oriData, v = u[a]; v && (delete u[a], v(c)); break; case o.request: var s = i(r), f = s.reqKey_bytes, l = s.oriData; e(t[1], f, l); break; case o.message: } }, c.sendRequest = function (e, t, i) { var a = v++, c = !1, f = function (e, n) { c || (c = !0, n || delete u[a], t && t(e, n)) }; setTimeout(f, 1e4), u[a] = function (e) { f(e, !0) }; var l = vit.int32ToBytes(a); l.push(0, 0, 0, 0); var g = r(l, e); n(o.request, i || s.app, g) } } var r = vit.logger; e.DeliveryClient = function () { var e = this; e.host = "ws://127.0.0.1:4503", e.event_onGetFrame, e.event_onDisconnected, e.sendFrame = function (e) { vit.bytesInsertInt32(e, 0, e.length); var t = vit.bytesToDataView(e); i.send(t) }; var n = new t, i = null; e.connect = function (t) { i = new WebSocket(e.host), i.binaryType = "arraybuffer", i.onerror = function (t) { e.close() }, i.onclose = function () { e.close() }; var o = !1, s = function (e) { o || (o = !0, t(e)) }; setTimeout(s, 1e4), i.onopen = function (e) { s(!0) }, i.onmessage = function (t) { var i = t.data, o = vit.arrayBufferToBytes(i); n.write(o); for (var s; s = n.read();)try { e.event_onGetFrame(s) } catch (e) { r.error(e) } } }, e.close = function () { if (i) { try { i.close(), i = null } catch (e) { r.error(e) } if (e.onDisconnected) try { e.onDisconnected() } catch (e) { r.error(e) } } } }, e.OrganizeClient = function (t) { var r = this, i = new e.DeliveryClient; r.secretKey = "SersCL", r.setHost = function (e) { i.host = e }, r.setHost(t); var o = new n; !function () { i.event_onGetFrame = function (e) { o.deliveryToOrganize_onGetMessageFrame(e) }, o.event_onGetRequest = function (e, t) { r.event_onGetRequest(e, t) }, o.event_onSendFrame = function (e) { i.sendFrame(e) }, i.event_OnDisconnected = function () { r.event_OnDisconnected.apply(r, arguments) } }(), r.event_onDisconnected = null, r.event_onGetRequest = null, r.sendRequest = function (e, t) { o.sendRequest(e, t) }, r.connect = function (e) { i.connect(function (t) { t || e(!1), r.sendRequest(vit.stringToBytes(r.secretKey), function (t, n) { n || e(!1), "true" != vit.bytesToString(t) && e(!1), e(!0) }) }) }, r.stop = function () { i.close() } } }(sers.CL || (sers.CL = {})), function (sers) { function ApiMessage() { var self = this, rpcContextData_OriData, value_OriData; self.getRpcData = function () { var strRpc = vit.bytesToString(rpcContextData_OriData); return strRpc ? eval("(" + strRpc + ")") : {} }, self.getValueBytes = function () { return value_OriData }, self.getValueString = function () { return vit.bytesToString(value_OriData) }, self.getValueObject = function () { return eval("(" + self.getValueString() + ")") }, self.initAsApiRequestMessage = function (e, t, n) { var r = { route: e, caller: { rid: vit.guid(), callStack: [], source: "Internal" }, http: { method: n || "GET" } }; rpcContextData_OriData = vit.objectSerializeToBytes(r), value_OriData = vit.objectSerializeToBytes(t) }, ApiMessage.package = function (e, t) { return vit.int32ToBytes(e.length).concat(e, vit.int32ToBytes(t.length), t) }, self.package = function () { return ApiMessage.package(rpcContextData_OriData, value_OriData) }, self.unpackage = function (e) { for (var t = [], n = 0; n < e.length;) { var r = vit.bytesGetInt32(e, n), i = e.slice(n + 4, n + 4 + r); n += 4 + r, t.push(i) } rpcContextData_OriData = t[0], value_OriData = t[1] } } var logger = vit.logger; sers.ApiClient = function (e) { this.callApi = function (t, n, r, i) { var o = new ApiMessage; o.initAsApiRequestMessage(t, n, r), e.sendRequest(o.package(), function (e, t) { if (i) if (t) { var n = new ApiMessage; n.unpackage(e); var r = n.getRpcData(), o = n.getValueBytes(); i(!0, o, r) } else i(!1) }) } }, sers.LocalApiService = function () { var e = this, t = {}; e.getApiNodes = function () { var e = []; for (var n in t) e.push({ apiDesc: t[n].apiDesc }); return e }, e.clearApiNodes = function () { t = {} }, e.addApiNode = function (e, n) { var r = e.route + "_" + e.extendConfig.httpMethod; t[r] = { apiDesc: e, Invoke: n } }, e.addSimpleApiNode = function (t, n, r, i) { var o = { route: t, name: r, description: r, extendConfig: { httpMethod: n } }; e.addApiNode(o, i) }, e.callApi = function (e) { var n = new ApiMessage; n.unpackage(e); var r, i = n.getRpcData(), o = n.getValueBytes(), s = i.route, a = i.http.method, c = s + "_" + a, u = t[c], v = {}; if (u && u.Invoke) try { r = u.Invoke(o, i, v) } catch (e) { logger.error(e); var f = { success: !1, error: { errorMessage: e.message, errorDetail: { source: "from JsStation" } } }; r = vit.objectSerializeToBytes(f) } else { var f = { success: !1, error: { errorCode: 404, errorMessage: "接口不存在", errorDetail: { source: "from JsStation" } } }; r = vit.objectSerializeToBytes(f) } return ApiMessage.package(vit.objectSerializeToBytes(v), r) } }, sers.ServiceStation = function () { var e = this; !function () { e.localApiService = new sers.LocalApiService }(), function () { e.org = new sers.CL.OrganizeClient("ws://127.0.0.1:4503"), e.org.event_onDisconnected = function () { logger.info("[sers.CL]org.event_onDisconnected") }, e.org.event_onGetRequest = function (t, n) { n(e.localApiService.callApi(t)) } }(), function () { e.apiClient = new sers.ApiClient(e.org) }(), e.stop = function () { logger.info("[sers.ServiceStation]try stop..."), e.org.stop(), logger.info("[sers.ServiceStation] stoped.") }, e.start = function (t) { logger.info("[sers.CL]try connect..."), e.org.connect(function (n) { if (!n) return logger.info("[sers.CL]org cannot connect to server!"), void (t && t(!1)); logger.info("[ServiceStation] regist serviceStation to ServiceCenter..."); var r = { serviceStationName: "", serviceStationKey: "", stationVersion: "", info: {} }, i = { deviceKey: "JsStation" }, o = e.localApiService.getApiNodes(), s = { serviceStationInfo: r, deviceInfo: i, apiNodes: o }; e.apiClient.callApi("/_sys_/serviceStation/regist", s, "POST", function (e, n, r) { if (!e) return logger.info("[ServiceStation] regist - failed"), void (t && t(!1)); vit.bytesToObject(n).success || (logger.info("[ServiceStation] regist - failed. reply:" + vit.bytesToString(replyData)), t && t(!1)), logger.info("[ServiceStation] regist - succeed"), t && t(!0) }) }) } } }(sers);