X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src%2Fapp-framework-binder.git;a=blobdiff_plain;f=test%2Fmonitoring%2FAFB.js;h=e74fbe95d993415caf61e71ffa636c450843cd72;hp=db03d9e86625d325c11644e8d40449f0da6bb3cd;hb=65353dce81a629e042800bb7b86fcd869a76727e;hpb=0f1a3e89464a77d398ce89bf25abd7ea660c4b34 diff --git a/test/monitoring/AFB.js b/test/monitoring/AFB.js index db03d9e8..e74fbe95 100644 --- a/test/monitoring/AFB.js +++ b/test/monitoring/AFB.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 "IoT.bzh" + * Copyright (C) 2015-2020 "IoT.bzh" * Author: José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,7 +21,10 @@ if (typeof base != "object") var initial = { base: base.base || "api", - token: base.token || "hello", + token: initialtoken || base.token + || URLSearchParams(window.location.search).get('access_token') + || URLSearchParams(window.location.search).get('token') + || "HELLO", host: base.host || window.location.host, url: base.url || undefined }; @@ -66,13 +69,14 @@ var AFB_websocket; var PROTO1 = "x-afb-ws-json1"; - AFB_websocket = function(onopen, onabort) { - var u = urlws; + AFB_websocket = function(on_open, on_abort) { + var u = urlws, p = '?'; if (AFB_context.token) { u = u + '?x-afb-token=' + AFB_context.token; - if (AFB_context.uuid) - u = u + '&x-afb-uuid=' + AFB_context.uuid; + p = '&'; } + if (AFB_context.uuid) + u = u + p + 'x-afb-uuid=' + AFB_context.uuid; this.ws = new WebSocket(u, [ PROTO1 ]); this.url = u; this.pendings = {}; @@ -82,8 +86,8 @@ var AFB_websocket; this.ws.onerror = onerror.bind(this); this.ws.onclose = onclose.bind(this); this.ws.onmessage = onmessage.bind(this); - this.onopen = onopen; - this.onabort = onabort; + this.onopen = on_open; + this.onabort = on_abort; } function onerror(event) { @@ -91,7 +95,7 @@ var AFB_websocket; if (f) { delete this.onopen; delete this.onabort; - f && f(this); + f(this); } this.onerror && this.onerror(this); } @@ -104,9 +108,15 @@ var AFB_websocket; } function onclose(event) { + var err = { + jtype: 'afb-reply', + request: { + status: 'disconnected', + info: 'server hung up' + } + }; for (var id in this.pendings) { - var ferr = this.pendings[id].onerror; - ferr && ferr(null, this); + try { this.pendings[id][1](err); } catch (x) {/*NOTHING*/} } this.pendings = {}; this.onclose && this.onclose(); @@ -115,24 +125,23 @@ var AFB_websocket; function fire(awaitens, name, data) { var a = awaitens[name]; if (a) - a.forEach(function(handler){handler(data);}); + a.forEach(function(handler){handler(data, name);}); var i = name.indexOf("/"); if (i >= 0) { a = awaitens[name.substring(0,i)]; if (a) - a.forEach(function(handler){handler(data);}); + a.forEach(function(handler){handler(data, name);}); } a = awaitens["*"]; if (a) - a.forEach(function(handler){handler(data);}); + a.forEach(function(handler){handler(data, name);}); } function reply(pendings, id, ans, offset) { if (id in pendings) { var p = pendings[id]; delete pendings[id]; - var f = p[offset]; - f(ans); + try { p[offset](ans); } catch (x) {/*TODO?*/} } } @@ -145,14 +154,14 @@ var AFB_websocket; switch (code) { case RETOK: reply(this.pendings, id, ans, 0); - break; + break; case RETERR: reply(this.pendings, id, ans, 1); - break; + break; case EVENT: default: fire(this.awaitens, id, ans); - break; + break; } } @@ -166,12 +175,18 @@ var AFB_websocket; this.onabort = function(){}; } - function call(method, request) { + function call(method, request, callid) { return new Promise((function(resolve, reject){ var id, arr; - do { - id = String(this.counter = 4095 & (this.counter + 1)); - } while (id in this.pendings); + if (callid) { + id = String(callid); + if (id in this.pendings) + throw new Error("pending callid("+id+") exists"); + } else { + do { + id = String(this.counter = 4095 & (this.counter + 1)); + } while (id in this.pendings); + } this.pendings[id] = [ resolve, reject ]; arr = [CALL, id, method, request ]; if (AFB_context.token) arr.push(AFB_context.token);