unetjs 3.2.2 → 3.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/unet.cjs +9 -7
- package/dist/esm/unet.js +9 -7
- package/dist/unetjs.js +8 -6
- package/dist/unetjs.js.map +1 -1
- package/dist/unetjs.min.js +1 -1
- package/dist/unetjs.min.js.map +1 -1
- package/package.json +2 -2
package/dist/unetjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unetjs.js","sources":["../node_modules/fjage/dist/esm/fjage.js","../src/unetutils.js","../src/unetsocket.js"],"sourcesContent":["/* fjage.js v1.13.7 */\n\nconst isBrowser =\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\nconst isNode =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nconst isWebWorker =\n typeof self === \"object\" &&\n self.constructor &&\n self.constructor.name === \"DedicatedWorkerGlobalScope\";\n\n/**\n * @see https://github.com/jsdom/jsdom/releases/tag/12.0.0\n * @see https://github.com/jsdom/jsdom/issues/1537\n */\nconst isJsDom =\n (typeof window !== \"undefined\" && window.name === \"nodejs\") ||\n (typeof navigator !== \"undefined\" &&\n (navigator.userAgent.includes(\"Node.js\") ||\n navigator.userAgent.includes(\"jsdom\")));\n\ntypeof Deno !== \"undefined\" && typeof Deno.core !== \"undefined\";\n\nconst SOCKET_OPEN = 'open';\nconst SOCKET_OPENING = 'opening';\nconst DEFAULT_RECONNECT_TIME$1 = 5000; // ms, delay between retries to connect to the server.\n\nvar createConnection;\n\n/**\n * @class\n * @ignore\n */\nclass TCPConnector {\n\n /**\n * Create an TCPConnector to connect to a fjage master over TCP\n * @param {Object} opts\n * @param {string} [opts.hostname='localhost'] - hostname/ip address of the master container to connect to\n * @param {number} [opts.port=1100] - port number of the master container to connect to\n * @param {boolean} [opts.keepAlive=true] - try to reconnect if the connection is lost\n * @param {boolean} [opts.debug=false] - debug info to be logged to console?\n * @param {number} [opts.reconnectTime=5000] - time before reconnection is attempted after an error\n */\n constructor(opts = {}) {\n let host = opts.hostname || 'localhost';\n let port = opts.port || 1100;\n this._keepAlive = opts.keepAlive;\n this._reconnectTime = opts.reconnectTime || DEFAULT_RECONNECT_TIME$1;\n this.url = new URL('tcp://localhost');\n this.url.hostname = host;\n this.url.port = port.toString();\n this._buf = '';\n this._firstConn = true; // if the Gateway has managed to connect to a server before\n this._firstReConn = true; // if the Gateway has attempted to reconnect to a server before\n this.pendingOnOpen = []; // list of callbacks make as soon as gateway is open\n this.connListeners = []; // external listeners wanting to listen connection events\n this.debug = false;\n this._sockInit(host, port);\n }\n\n\n _sendConnEvent(val) {\n this.connListeners.forEach(l => {\n l && {}.toString.call(l) === '[object Function]' && l(val);\n });\n }\n\n _sockInit(host, port){\n if (!createConnection){\n try {\n // @ts-ignore\n import('net').then(module => {\n createConnection = module.createConnection;\n this._sockSetup(host, port);\n });\n }catch(error){\n if(this.debug) console.log('Unable to import net module');\n }\n }else {\n this._sockSetup(host, port);\n }\n }\n\n _sockSetup(host, port){\n if(!createConnection) return;\n try{\n this.sock = createConnection({ 'host': host, 'port': port });\n this.sock.setEncoding('utf8');\n this.sock.on('connect', this._onSockOpen.bind(this));\n this.sock.on('error', this._sockReconnect.bind(this));\n this.sock.on('close', () => {this._sendConnEvent(false);});\n this.sock.send = data => {this.sock.write(data);};\n } catch (error) {\n if(this.debug) console.log('Connection failed to ', this.sock.host + ':' + this.sock.port);\n return;\n }\n }\n\n _sockReconnect(){\n if (this._firstConn || !this._keepAlive || this.sock.readyState == SOCKET_OPENING || this.sock.readyState == SOCKET_OPEN) return;\n if (this._firstReConn) this._sendConnEvent(false);\n this._firstReConn = false;\n setTimeout(() => {\n this.pendingOnOpen = [];\n this._sockSetup(this.url.hostname, this.url.port);\n }, this._reconnectTime);\n }\n\n _onSockOpen() {\n this._sendConnEvent(true);\n this._firstConn = false;\n this.sock.on('close', this._sockReconnect.bind(this));\n this.sock.on('data', this._processSockData.bind(this));\n this.pendingOnOpen.forEach(cb => cb());\n this.pendingOnOpen.length = 0;\n this._buf = '';\n }\n\n _processSockData(s){\n this._buf += s;\n var lines = this._buf.split('\\n');\n lines.forEach((l, idx) => {\n if (idx < lines.length-1){\n if (l && this._onSockRx) this._onSockRx.call(this,l);\n } else {\n this._buf = l;\n }\n });\n }\n\n toString(){\n let s = '';\n s += 'TCPConnector [' + this.sock ? this.sock.remoteAddress.toString() + ':' + this.sock.remotePort.toString() : '' + ']';\n return s;\n }\n\n /**\n * Write a string to the connector\n * @param {string} s - string to be written out of the connector to the master\n * @return {boolean} - true if connect was able to write or queue the string to the underlying socket\n */\n write(s){\n if (!this.sock || this.sock.readyState == SOCKET_OPENING){\n this.pendingOnOpen.push(() => {\n this.sock.send(s+'\\n');\n });\n return true;\n } else if (this.sock.readyState == SOCKET_OPEN) {\n this.sock.send(s+'\\n');\n return true;\n }\n return false;\n }\n\n /**\n * @callback TCPConnectorReadCallback\n * @ignore\n * @param {string} s - incoming message string\n */\n\n /**\n * Set a callback for receiving incoming strings from the connector\n * @param {TCPConnectorReadCallback} cb - callback that is called when the connector gets a string\n */\n setReadCallback(cb){\n if (cb && {}.toString.call(cb) === '[object Function]') this._onSockRx = cb;\n }\n\n /**\n * Add listener for connection events\n * @param {function} listener - a listener callback that is called when the connection is opened/closed\n */\n addConnectionListener(listener){\n this.connListeners.push(listener);\n }\n\n /**\n * Remove listener for connection events\n * @param {function} listener - remove the listener for connection\n * @return {boolean} - true if the listner was removed successfully\n */\n removeConnectionListener(listener) {\n let ndx = this.connListeners.indexOf(listener);\n if (ndx >= 0) {\n this.connListeners.splice(ndx, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Close the connector\n */\n close(){\n if (!this.sock) return;\n if (this.sock.readyState == SOCKET_OPENING) {\n this.pendingOnOpen.push(() => {\n this.sock.send('{\"alive\": false}\\n');\n this.sock.removeAllListeners('connect');\n this.sock.removeAllListeners('error');\n this.sock.removeAllListeners('close');\n this.sock.destroy();\n });\n } else if (this.sock.readyState == SOCKET_OPEN) {\n this.sock.send('{\"alive\": false}\\n');\n this.sock.removeAllListeners('connect');\n this.sock.removeAllListeners('error');\n this.sock.removeAllListeners('close');\n this.sock.destroy();\n }\n }\n}\n\nconst DEFAULT_RECONNECT_TIME = 5000; // ms, delay between retries to connect to the server.\n\n/**\n * @class\n * @ignore\n */\nclass WSConnector {\n\n /**\n * Create an WSConnector to connect to a fjage master over WebSockets\n * @param {Object} opts\n * @param {string} [opts.hostname='localhost'] - hostname/ip address of the master container to connect to\n * @param {number} [opts.port=80] - port number of the master container to connect to\n * @param {string} [opts.pathname=\"/\"] - path of the master container to connect to\n * @param {boolean} [opts.keepAlive=true] - try to reconnect if the connection is lost\n * @param {boolean} [opts.debug=false] - debug info to be logged to console?\n * @param {number} [opts.reconnectTime=5000] - time before reconnection is attempted after an error\n */\n constructor(opts = {}) {\n let host = opts.hostname || 'localhost';\n let port = opts.port || 80;\n this.url = new URL('ws://localhost');\n this.url.hostname = host;\n this.url.port = port.toString();\n this.url.pathname = opts.pathname || '/';\n this._keepAlive = opts.keepAlive;\n this._reconnectTime = opts.reconnectTime || DEFAULT_RECONNECT_TIME;\n this.debug = opts.debug || false; // debug info to be logged to console?\n this._firstConn = true; // if the Gateway has managed to connect to a server before\n this._firstReConn = true; // if the Gateway has attempted to reconnect to a server before\n this.pendingOnOpen = []; // list of callbacks make as soon as gateway is open\n this.connListeners = []; // external listeners wanting to listen connection events\n this._websockSetup(this.url);\n }\n\n _sendConnEvent(val) {\n this.connListeners.forEach(l => {\n l && {}.toString.call(l) === '[object Function]' && l(val);\n });\n }\n\n _websockSetup(url){\n try {\n this.sock = new WebSocket(url);\n this.sock.onerror = this._websockReconnect.bind(this);\n this.sock.onopen = this._onWebsockOpen.bind(this);\n this.sock.onclose = () => {this._sendConnEvent(false);};\n } catch (error) {\n if(this.debug) console.log('Connection failed to ', url);\n return;\n }\n }\n\n _websockReconnect(){\n if (this._firstConn || !this._keepAlive || this.sock.readyState == this.sock.CONNECTING || this.sock.readyState == this.sock.OPEN) return;\n if (this._firstReConn) this._sendConnEvent(false);\n this._firstReConn = false;\n if(this.debug) console.log('Reconnecting to ', this.sock.url);\n setTimeout(() => {\n this.pendingOnOpen = [];\n this._websockSetup(this.sock.url);\n }, this._reconnectTime);\n }\n\n _onWebsockOpen() {\n if(this.debug) console.log('Connected to ', this.sock.url);\n this._sendConnEvent(true);\n this.sock.onclose = this._websockReconnect.bind(this);\n this.sock.onmessage = event => { if (this._onWebsockRx) this._onWebsockRx.call(this,event.data); };\n this._firstConn = false;\n this._firstReConn = true;\n this.pendingOnOpen.forEach(cb => cb());\n this.pendingOnOpen.length = 0;\n }\n\n toString(){\n let s = '';\n s += 'WSConnector [' + this.sock ? this.sock.url.toString() : '' + ']';\n return s;\n }\n\n /**\n * Write a string to the connector\n * @param {string} s - string to be written out of the connector to the master\n */\n write(s){\n if (!this.sock || this.sock.readyState == this.sock.CONNECTING){\n this.pendingOnOpen.push(() => {\n this.sock.send(s+'\\n');\n });\n return true;\n } else if (this.sock.readyState == this.sock.OPEN) {\n this.sock.send(s+'\\n');\n return true;\n }\n return false;\n }\n\n /**\n * @callback WSConnectorReadCallback\n * @ignore\n * @param {string} s - incoming message string\n */\n\n /**\n * Set a callback for receiving incoming strings from the connector\n * @param {WSConnectorReadCallback} cb - callback that is called when the connector gets a string\n * @ignore\n */\n setReadCallback(cb){\n if (cb && {}.toString.call(cb) === '[object Function]') this._onWebsockRx = cb;\n }\n\n /**\n * Add listener for connection events\n * @param {function} listener - a listener callback that is called when the connection is opened/closed\n */\n addConnectionListener(listener){\n this.connListeners.push(listener);\n }\n\n /**\n * Remove listener for connection events\n * @param {function} listener - remove the listener for connection\n * @return {boolean} - true if the listner was removed successfully\n */\n removeConnectionListener(listener) {\n let ndx = this.connListeners.indexOf(listener);\n if (ndx >= 0) {\n this.connListeners.splice(ndx, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Close the connector\n */\n close(){\n if (!this.sock) return;\n if (this.sock.readyState == this.sock.CONNECTING) {\n this.pendingOnOpen.push(() => {\n this.sock.send('{\"alive\": false}\\n');\n this.sock.onclose = null;\n this.sock.close();\n });\n } else if (this.sock.readyState == this.sock.OPEN) {\n this.sock.send('{\"alive\": false}\\n');\n this.sock.onclose = null;\n this.sock.close();\n }\n }\n}\n\n/* global global Buffer */\n\n\nconst DEFAULT_QUEUE_SIZE = 128; // max number of old unreceived messages to store\n\n/**\n * An action represented by a message. The performative actions are a subset of the\n * FIPA ACL recommendations for interagent communication.\n * @enum {string}\n */\nconst Performative = {\n REQUEST: 'REQUEST', // Request an action to be performed\n AGREE: 'AGREE', // Agree to performing the requested action\n REFUSE: 'REFUSE', // Refuse to perform the requested action\n FAILURE: 'FAILURE', // Notification of failure to perform a requested or agreed action\n INFORM: 'INFORM', // Notification of an event\n CONFIRM: 'CONFIRM', // Confirm that the answer to a query is true\n DISCONFIRM: 'DISCONFIRM', // Confirm that the answer to a query is false\n QUERY_IF: 'QUERY_IF', // Query if some statement is true or false\n NOT_UNDERSTOOD: 'NOT_UNDERSTOOD', // Notification that a message was not understood\n CFP: 'CFP', // Call for proposal\n PROPOSE: 'PROPOSE', // Response for CFP\n CANCEL: 'CANCEL' // Cancel pending request\n};\n\n/**\n * An identifier for an agent or a topic.\n * @class\n * @param {string} name - name of the agent\n * @param {boolean} [topic=false] - name of topic\n * @param {Gateway} [owner] - Gateway owner for this AgentID\n */\nclass AgentID {\n\n\n constructor(name, topic=false, owner) {\n this.name = name;\n this.topic = topic;\n this.owner = owner;\n }\n\n /**\n * Gets the name of the agent or topic.\n *\n * @returns {string} - name of agent or topic\n */\n getName() {\n return this.name;\n }\n\n /**\n * Returns true if the agent id represents a topic.\n *\n * @returns {boolean} - true if the agent id represents a topic, false if it represents an agent\n */\n isTopic() {\n return this.topic;\n }\n\n /**\n * Sends a message to the agent represented by this id.\n *\n * @param {Message} msg - message to send\n * @returns {void}\n */\n send(msg) {\n msg.recipient = this.toJSON();\n if (this.owner) this.owner.send(msg);\n else throw new Error('Unowned AgentID cannot send messages');\n }\n\n /**\n * Sends a request to the agent represented by this id and waits for a reponse.\n *\n * @param {Message} msg - request to send\n * @param {number} [timeout=1000] - timeout in milliseconds\n * @returns {Promise<Message>} - response\n */\n async request(msg, timeout=1000) {\n msg.recipient = this.toJSON();\n if (this.owner) return this.owner.request(msg, timeout);\n else throw new Error('Unowned AgentID cannot send messages');\n }\n\n /**\n * Gets a string representation of the agent id.\n *\n * @returns {string} - string representation of the agent id\n */\n toString() {\n return this.toJSON() + ((this.owner && this.owner.connector) ? ` on ${this.owner.connector.url}` : '');\n }\n\n /**\n * Gets a JSON string representation of the agent id.\n *\n * @returns {string} - JSON string representation of the agent id\n */\n toJSON() {\n return (this.topic ? '#' : '') + this.name;\n }\n\n /**\n * Sets parameter(s) on the Agent referred to by this AgentID.\n *\n * @param {(string|string[])} params - parameters name(s) to be set\n * @param {(Object|Object[])} values - parameters value(s) to be set\n * @param {number} [index=-1] - index of parameter(s) to be set\n * @param {number} [timeout=5000] - timeout for the response\n * @returns {Promise<(Object|Object[])>} - a promise which returns the new value(s) of the parameters\n */\n async set (params, values, index=-1, timeout=5000) {\n if (!params) return null;\n let msg = new ParameterReq();\n msg.recipient = this.name;\n if (Array.isArray(params)){\n msg.param = params.shift();\n msg.value = values.shift();\n msg.requests = params.map((p, i) => {\n return {\n 'param': p,\n 'value': values[i]\n };\n });\n // Add back for generating a response\n params.unshift(msg.param);\n } else {\n msg.param = params;\n msg.value = values;\n }\n msg.index = Number.isInteger(index) ? index : -1;\n const rsp = await this.owner.request(msg, timeout);\n var ret = Array.isArray(params) ? new Array(params.length).fill(null) : null;\n if (!rsp || rsp.perf != Performative.INFORM || !rsp.param) {\n if (this.owner._returnNullOnFailedResponse) return ret;\n else throw new Error(`Unable to set ${this.name}.${params} to ${values}`);\n }\n if (Array.isArray(params)) {\n if (!rsp.values) rsp.values = {};\n if (rsp.param) rsp.values[rsp.param] = rsp.value;\n const rvals = Object.keys(rsp.values);\n return params.map( p => {\n let f = rvals.find(rv => rv.endsWith(p));\n return f ? rsp.values[f] : undefined;\n });\n } else {\n return rsp.value;\n }\n }\n\n\n /**\n * Gets parameter(s) on the Agent referred to by this AgentID.\n *\n * @param {(?string|?string[])} params - parameters name(s) to be get, null implies get value of all parameters on the Agent\n * @param {number} [index=-1] - index of parameter(s) to be get\n * @param {number} [timeout=5000] - timeout for the response\n * @returns {Promise<(?Object|?Object[])>} - a promise which returns the value(s) of the parameters\n */\n async get(params, index=-1, timeout=5000) {\n let msg = new ParameterReq();\n msg.recipient = this.name;\n if (params){\n if (Array.isArray(params)) {\n msg.param = params.shift();\n msg.requests = params.map(p => {return {'param': p};});\n // Add back for generating a response\n params.unshift(msg.param);\n }\n else msg.param = params;\n }\n msg.index = Number.isInteger(index) ? index : -1;\n const rsp = await this.owner.request(msg, timeout);\n var ret = Array.isArray(params) ? new Array(params.length).fill(null) : null;\n if (!rsp || rsp.perf != Performative.INFORM || !rsp.param) {\n if (this.owner._returnNullOnFailedResponse) return ret;\n else throw new Error(`Unable to get ${this.name}.${params}`);\n }\n // Request for listing of all parameters.\n if (!params) {\n if (!rsp.values) rsp.values = {};\n if (rsp.param) rsp.values[rsp.param] = rsp.value;\n return rsp.values;\n } else if (Array.isArray(params)) {\n if (!rsp.values) rsp.values = {};\n if (rsp.param) rsp.values[rsp.param] = rsp.value;\n const rvals = Object.keys(rsp.values);\n return params.map(p => {\n let f = rvals.find(rv => rv.endsWith(p));\n return f ? rsp.values[f] : undefined;\n });\n } else {\n return rsp.value;\n }\n }\n}\n\n// protected String msgID = UUID.randomUUID().toString();\n// protected Performative perf;\n// protected AgentID recipient;\n// protected AgentID sender = null;\n// protected String inReplyTo = null;\n// protected Long sentAt = null;\n\n/**\n * Base class for messages transmitted by one agent to another. Creates an empty message.\n * @class\n * @param {string} [msgID] - unique identifier for the message\n * @param {Performative} [perf=Performative.INFORM] - performative\n * @param {AgentID} [recipient] - recipient of the message\n * @param {AgentID} [sender] - sender of the message\n * @param {string} [inReplyTo] - message to which this response corresponds to\n * @param {Message} [inReplyTo] - message to which this response corresponds to\n * @param {number} [sentAt] - time at which the message was sent\n */\nclass Message {\n\n constructor(inReplyTo={msgID:null, sender:null}, perf=Performative.INFORM) {\n this.__clazz__ = 'org.arl.fjage.Message';\n this.msgID = _guid(8);\n this.sender = null;\n this.recipient = inReplyTo.sender;\n this.perf = perf;\n this.inReplyTo = inReplyTo.msgID || null;\n }\n\n /**\n * Gets a string representation of the message.\n *\n * @returns {string} - string representation\n */\n toString() {\n let s = '';\n let suffix = '';\n if (!this.__clazz__) return '';\n let clazz = this.__clazz__;\n clazz = clazz.replace(/^.*\\./, '');\n let perf = this.perf;\n for (var k in this) {\n if (k.startsWith('__')) continue;\n if (k == 'sender') continue;\n if (k == 'recipient') continue;\n if (k == 'msgID') continue;\n if (k == 'perf') continue;\n if (k == 'inReplyTo') continue;\n if (typeof this[k] == 'object') {\n suffix = ' ...';\n continue;\n }\n s += ' ' + k + ':' + this[k];\n }\n s += suffix;\n return clazz+':'+perf+'['+s.replace(/^ /, '')+']';\n }\n\n // convert a message into a JSON string\n // NOTE: we don't do any base64 encoding for TX as\n // we don't know what data type is intended\n /**\n * @private\n *\n * @return {string} - JSON string representation of the message\n */\n _serialize() {\n let clazz = this.__clazz__ || 'org.arl.fjage.Message';\n let data = JSON.stringify(this, (k,v) => {\n if (k.startsWith('__')) return;\n return v;\n });\n return '{ \"clazz\": \"'+clazz+'\", \"data\": '+data+' }';\n }\n\n // inflate a data dictionary into the message\n /** @private */\n _inflate(data) {\n for (var key in data)\n this[key] = data[key];\n }\n\n // convert a dictionary (usually from decoding JSON) into a message\n /**\n * @private\n *\n * @param {(string|Object)} json - JSON string or object to be converted to a message\n * @returns {Message} - message created from the JSON string or object\n * */\n static _deserialize(json) {\n let obj = null;\n if (typeof json == 'string') {\n try {\n obj = JSON.parse(json);\n }catch(e){\n return null;\n }\n } else obj = json;\n let qclazz = obj.clazz;\n let clazz = qclazz.replace(/^.*\\./, '');\n let rv = MessageClass[clazz] ? new MessageClass[clazz] : new Message();\n rv.__clazz__ = qclazz;\n rv._inflate(obj.data);\n return rv;\n }\n}\n\n/**\n * A message class that can convey generic messages represented by key-value pairs.\n * @class\n * @extends Message\n */\nclass GenericMessage extends Message {\n /**\n * Creates an empty generic message.\n */\n constructor() {\n super();\n this.__clazz__ = 'org.arl.fjage.GenericMessage';\n }\n}\n\n/**\n * A gateway for connecting to a fjage master container. The new version of the constructor\n * uses an options object instead of individual parameters. The old version with\n *\n *\n * @class\n * @param {Object} opts\n * @param {string} [opts.hostname=\"localhost\"] - hostname/ip address of the master container to connect to\n * @param {number} [opts.port=1100] - port number of the master container to connect to\n * @param {string} [opts.pathname=\"\"] - path of the master container to connect to (for WebSockets)\n * @param {string} [opts.keepAlive=true] - try to reconnect if the connection is lost\n * @param {number} [opts.queueSize=128] - size of the queue of received messages that haven't been consumed yet\n * @param {number} [opts.timeout=1000] - timeout for fjage level messages in ms\n * @param {boolean} [opts.returnNullOnFailedResponse=true] - return null instead of throwing an error when a parameter is not found\n */\nclass Gateway {\n\n constructor(opts = {}) {\n // Similar to Object.assign but also overwrites `undefined` and empty strings with defaults\n for (var key in GATEWAY_DEFAULTS){\n if (opts[key] == undefined || opts[key] === '') opts[key] = GATEWAY_DEFAULTS[key];\n }\n var url = DEFAULT_URL;\n url.hostname = opts.hostname;\n url.port = opts.port;\n url.pathname = opts.pathname;\n let existing = this._getGWCache(url);\n if (existing) return existing;\n this._timeout = opts.timeout; // timeout for fjage level messages (agentForService etc)\n this._keepAlive = opts.keepAlive; // reconnect if connection gets closed/errored\n this._queueSize = opts.queueSize; // size of queue\n this._returnNullOnFailedResponse = opts.returnNullOnFailedResponse; // null or error\n this.pending = {}; // msgid to callback mapping for pending requests to server\n this.subscriptions = {}; // hashset for all topics that are subscribed\n this.listener = {}; // set of callbacks that want to listen to incoming messages\n this.eventListeners = {}; // external listeners wanting to listen internal events\n this.queue = []; // incoming message queue\n this.connected = false; // connection status\n this.debug = false; // debug info to be logged to console?\n this.aid = new AgentID('gateway-'+_guid(4)); // gateway agent name\n this.connector = this._createConnector(url);\n this._addGWCache(this);\n }\n\n /**\n * Sends an event to all registered listeners of the given type.\n * @private\n * @param {string} type - type of event\n * @param {Object|Message|string} val - value to be sent to the listeners\n */\n _sendEvent(type, val) {\n if (Array.isArray(this.eventListeners[type])) {\n this.eventListeners[type].forEach(l => {\n if (l && {}.toString.call(l) === '[object Function]'){\n try {\n l(val);\n } catch (error) {\n console.warn('Error in event listener : ' + error);\n }\n }\n });\n }\n }\n\n /**\n * @private\n * @param {string} data - stringfied JSON data received from the master container to be processed\n * @returns {void}\n */\n _onMsgRx(data) {\n var obj;\n if (this.debug) console.log('< '+data);\n this._sendEvent('rx', data);\n try {\n obj = JSON.parse(data, _decodeBase64);\n }catch(e){\n return;\n }\n this._sendEvent('rxp', obj);\n if ('id' in obj && obj.id in this.pending) {\n // response to a pending request to master\n this.pending[obj.id](obj);\n delete this.pending[obj.id];\n } else if (obj.action == 'send') {\n // incoming message from master\n // @ts-ignore\n let msg = Message._deserialize(obj.message);\n if (!msg) return;\n this._sendEvent('rxmsg', msg);\n if ((msg.recipient == this.aid.toJSON() )|| this.subscriptions[msg.recipient]) {\n var consumed = false;\n if (Array.isArray(this.eventListeners['message'])){\n for (var i = 0; i < this.eventListeners['message'].length; i++) {\n try {\n if (this.eventListeners['message'][i](msg)) {\n consumed = true;\n break;\n }\n } catch (error) {\n console.warn('Error in message listener : ' + error);\n }\n }\n }\n // iterate over internal callbacks, until one consumes the message\n for (var key in this.listener){\n // callback returns true if it has consumed the message\n try {\n if (this.listener[key](msg)) {\n consumed = true;\n break;\n }\n } catch (error) {\n console.warn('Error in listener : ' + error);\n }\n }\n if(!consumed) {\n if (this.queue.length >= this._queueSize) this.queue.shift();\n this.queue.push(msg);\n }\n }\n } else {\n // respond to standard requests that every container must\n let rsp = { id: obj.id, inResponseTo: obj.action };\n switch (obj.action) {\n case 'agents':\n rsp.agentIDs = [this.aid.getName()];\n break;\n case 'containsAgent':\n rsp.answer = (obj.agentID == this.aid.getName());\n break;\n case 'services':\n rsp.services = [];\n break;\n case 'agentForService':\n rsp.agentID = '';\n break;\n case 'agentsForService':\n rsp.agentIDs = [];\n break;\n default:\n rsp = undefined;\n }\n if (rsp) this._msgTx(rsp);\n }\n }\n\n /**\n * Sends a message out to the master container.\n * @private\n * @param {string|Object} s - JSON object (either stringified or not) to be sent to the master container\n * @returns {boolean} - true if the message was sent successfully\n */\n _msgTx(s) {\n if (typeof s != 'string' && !(s instanceof String)) s = JSON.stringify(s);\n if(this.debug) console.log('> '+s);\n this._sendEvent('tx', s);\n return this.connector.write(s);\n }\n\n /**\n * @private\n * @param {Object} rq - request to be sent to the master container as a JSON object\n * @returns {Promise<Object>} - a promise which returns the response from the master container\n */\n _msgTxRx(rq) {\n rq.id = _guid(8);\n return new Promise(resolve => {\n let timer = setTimeout(() => {\n delete this.pending[rq.id];\n if (this.debug) console.log('Receive Timeout : ' + rq);\n resolve();\n }, 8*this._timeout);\n this.pending[rq.id] = rsp => {\n clearTimeout(timer);\n resolve(rsp);\n };\n if (!this._msgTx.call(this,rq)) {\n clearTimeout(timer);\n delete this.pending[rq.id];\n if (this.debug) console.log('Transmit Timeout : ' + rq);\n resolve();\n }\n });\n }\n\n /**\n * @private\n * @param {URL} url - URL object of the master container to connect to\n * @returns {TCPConnector|WSConnector} - connector object to connect to the master container\n */\n _createConnector(url){\n let conn;\n if (url.protocol.startsWith('ws')){\n conn = new WSConnector({\n 'hostname':url.hostname,\n 'port':parseInt(url.port),\n 'pathname':url.pathname,\n 'keepAlive': this._keepAlive,\n 'debug': this.debug\n });\n }else if (url.protocol.startsWith('tcp')){\n conn = new TCPConnector({\n 'hostname':url.hostname,\n 'port':parseInt(url.port),\n 'keepAlive': this._keepAlive,\n 'debug': this.debug\n });\n } else return null;\n conn.setReadCallback(this._onMsgRx.bind(this));\n conn.addConnectionListener(state => {\n this.connected = !!state;\n if (state == true){\n this.flush();\n this.connector.write('{\"alive\": true}');\n this._update_watch();\n }\n this._sendEvent('conn', state);\n });\n return conn;\n }\n\n /**\n * Checks if the object is a constructor.\n *\n * @private\n * @param {Object} value - an object to be checked if it is a constructor\n * @returns {boolean} - if the object is a constructor\n */\n _isConstructor(value) {\n try {\n new new Proxy(value, {construct() { return {}; }});\n return true;\n } catch (err) {\n return false;\n }\n }\n\n /**\n * Matches a message with a filter.\n * @private\n * @param {string|Object|function} filter - filter to be matched\n * @param {Message} msg - message to be matched to the filter\n * @returns {boolean} - true if the message matches the filter\n */\n _matchMessage(filter, msg){\n if (typeof filter == 'string' || filter instanceof String) {\n return 'inReplyTo' in msg && msg.inReplyTo == filter;\n } else if (Object.prototype.hasOwnProperty.call(filter, 'msgID')) {\n return 'inReplyTo' in msg && msg.inReplyTo == filter.msgID;\n } else if (filter.__proto__.name == 'Message' || filter.__proto__.__proto__.name == 'Message') {\n return filter.__clazz__ == msg.__clazz__;\n } else if (typeof filter == 'function' && !this._isConstructor(filter)) {\n try {\n return filter(msg);\n }catch(e){\n console.warn('Error in filter : ' + e);\n return false;\n }\n } else {\n return msg instanceof filter;\n }\n }\n\n /**\n * Gets the next message from the queue that matches the filter.\n * @private\n * @param {string|Object|function} filter - filter to be matched\n */\n _getMessageFromQueue(filter) {\n if (!this.queue.length) return;\n if (!filter) return this.queue.shift();\n let matchedMsg = this.queue.find( msg => this._matchMessage(filter, msg));\n if (matchedMsg) this.queue.splice(this.queue.indexOf(matchedMsg), 1);\n return matchedMsg;\n }\n\n /**\n * Gets a cached gateway object for the given URL (if it exists).\n * @private\n * @param {URL} url - URL object of the master container to connect to\n * @returns {Gateway|void} - gateway object for the given URL\n */\n _getGWCache(url){\n if (!gObj.fjage || !gObj.fjage.gateways) return null;\n var f = gObj.fjage.gateways.filter(g => g.connector.url.toString() == url.toString());\n if (f.length ) return f[0];\n return null;\n }\n\n /**\n * Adds a gateway object to the cache if it doesn't already exist.\n * @private\n * @param {Gateway} gw - gateway object to be added to the cache\n */\n _addGWCache(gw){\n if (!gObj.fjage || !gObj.fjage.gateways) return;\n gObj.fjage.gateways.push(gw);\n }\n\n /**\n * Removes a gateway object from the cache if it exists.\n * @private\n * @param {Gateway} gw - gateway object to be removed from the cache\n */\n _removeGWCache(gw){\n if (!gObj.fjage || !gObj.fjage.gateways) return;\n var index = gObj.fjage.gateways.indexOf(gw);\n if (index != null) gObj.fjage.gateways.splice(index,1);\n }\n\n /** @private */\n _update_watch() {\n // FIXME : Turning off wantsMessagesFor in fjagejs for now as it breaks multiple browser\n // windows connecting to the same master container.\n //\n // let watch = Object.keys(this.subscriptions);\n // watch.push(this.aid.getName());\n // let rq = { action: 'wantsMessagesFor', agentIDs: watch };\n // this._msgTx(rq);\n }\n\n /**\n * Add an event listener to listen to various events happening on this Gateway\n *\n * @param {string} type - type of event to be listened to\n * @param {function} listener - new callback/function to be called when the event happens\n * @returns {void}\n */\n addEventListener(type, listener) {\n if (!Array.isArray(this.eventListeners[type])){\n this.eventListeners[type] = [];\n }\n this.eventListeners[type].push(listener);\n }\n\n /**\n * Remove an event listener.\n *\n * @param {string} type - type of event the listener was for\n * @param {function} listener - callback/function which was to be called when the event happens\n * @returns {void}\n */\n removeEventListener(type, listener) {\n if (!this.eventListeners[type]) return;\n let ndx = this.eventListeners[type].indexOf(listener);\n if (ndx >= 0) this.eventListeners[type].splice(ndx, 1);\n }\n\n /**\n * Add a new listener to listen to all {Message}s sent to this Gateway\n *\n * @param {function} listener - new callback/function to be called when a {Message} is received\n * @returns {void}\n */\n addMessageListener(listener) {\n this.addEventListener('message',listener);\n }\n\n /**\n * Remove a message listener.\n *\n * @param {function} listener - removes a previously registered listener/callback\n * @returns {void}\n */\n removeMessageListener(listener) {\n this.removeEventListener('message', listener);\n }\n\n /**\n * Add a new listener to get notified when the connection to master is created and terminated.\n *\n * @param {function} listener - new callback/function to be called connection to master is created and terminated\n * @returns {void}\n */\n addConnListener(listener) {\n this.addEventListener('conn', listener);\n }\n\n /**\n * Remove a connection listener.\n *\n * @param {function} listener - removes a previously registered listener/callback\n * @returns {void}\n */\n removeConnListener(listener) {\n this.removeEventListener('conn', listener);\n }\n\n /**\n * Gets the agent ID associated with the gateway.\n *\n * @returns {AgentID} - agent ID\n */\n getAgentID() {\n return this.aid;\n }\n\n /**\n * Get an AgentID for a given agent name.\n *\n * @param {string} name - name of agent\n * @returns {AgentID} - AgentID for the given name\n */\n agent(name) {\n return new AgentID(name, false, this);\n }\n\n /**\n * Returns an object representing the named topic.\n *\n * @param {string|AgentID} topic - name of the topic or AgentID\n * @param {string} [topic2] - name of the topic if the topic param is an AgentID\n * @returns {AgentID} - object representing the topic\n */\n topic(topic, topic2) {\n if (typeof topic == 'string' || topic instanceof String) return new AgentID(topic, true, this);\n if (topic instanceof AgentID) {\n if (topic.isTopic()) return topic;\n return new AgentID(topic.getName()+(topic2 ? '__' + topic2 : '')+'__ntf', true, this);\n }\n }\n\n /**\n * Subscribes the gateway to receive all messages sent to the given topic.\n *\n * @param {AgentID} topic - the topic to subscribe to\n * @returns {boolean} - true if the subscription is successful, false otherwise\n */\n subscribe(topic) {\n if (!topic.isTopic()) topic = new AgentID(topic.getName() + '__ntf', true, this);\n this.subscriptions[topic.toJSON()] = true;\n this._update_watch();\n return true;\n }\n\n /**\n * Unsubscribes the gateway from a given topic.\n *\n * @param {AgentID} topic - the topic to unsubscribe\n * @returns {void}\n */\n unsubscribe(topic) {\n if (!topic.isTopic()) topic = new AgentID(topic.getName() + '__ntf', true, this);\n delete this.subscriptions[topic.toJSON()];\n this._update_watch();\n }\n\n /**\n * Gets a list of all agents in the container.\n * @returns {Promise<AgentID[]>} - a promise which returns an array of all agent ids when resolved\n */\n async agents() {\n let rq = { action: 'agents' };\n let rsp = await this._msgTxRx(rq);\n if (!rsp || !Array.isArray(rsp.agentIDs)) throw new Error('Unable to get agents');\n return rsp.agentIDs.map(aid => new AgentID(aid, false, this));\n }\n\n /**\n * Check if an agent with a given name exists in the container.\n *\n * @param {AgentID|String} agentID - the agent id to check\n * @returns {Promise<boolean>} - a promise which returns true if the agent exists when resolved\n */\n async containsAgent(agentID) {\n let rq = { action: 'containsAgent', agentID: agentID instanceof AgentID ? agentID.getName() : agentID };\n let rsp = await this._msgTxRx(rq);\n if (!rsp) throw new Error('Unable to check if agent exists');\n return !!rsp.answer;\n }\n\n /**\n * Finds an agent that provides a named service. If multiple agents are registered\n * to provide a given service, any of the agents' id may be returned.\n *\n * @param {string} service - the named service of interest\n * @returns {Promise<?AgentID>} - a promise which returns an agent id for an agent that provides the service when resolved\n */\n async agentForService(service) {\n let rq = { action: 'agentForService', service: service };\n let rsp = await this._msgTxRx(rq);\n if (!rsp) {\n if (this._returnNullOnFailedResponse) return null;\n else throw new Error('Unable to get agent for service');\n }\n if (!rsp.agentID) return null;\n return new AgentID(rsp.agentID, false, this);\n }\n\n /**\n * Finds all agents that provides a named service.\n *\n * @param {string} service - the named service of interest\n * @returns {Promise<?AgentID[]>} - a promise which returns an array of all agent ids that provides the service when resolved\n */\n async agentsForService(service) {\n let rq = { action: 'agentsForService', service: service };\n let rsp = await this._msgTxRx(rq);\n let aids = [];\n if (!rsp) {\n if (this._returnNullOnFailedResponse) return aids;\n else throw new Error('Unable to get agents for service');\n }\n if (!Array.isArray(rsp.agentIDs)) return aids;\n for (var i = 0; i < rsp.agentIDs.length; i++)\n aids.push(new AgentID(rsp.agentIDs[i], false, this));\n return aids;\n }\n\n /**\n * Sends a message to the recipient indicated in the message. The recipient\n * may be an agent or a topic.\n *\n * @param {Message} msg - message to be sent\n * @returns {boolean} - if sending was successful\n */\n send(msg) {\n msg.sender = this.aid.toJSON();\n if (msg.perf == '') {\n if (msg.__clazz__.endsWith('Req')) msg.perf = Performative.REQUEST;\n else msg.perf = Performative.INFORM;\n }\n this._sendEvent('txmsg', msg);\n let rq = JSON.stringify({ action: 'send', relay: true, message: '###MSG###' });\n // @ts-ignore\n rq = rq.replace('\"###MSG###\"', msg._serialize());\n return !!this._msgTx(rq);\n }\n\n /**\n * Flush the Gateway queue for all pending messages. This drops all the pending messages.\n * @returns {void}\n *\n */\n flush() {\n this.queue.length = 0;\n }\n\n /**\n * Sends a request and waits for a response. This method returns a {Promise} which resolves when a response\n * is received or if no response is received after the timeout.\n *\n * @param {Message} msg - message to send\n * @param {number} [timeout=1000] - timeout in milliseconds\n * @returns {Promise<Message|void>} - a promise which resolves with the received response message, null on timeout\n */\n async request(msg, timeout=1000) {\n this.send(msg);\n return this.receive(msg, timeout);\n }\n\n /**\n * Returns a response message received by the gateway. This method returns a {Promise} which resolves when\n * a response is received or if no response is received after the timeout.\n *\n * @param {function|Message|typeof Message} filter - original message to which a response is expected, or a MessageClass of the type\n * of message to match, or a closure to use to match against the message\n * @param {number} [timeout=0] - timeout in milliseconds\n * @returns {Promise<Message|void>} - received response message, null on timeout\n */\n async receive(filter, timeout=0) {\n return new Promise(resolve => {\n let msg = this._getMessageFromQueue.call(this,filter);\n if (msg) {\n resolve(msg);\n return;\n }\n if (timeout == 0) {\n if (this.debug) console.log('Receive Timeout : ' + filter);\n resolve();\n return;\n }\n let lid = _guid(8);\n let timer;\n if (timeout > 0){\n timer = setTimeout(() => {\n this.listener[lid] && delete this.listener[lid];\n if (this.debug) console.log('Receive Timeout : ' + filter);\n resolve();\n }, timeout);\n }\n this.listener[lid] = msg => {\n if (!this._matchMessage(filter, msg)) return false;\n if(timer) clearTimeout(timer);\n this.listener[lid] && delete this.listener[lid];\n resolve(msg);\n return true;\n };\n });\n }\n\n /**\n * Closes the gateway. The gateway functionality may not longer be accessed after\n * this method is called.\n * @returns {void}\n */\n close() {\n this.connector.close();\n this._removeGWCache(this);\n }\n\n}\n\n/**\n * Services supported by fjage agents.\n */\nconst Services = {\n SHELL : 'org.arl.fjage.shell.Services.SHELL'\n};\n\n/**\n * Creates a unqualified message class based on a fully qualified name.\n * @param {string} name - fully qualified name of the message class to be created\n * @param {typeof Message} [parent] - class of the parent MessageClass to inherit from\n * @constructs Message\n * @example\n * const ParameterReq = MessageClass('org.arl.fjage.param.ParameterReq');\n * let pReq = new ParameterReq()\n */\nfunction MessageClass(name, parent=Message) {\n let sname = name.replace(/^.*\\./, '');\n if (MessageClass[sname]) return MessageClass[sname];\n let cls = class extends parent {\n /**\n * @param {{ [x: string]: any; }} params\n */\n constructor(params) {\n super();\n this.__clazz__ = name;\n if (params){\n const keys = Object.keys(params);\n for (let k of keys) {\n this[k] = params[k];\n }\n }\n if (name.endsWith('Req')) this.perf = Performative.REQUEST;\n }\n };\n cls.__clazz__ = name;\n MessageClass[sname] = cls;\n return cls;\n}\n\n////// private utilities\n\n// generate random ID with length 4*len characters\n/** @private */\nfunction _guid(len) {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n }\n let s = s4();\n for (var i = 0; i < len-1; i++)\n s += s4();\n return s;\n}\n\n// convert from base 64 to array\n/** @private */\nfunction _b64toArray(base64, dtype, littleEndian=true) {\n let s = gObj.atob(base64);\n let len = s.length;\n let bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++)\n bytes[i] = s.charCodeAt(i);\n let rv = [];\n let view = new DataView(bytes.buffer);\n switch (dtype) {\n case '[B': // byte array\n for (i = 0; i < len; i++)\n rv.push(view.getUint8(i));\n break;\n case '[S': // short array\n for (i = 0; i < len; i+=2)\n rv.push(view.getInt16(i, littleEndian));\n break;\n case '[I': // integer array\n for (i = 0; i < len; i+=4)\n rv.push(view.getInt32(i, littleEndian));\n break;\n case '[J': // long array\n for (i = 0; i < len; i+=8)\n rv.push(view.getBigInt64(i, littleEndian));\n break;\n case '[F': // float array\n for (i = 0; i < len; i+=4)\n rv.push(view.getFloat32(i, littleEndian));\n break;\n case '[D': // double array\n for (i = 0; i < len; i+=8)\n rv.push(view.getFloat64(i, littleEndian));\n break;\n default:\n return;\n }\n return rv;\n}\n\n// base 64 JSON decoder\n/** @private */\nfunction _decodeBase64(k, d) {\n if (d === null) {\n return null;\n }\n if (typeof d == 'object' && 'clazz' in d) {\n let clazz = d.clazz;\n if (clazz.startsWith('[') && clazz.length == 2 && 'data' in d) {\n let x = _b64toArray(d.data, d.clazz);\n if (x) d = x;\n }\n }\n return d;\n}\n\n////// global\n\nconst GATEWAY_DEFAULTS = {};\n\n/** @type {Window & globalThis & Object} */\nlet gObj = {};\nlet DEFAULT_URL;\nif (isBrowser || isWebWorker){\n gObj = window;\n Object.assign(GATEWAY_DEFAULTS, {\n 'hostname': gObj.location.hostname,\n 'port': gObj.location.port,\n 'pathname' : '/ws/',\n 'timeout': 1000,\n 'keepAlive' : true,\n 'queueSize': DEFAULT_QUEUE_SIZE,\n 'returnNullOnFailedResponse': true\n });\n DEFAULT_URL = new URL('ws://localhost');\n // Enable caching of Gateways\n if (typeof gObj.fjage === 'undefined') gObj.fjage = {};\n if (typeof gObj.fjage.gateways == 'undefined') gObj.fjage.gateways = [];\n} else if (isJsDom || isNode){\n gObj = global;\n Object.assign(GATEWAY_DEFAULTS, {\n 'hostname': 'localhost',\n 'port': '1100',\n 'pathname': '',\n 'timeout': 1000,\n 'keepAlive' : true,\n 'queueSize': DEFAULT_QUEUE_SIZE,\n 'returnNullOnFailedResponse': true\n });\n DEFAULT_URL = new URL('tcp://localhost');\n gObj.atob = a => Buffer.from(a, 'base64').toString('binary');\n}\n\n/**\n * @typedef {Object} ParameterReq.Entry\n * @property {string} param - parameter name\n * @property {Object} value - parameter value\n * @exports ParameterReq.Entry\n */\n\n\n/**\n * A message that requests one or more parameters of an agent.\n * @typedef {Message} ParameterReq\n * @property {string} param - parameters name to be get/set if only a single parameter is to be get/set\n * @property {Object} value - parameters value to be set if only a single parameter is to be set\n * @property {Array<ParameterReq.Entry>} requests - a list of multiple parameters to be get/set\n * @property {number} [index=-1] - index of parameter(s) to be set\n * @exports ParameterReq\n */\nconst ParameterReq = MessageClass('org.arl.fjage.param.ParameterReq');\n\nexport { AgentID, Gateway, GenericMessage, Message, MessageClass, ParameterReq, Performative, Services };\n","import {AgentID, MessageClass, Services, Gateway} from 'fjage';\n\nconst DatagramReq = MessageClass('org.arl.unet.DatagramReq');\nconst DatagramNtf = MessageClass('org.arl.unet.DatagramNtf');\nconst TxFrameReq = MessageClass('org.arl.unet.phy.TxFrameReq', DatagramReq);\nconst RxFrameNtf = MessageClass('org.arl.unet.phy.RxFrameNtf', DatagramNtf);\nconst BasebandSignal = MessageClass('org.arl.unet.bb.BasebandSignal');\n\nlet UnetServices = {\n 'NODE_INFO': 'org.arl.unet.Services.NODE_INFO',\n 'ADDRESS_RESOLUTION': 'org.arl.unet.Services.ADDRESS_RESOLUTION',\n 'DATAGRAM': 'org.arl.unet.Services.DATAGRAM',\n 'PHYSICAL': 'org.arl.unet.Services.PHYSICAL',\n 'RANGING': 'org.arl.unet.Services.RANGING',\n 'BASEBAND': 'org.arl.unet.Services.BASEBAND',\n 'LINK': 'org.arl.unet.Services.LINK',\n 'MAC': 'org.arl.unet.Services.MAC',\n 'ROUTING': 'org.arl.unet.Services.ROUTING',\n 'ROUTE_MAINTENANCE': 'org.arl.unet.Services.ROUTE_MAINTENANCE',\n 'TRANSPORT': 'org.arl.unet.Services.TRANSPORT',\n 'REMOTE': 'org.arl.unet.Services.REMOTE',\n 'STATE_MANAGER': 'org.arl.unet.Services.STATE_MANAGER',\n 'DEVICE_INFO': 'org.arl.unet.Services.DEVICE_INFO',\n 'DOA': 'org.arl.unet.Services.DOA',\n 'SCHEDULER':'org.arl.unet.Services.SCHEDULER'\n};\n\nObject.assign(Services, UnetServices);\n\n/**\n * Well-known protocol number assignments used in UnetStack\n * @typedef {Object.<string, number>} Protocol\n */\nlet Protocol = {\n 'DATA' : 0, // Protocol number for user application data.\n 'RANGING' : 1, // Protocol number for use by ranging agents.\n 'LINK' : 2, // Protocol number for use by link agents.\n 'REMOTE' : 3, // Protocol number for use by remote management agents.\n 'MAC' : 4, // Protocol number for use by MAC protocol agents.\n 'ROUTING' : 5, // Protocol number for use by routing agents.\n 'TRANSPORT' : 6, // Protocol number for use by transport agents.\n 'ROUTE_MAINTENANCE' : 7, // Protocol number for use by route maintenance agents.\n 'LINK2' : 8, // Protocol number for use by secondary link agents.\n 'USER' : 32, // Lowest protocol number allowable for user protocols.\n 'MAX' : 63, // Largest protocol number allowable.\n};\n\n/**\n * Well-known protocol Messages used in UnetStack\n * @typedef {Object.<string, MessageClass>} UnetMessages\n */\nlet UnetMessages = {\n // unet\n 'TestReportNtf' : MessageClass('org.arl.unet.TestReportNtf'),\n 'AbnormalTerminationNtf' : MessageClass('org.arl.unet.AbnormalTerminationNtf'),\n 'CapabilityListRsp' : MessageClass('org.arl.unet.CapabilityListRsp'),\n 'CapabilityReq' : MessageClass('org.arl.unet.CapabilityReq'),\n 'ClearReq' : MessageClass('org.arl.unet.ClearReq'),\n 'DatagramCancelReq' : MessageClass('org.arl.unet.DatagramCancelReq'),\n 'DatagramDeliveryNtf' : MessageClass('org.arl.unet.DatagramDeliveryNtf'),\n 'DatagramFailureNtf' : MessageClass('org.arl.unet.DatagramFailureNtf'),\n 'DatagramNtf' : MessageClass('org.arl.unet.DatagramNtf'),\n 'DatagramProgressNtf' : MessageClass('org.arl.unet.DatagramProgressNtf'),\n 'DatagramReq' : MessageClass('org.arl.unet.DatagramReq'),\n 'ParamChangeNtf' : MessageClass('org.arl.unet.ParamChangeNtf'),\n 'RefuseRsp' : MessageClass('org.arl.unet.RefuseRsp'),\n 'FailureNtf' : MessageClass('org.arl.unet.FailureNtf'),\n\n // net\n 'DatagramTraceReq' : MessageClass('org.arl.unet.net.DatagramTraceReq'),\n 'RouteDiscoveryReq' : MessageClass('org.arl.unet.net.RouteDiscoveryReq'),\n 'RouteTraceReq' : MessageClass('org.arl.unet.net.RouteTraceReq'),\n 'RouteDiscoveryNtf' : MessageClass('org.arl.unet.net.RouteDiscoveryNtf'),\n 'RouteTraceNtf' : MessageClass('org.arl.unet.net.RouteTraceNtf'),\n\n // phy\n 'FecDecodeReq' : MessageClass('org.arl.unet.phy.FecDecodeReq'),\n 'RxSWiG1FrameNtf' : MessageClass('org.arl.unet.phy.RxSWiG1FrameNtf', RxFrameNtf),\n 'TxSWiG1FrameReq' : MessageClass('org.arl.unet.phy.TxSWiG1FrameReq', TxFrameReq),\n 'RxJanusFrameNtf' : MessageClass('org.arl.unet.phy.RxJanusFrameNtf', RxFrameNtf),\n 'TxJanusFrameReq' : MessageClass('org.arl.unet.phy.TxJanusFrameReq', TxFrameReq),\n 'BadFrameNtf' : MessageClass('org.arl.unet.phy.BadFrameNtf'),\n 'BadRangeNtf' : MessageClass('org.arl.unet.phy.BadRangeNtf'),\n 'ClearSyncReq' : MessageClass('org.arl.unet.phy.ClearSyncReq'),\n 'CollisionNtf' : MessageClass('org.arl.unet.phy.CollisionNtf'),\n 'RxFrameNtf' : MessageClass('org.arl.unet.phy.RxFrameNtf', DatagramNtf),\n 'RxFrameStartNtf' : MessageClass('org.arl.unet.phy.RxFrameStartNtf'),\n 'SyncInfoReq' : MessageClass('org.arl.unet.phy.SyncInfoReq'),\n 'SyncInfoRsp' : MessageClass('org.arl.unet.phy.SyncInfoRsp'),\n 'TxFrameNtf' : MessageClass('org.arl.unet.phy.TxFrameNtf'),\n 'TxFrameReq' : MessageClass('org.arl.unet.phy.TxFrameReq', DatagramReq),\n 'TxFrameStartNtf' : MessageClass('org.arl.unet.phy.TxFrameStartNtf'),\n 'TxRawFrameReq' : MessageClass('org.arl.unet.phy.TxRawFrameReq'),\n\n // addr\n 'AddressAllocReq' : MessageClass('org.arl.unet.addr.AddressAllocReq'),\n 'AddressAllocRsp' : MessageClass('org.arl.unet.addr.AddressAllocRsp'),\n 'AddressResolutionReq' : MessageClass('org.arl.unet.addr.AddressResolutionReq'),\n 'AddressResolutionRsp' : MessageClass('org.arl.unet.addr.AddressResolutionRsp'),\n\n // bb\n 'BasebandSignal' : MessageClass('org.arl.unet.bb.BasebandSignal'),\n 'RecordBasebandSignalReq' : MessageClass('org.arl.unet.bb.RecordBasebandSignalReq'),\n 'RxBasebandSignalNtf' : MessageClass('org.arl.unet.bb.RxBasebandSignalNtf', BasebandSignal),\n 'TxBasebandSignalReq' : MessageClass('org.arl.unet.bb.TxBasebandSignalReq', BasebandSignal),\n\n // link\n 'LinkStatusNtf' : MessageClass('org.arl.unet.link.LinkStatusNtf'),\n\n // localization\n 'RangeNtf' : MessageClass('org.arl.unet.localization.RangeNtf'),\n 'RangeReq' : MessageClass('org.arl.unet.localization.RangeReq'),\n 'BeaconReq' : MessageClass('org.arl.unet.localization.BeaconReq'),\n 'RespondReq' : MessageClass('org.arl.unet.localization.RespondReq'),\n 'InterrogationNtf' : MessageClass('org.arl.unet.localization.InterrogationNtf'),\n\n\n // mac\n 'ReservationAcceptReq' : MessageClass('org.arl.unet.mac.ReservationAcceptReq'),\n 'ReservationCancelReq' : MessageClass('org.arl.unet.mac.ReservationCancelReq'),\n 'ReservationReq' : MessageClass('org.arl.unet.mac.ReservationReq'),\n 'ReservationRsp' : MessageClass('org.arl.unet.mac.ReservationRsp'),\n 'ReservationStatusNtf' : MessageClass('org.arl.unet.mac.ReservationStatusNtf'),\n 'RxAckNtf' : MessageClass('org.arl.unet.mac.RxAckNtf'),\n 'TxAckReq' : MessageClass('org.arl.unet.mac.TxAckReq'),\n\n\n // remote\n 'RemoteExecReq' : MessageClass('org.arl.unet.remote.RemoteExecReq'),\n 'RemoteFailureNtf' : MessageClass('org.arl.unet.remote.RemoteFailureNtf'),\n 'RemoteFileGetReq' : MessageClass('org.arl.unet.remote.RemoteFileGetReq'),\n 'RemoteFileNtf' : MessageClass('org.arl.unet.remote.RemoteFileNtf'),\n 'RemoteFilePutReq' : MessageClass('org.arl.unet.remote.RemoteFilePutReq'),\n 'RemoteSuccessNtf' : MessageClass('org.arl.unet.remote.RemoteSuccessNtf'),\n 'RemoteTextNtf' : MessageClass('org.arl.unet.remote.RemoteTextNtf'),\n 'RemoteTextReq' : MessageClass('org.arl.unet.remote.RemoteTextReq'),\n\n // scheduler\n 'AddScheduledSleepReq' : MessageClass('org.arl.unet.scheduler.AddScheduledSleepReq'),\n 'GetSleepScheduleReq' : MessageClass('org.arl.unet.scheduler.GetSleepScheduleReq'),\n 'RemoveScheduledSleepReq' : MessageClass('org.arl.unet.scheduler.RemoveScheduledSleepReq'),\n 'SleepScheduleRsp' : MessageClass('org.arl.unet.scheduler.SleepScheduleRsp'),\n 'WakeFromSleepNtf' : MessageClass('org.arl.unet.scheduler.WakeFromSleepNtf'),\n\n // state\n 'ClearStateReq' : MessageClass('org.arl.unet.state.ClearStateReq'),\n 'SaveStateReq' : MessageClass('org.arl.unet.state.SaveStateReq')\n};\n\n/**\n * Convert coordinates from a local coordinates to GPS coordinate\n * @param {Array} origin - Local coordinate system's origin as `[latitude, longitude]`\n * @param {Number} x - X coordinate of the local coordinate to be converted\n * @param {Number} y - Y coordinate of the local coordinate to be converted\n * @returns {Array} - GPS coordinates (in decimal degrees) as `[latitude, longitude]`\n */\n\nexport function toGps(origin, x, y) {\n let coords = [] ;\n let [xScale,yScale] = _initConv(origin[0]);\n coords[1] = x/xScale + origin[1];\n coords[0] = y/yScale + origin[0];\n return coords;\n}\n\n/**\n * Convert coordinates from a GPS coordinates to local coordinate\n * @param {Array} origin - Local coordinate system's origin as `[latitude, longitude]`\n * @param {Number} lat - Latitude of the GPS coordinate to be converted\n * @param {Number} lon - Longitude of the GPS coordinate to be converted\n * @returns {Array} - GPS coordinates (in decimal degrees) as `[latitude, longitude]`\n */\nexport function toLocal(origin, lat, lon) {\n let pos = [];\n let [xScale,yScale] = _initConv(origin[0]);\n pos[0] = (lon-origin[1]) * xScale;\n pos[1] = (lat-origin[0]) * yScale;\n return pos;\n}\n\nfunction _initConv(lat){\n let rlat = lat * Math.PI/180;\n let yScale = 111132.92 - 559.82*Math.cos(2*rlat) + 1.175*Math.cos(4*rlat) - 0.0023*Math.cos(6*rlat);\n let xScale = 111412.84*Math.cos(rlat) - 93.5*Math.cos(3*rlat) + 0.118*Math.cos(5*rlat);\n return [xScale, yScale];\n}\n\n/**\n * A message which requests the transmission of the datagram from the Unet\n *\n * @typedef {Message} DatagramReq\n * @property {number[]} data - data as an Array of bytes\n * @property {number} from - from/source node address\n * @property {number} to - to/destination node address\n * @property {number} protocol - protocol number to be used to send this Datagram\n * @property {boolean} reliability - true if Datagram should be reliable, false if unreliable\n * @property {number} ttl - time-to-live for the datagram. Time-to-live is advisory, and an agent may choose it ignore it\n */\n\n/**\n * Notification of received datagram message received by the Unet node.\n *\n * @typedef {Message} DatagramNtf\n * @property {number[]} data - data as an Array of bytes\n * @property {number} from - from/source node address\n * @property {number} to - to/destination node address\n * @property {number} protocol - protocol number to be used to send this Datagram\n * @property {number} ttl - time-to-live for the datagram. Time-to-live is advisory, and an agent may choose it ignore it\n */\n\n/**\n * An identifier for an agent or a topic.\n * @external AgentID\n * @see {@link https://org-arl.github.io/fjage/jsdoc/|fjåge.js Documentation}\n */\n\n/**\n * Services supported by fjage agents.\n * @external Services\n * @see {@link https://org-arl.github.io/fjage/jsdoc/|fjåge.js Documentation}\n */\n\n/**\n * An action represented by a message.\n * @external Performative\n * @see {@link https://org-arl.github.io/fjage/jsdoc/|fjåge.js Documentation}\n */\n\n/**\n * Function to creates a unqualified message class based on a fully qualified name.\n * @external MessageClass\n * @see {@link https://org-arl.github.io/fjage/jsdoc/|fjåge.js Documentation}\n */\n\n/**\n * A caching CachingAgentID which caches Agent parameters locally.\n *\n * @class\n * @extends AgentID\n * @param {string | AgentID} name - name of the agent or an AgentID to copy\n * @param {boolean} topic - name of topic\n * @param {Gateway} owner - Gateway owner for this AgentID\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n *\n*/\nclass CachingAgentID extends AgentID {\n\n constructor(name, topic, owner, greedy=true) {\n if (name instanceof AgentID) {\n super(name.getName(), name.topic, name.owner);\n } else {\n super(name, topic, owner);\n }\n this.greedy = greedy;\n this.cache = {};\n this.specialParams = ['name', 'version'];\n }\n\n /**\n * Sets parameter(s) on the Agent referred to by this AgentID, and caches the parameter(s).\n *\n * @param {(string|string[])} params - parameters name(s) to be set\n * @param {(Object|Object[])} values - parameters value(s) to be set\n * @param {number} [index=-1] - index of parameter(s) to be set\n * @param {number} [timeout=5000] - timeout for the response\n * @returns {Promise<(Object|Object[])>} - a promise which returns the new value(s) of the parameters\n */\n async set(params, values, index=-1, timeout=5000) {\n let s = await super.set(params, values, index, timeout);\n this._updateCache(params, s, index);\n return s;\n }\n\n /**\n * Gets parameter(s) on the Agent referred to by this AgentID, getting them from the cache if possible.\n *\n * @param {(string|string[])} params - parameters name(s) to be fetched\n * @param {number} [index=-1] - index of parameter(s) to be fetched\n * @param {number} [timeout=5000] - timeout for the response\n * @param {number} [maxage=5000] - maximum age of the cached result to retreive\n * @returns {Promise<(Object|Object[])>} - a promise which returns the value(s) of the parameters\n */\n async get(params, index=-1, timeout=5000, maxage=5000) {\n if (this._isCached(params, index, maxage)) return this._getCache(params, index);\n if (this.greedy &&\n !(Array.isArray(params) && [...new Set([...params, ...this.specialParams])].length!=0) &&\n !this.specialParams.includes(params)) {\n let rsp = await super.get(null, index, timeout);\n this._updateCache(null, rsp, index);\n if (!rsp) return Array.isArray(params) ? new Array(params.length).fill(null) : null;\n if (!params) return rsp;\n else if (Array.isArray(params)) {\n return params.map(p => {\n let f = Object.keys(rsp).find(rv => this._toNamed(rv) === p);\n return f ? rsp[f] : null;\n });\n } else {\n let f = Object.keys(rsp).find(rv => this._toNamed(rv) === params);\n return f ? rsp[f] : null;\n }\n } else{\n let r = await super.get(params, index, timeout);\n this._updateCache(params, r, index);\n return r;\n }\n }\n\n _updateCache(params, vals, index) {\n if (vals == null || Array.isArray(vals) && vals.every(v => v == null)) return;\n if (params == null) {\n params = Object.keys(vals);\n vals = Object.values(vals);\n } else if (!Array.isArray(params)) params = [params];\n if (!Array.isArray(vals)) vals = [vals];\n params = params.map(this._toNamed);\n if (this.cache[index.toString()] === undefined) this.cache[index.toString()] = {};\n let c = this.cache[index.toString()];\n for (let i = 0; i < params.length; i++) {\n if (c[params[i]] === undefined) c[params[i]] = {};\n c[params[i]].value = vals[i];\n c[params[i]].ctime = Date.now();\n }\n }\n\n _isCached(params, index, maxage) {\n if (maxage <= 0) return false;\n if (params == null) return false;\n let c = this.cache[index.toString()];\n if (!c) {\n return false;\n }\n if (!Array.isArray(params)) params = [params];\n const rv = params.every(p => {\n p = this._toNamed(p);\n return (p in c) && (Date.now() - c[p].ctime <= maxage);\n });\n return rv;\n }\n\n _getCache(params, index) {\n let c = this.cache[index.toString()];\n if (!c) return null;\n if (!Array.isArray(params)){\n if (params in c) return c[params].value;\n return null;\n }else {\n return params.map(p => p in c ? c[p].value : null);\n }\n }\n\n _toNamed(param) {\n const idx = param.lastIndexOf('.');\n if (idx < 0) return param;\n else return param.slice(idx+1);\n }\n\n}\n\n\nclass CachingGateway extends Gateway{\n\n /**\n * Get an AgentID for a given agent name.\n *\n * @param {string} name - name of agent\n * @param {Boolean} [caching=true] - if the AgentID should cache parameters\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n * @returns {AgentID|CachingAgentID} - AgentID for the given name\n */\n agent(name, caching=true, greedy=true) {\n const aid = super.agent(name);\n return caching ? new CachingAgentID(aid, null, null, greedy) : aid;\n }\n\n /**\n * Returns an object representing the named topic.\n *\n * @param {string|AgentID} topic - name of the topic or AgentID\n * @param {string} topic2 - name of the topic if the topic param is an AgentID\n * @param {Boolean} [caching=true] - if the AgentID should cache parameters\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n * @returns {AgentID|CachingAgentID} - object representing the topic\n */\n topic(topic, topic2, caching=true, greedy=true) {\n const aid = super.topic(topic, topic2);\n return caching ? new CachingAgentID(aid, null, null, greedy) : aid;\n }\n\n /**\n * Finds an agent that provides a named service. If multiple agents are registered\n * to provide a given service, any of the agents' id may be returned.\n *\n * @param {string} service - the named service of interest\n * @param {Boolean} [caching=true] - if the AgentID should cache parameters\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n * @returns {Promise<?AgentID|CachingAgentID>} - a promise which returns an agent id for an agent that provides the service when resolved\n */\n async agentForService(service, caching=true, greedy=true) {\n const aid = await super.agentForService(service);\n if (!aid) return aid;\n return caching ? new CachingAgentID(aid, null, null, greedy) : aid;\n }\n\n /**\n * Finds all agents that provides a named service.\n *\n * @param {string} service - the named service of interest\n * @param {Boolean} [caching=true] - if the AgentID should cache parameters\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n * @returns {Promise<?AgentID|CachingAgentID[]>} - a promise which returns an array of all agent ids that provides the service when resolved\n */\n async agentsForService(service, caching=true, greedy=true) {\n const aids = await super.agentsForService(service);\n return caching ? aids.map(a => new CachingAgentID(a, null, null, greedy)) : aids;\n }\n}\n\nexport {AgentID, Services, UnetMessages, Protocol, CachingGateway, CachingAgentID};\n","import {Gateway, Performative} from 'fjage';\nimport {Services, UnetMessages, Protocol} from './unetutils';\n\nconst REQUEST_TIMEOUT = 1000;\n\nconst AddressResolutionReq = UnetMessages.AddressResolutionReq;\nconst DatagramReq = UnetMessages.DatagramReq;\nconst DatagramNtf = UnetMessages.DatagramNtf;\nconst RxFrameNtf = UnetMessages.RxFrameNtf;\n\n/**\n * Creates a new UnetSocket to connect to a running Unet instance. This constructor returns a\n * {@link Promise} instead of the constructed UnetSocket object. Use `await` or `.then()` to get\n * a reference to the UnetSocket object. Based on if this is run in a Browser or Node.js,\n * it will internally connect over WebSockets or TCP respectively.\n *\n *\n * @class UnetSocket\n * @param {string} [hostname] - hostname/ip address of the master container to connect to\n * @param {string} [port] - port number of the master container to connect to\n * @param {string} [path=''] - path of the master container to connect to (for WebSockets)\n * @returns {Promise<UnetSocket>} - Promise which resolves to the UnetSocket object being constructed\n *\n * @example\n * let socket = await new UnetSocket('localhost', 8081, '/ws/');\n */\nexport default class UnetSocket {\n\n constructor(hostname, port, path='') {\n return (async () => {\n this.gw = new Gateway({\n hostname : hostname,\n port : port,\n path : path\n });\n this.localProtocol = -1;\n this.remoteAddress = -1;\n this.remoteProtocol = Protocol.DATA;\n this.timeout = 0;\n this.provider = null;\n const alist = await this.gw.agentsForService(Services.DATAGRAM);\n alist.forEach(a => {this.gw.subscribe(this.gw.topic(a));});\n return this;\n })();\n }\n\n /**\n * Closes the socket. The socket functionality may not longer be accessed after this method is called.\n * @returns {void}\n */\n close() {\n this.gw.close();\n this.gw = null;\n }\n\n /**\n * Checks if a socket is closed.\n * @returns {boolean} - true if closed, false if open\n */\n isClosed() {\n return this.gw == null;\n }\n\n /**\n * Binds a socket to listen to a specific protocol datagrams.\n * Protocol numbers between Protocol.DATA+1 to Protocol.USER-1 are reserved protocols\n * and cannot be bound. Unbound sockets listen to all unreserved\n * @param {Protocol} protocol - protocol number to listen for\n * @returns {boolean} - true on success, false on failure\n */\n bind(protocol) {\n if (protocol == Protocol.DATA || (protocol >= Protocol.USER && protocol <= Protocol.MAX)) {\n this.localProtocol = protocol;\n return true;\n }\n return false;\n }\n\n /**\n * Unbinds a socket so that it listens to all unreserved protocols.\n * Protocol numbers between Protocol.DATA+1 to Protocol.USER-1 are considered reserved.\n * @returns {void}\n */\n unbind() { this.localProtocol = -1;}\n\n /**\n * Checks if a socket is bound.\n * @returns {boolean} - true if bound to a protocol, false if unbound\n */\n isBound() { return this.localProtocol >= 0;}\n\n /**\n * Sets the default destination address and destination protocol number for datagrams sent\n * using this socket. The defaults can be overridden for specific send() calls.\n * The default protcol number when a socket is opened is Protcol.DATA.\n * The default node address is undefined.\n * Protocol numbers between Protocol.DATA+1 to Protocol.USER-1 are considered reserved,\n * and cannot be used for sending datagrams using the socket.\n *\n * @param {number} to - default destination node address\n * @param {Protocol} protocol - default protocol number\n * @returns {boolean} - true on success, false on failure\n */\n connect(to, protocol) {\n if (to >= 0 && (protocol == Protocol.DATA || (protocol >= Protocol.USER && protocol <= Protocol.MAX))) {\n this.remoteAddress = to;\n this.remoteProtocol = protocol;\n return true;\n }\n return false;\n }\n\n /**\n * Resets the default destination address to undefined, and the default protocol number\n * to Protocol.DATA.\n * @returns {void}\n */\n disconnect() {\n this.remoteAddress = -1;\n this.remoteProtocol = 0;\n }\n\n /**\n * Checks if a socket is connected, i.e., has a default destination address and protocol number.\n * @returns {boolean} - true if connected, false otherwise\n */\n isConnected() { return this.remoteAddress >= 0; }\n\n /**\n * Gets the local node address of the Unet node connected to.\n * @returns {Promise<int>} - local node address, or -1 on error\n */\n async getLocalAddress() {\n if (this.gw == null) return -1;\n const nodeinfo = await this.gw.agentForService(Services.NODE_INFO);\n if (nodeinfo == null) return -1;\n const addr = await nodeinfo.get('address');\n return addr != null ? addr : -1;\n }\n\n /**\n * Gets the protocol number that the socket is bound to.\n * @returns {number}} - protocol number if socket is bound, -1 otherwise\n */\n getLocalProtocol() { return this.localProtocol; }\n\n /**\n * Gets the default destination node address for a connected socket.\n * @returns {number}} - default destination node address if connected, -1 otherwise\n */\n getRemoteAddress() { return this.remoteAddress; }\n\n /**\n * Gets the default transmission protocol number.\n * @returns {number}} - default protocol number used to transmit a datagram\n */\n getRemoteProtocol() { return this.remoteProtocol; }\n\n /**\n * Sets the timeout for datagram reception. A timeout of 0 means the\n * {@link UnetSocket#receive|receive method} will check any appropriate\n * Datagram has already been received (and is cached) else return immediately.\n *\n * @param {number} ms - timeout in milliseconds\n * @returns {void}\n */\n setTimeout(ms) {\n if (ms < 0) ms = 0;\n this.timeout = ms;\n }\n\n /**\n * Gets the timeout for datagram reception.\n * @returns {number} - timeout in milliseconds\n */\n getTimeout() { return this.timeout; }\n\n /**\n * Transmits a datagram to the specified node address using the specified protocol.\n * Protocol numbers between Protocol.DATA+1 to Protocol.USER-1 are considered reserved,\n * and cannot be used for sending datagrams using the socket.\n * @param {number[]|DatagramReq} data - data to be sent over the socket as an Array of bytes or DatagramReq\n * @param {number} to - destination node address\n * @param {number} protocol - protocol number\n * @returns {Promise<boolean>} - true if the Unet node agreed to send out the Datagram, false otherwise\n */\n async send(data, to=this.remoteAddress, protocol=this.remoteProtocol) {\n if (to < 0 || this.gw == null) return false;\n var req;\n if (Array.isArray(data)){\n req = new DatagramReq();\n req.data = data;\n req.to = to;\n req.protocol = protocol;\n } else if (data instanceof DatagramReq){\n req = data;\n } else {\n return false;\n }\n let p = req.protocol;\n if (p != Protocol.DATA && (p < Protocol.USER || p > Protocol.MAX)) return false;\n if (req.recipient == null) {\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.TRANSPORT);\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.ROUTING);\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.LINK);\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.PHYSICAL);\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.DATAGRAM);\n if (this.provider == null) return false;\n req.recipient = this.provider;\n }\n const rsp = await this.gw.request(req, REQUEST_TIMEOUT);\n return (rsp != null && rsp.perf == Performative.AGREE);\n }\n\n /**\n * Receives a datagram sent to the local node and the bound protocol number. If the socket is unbound,\n * then datagrams with all unreserved protocols are received. Any broadcast datagrams are also received.\n *\n * @returns {Promise<?DatagramNtf>} - datagram received by the socket\n */\n async receive() {\n if (this.gw == null) return null;\n return await this.gw.receive(msg => {\n if (msg.__clazz__ != DatagramNtf.__clazz__ && msg.__clazz__ != RxFrameNtf.__clazz__ ) return false;\n let p = msg.protocol;\n if (p == Protocol.DATA || p >= Protocol.USER) {\n return this.localProtocol < 0 || this.localProtocol == p;\n }\n return false;\n }, this.timeout);\n }\n\n /**\n * Gets a Gateway to provide low-level access to UnetStack.\n * @returns {Gateway} - underlying fjage Gateway supporting this socket\n */\n getGateway() { return this.gw; }\n\n /**\n * Gets an AgentID providing a specified service for low-level access to UnetStack\n * @param {string} svc - the named service of interest\n * @param {Boolean} caching - if the AgentID should cache parameters\n * @returns {Promise<?AgentID>} - a promise which returns an {@link AgentID} that provides the service when resolved\n */\n async agentForService(svc, caching=true) {\n if (this.gw == null) return null;\n return await this.gw.agentForService(svc, caching);\n }\n\n /**\n *\n * @param {string} svc - the named service of interest\n * @param {Boolean} caching - if the AgentID should cache parameters\n * @returns {Promise<AgentID[]>} - a promise which returns an array of {@link AgentID|AgentIDs} that provides the service when resolved\n */\n async agentsForService(svc, caching=true) {\n if (this.gw == null) return null;\n return await this.gw.agentsForService(svc, caching``);\n }\n\n /**\n * Gets a named AgentID for low-level access to UnetStack.\n * @param {string} name - name of agent\n * @param {Boolean} caching - if the AgentID should cache parameters\n * @returns {AgentID} - AgentID for the given name\n */\n agent(name, caching=true) {\n if (this.gw == null) return null;\n return this.gw.agent(name, caching);\n }\n\n /**\n * Resolve node name to node address.\n * @param {string} nodeName - name of the node to resolve\n * @returns {Promise<?number>} - address of the node, or null if unable to resolve\n */\n async host(nodeName) {\n const arp = await this.agentForService(Services.ADDRESS_RESOLUTION);\n if (arp == null) return null;\n const req = new AddressResolutionReq(nodeName);\n req.name = nodeName;\n req.recipient = arp;\n const rsp = await this.gw.request(req, REQUEST_TIMEOUT);\n if (rsp == null || ! Object.prototype.hasOwnProperty.call(rsp, 'address')) return null;\n return rsp.address;\n }\n}"],"names":["DatagramReq","DatagramNtf","RxFrameNtf"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"unetjs.js","sources":["../node_modules/fjage/dist/esm/fjage.js","../src/unetutils.js","../src/unetsocket.js"],"sourcesContent":["/* fjage.js v1.13.9 */\n\nconst isBrowser =\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\nconst isNode =\n typeof process !== \"undefined\" &&\n process.versions != null &&\n process.versions.node != null;\n\nconst isWebWorker =\n typeof self === \"object\" &&\n self.constructor &&\n self.constructor.name === \"DedicatedWorkerGlobalScope\";\n\n/**\n * @see https://github.com/jsdom/jsdom/releases/tag/12.0.0\n * @see https://github.com/jsdom/jsdom/issues/1537\n */\nconst isJsDom =\n (typeof window !== \"undefined\" && window.name === \"nodejs\") ||\n (typeof navigator !== \"undefined\" &&\n (navigator.userAgent.includes(\"Node.js\") ||\n navigator.userAgent.includes(\"jsdom\")));\n\ntypeof Deno !== \"undefined\" && typeof Deno.core !== \"undefined\";\n\nconst SOCKET_OPEN = 'open';\nconst SOCKET_OPENING = 'opening';\nconst DEFAULT_RECONNECT_TIME$1 = 5000; // ms, delay between retries to connect to the server.\n\nvar createConnection;\n\n/**\n * @class\n * @ignore\n */\nclass TCPConnector {\n\n /**\n * Create an TCPConnector to connect to a fjage master over TCP\n * @param {Object} opts\n * @param {string} [opts.hostname='localhost'] - hostname/ip address of the master container to connect to\n * @param {number} [opts.port=1100] - port number of the master container to connect to\n * @param {boolean} [opts.keepAlive=true] - try to reconnect if the connection is lost\n * @param {boolean} [opts.debug=false] - debug info to be logged to console?\n * @param {number} [opts.reconnectTime=5000] - time before reconnection is attempted after an error\n */\n constructor(opts = {}) {\n let host = opts.hostname || 'localhost';\n let port = opts.port || 1100;\n this._keepAlive = opts.keepAlive;\n this._reconnectTime = opts.reconnectTime || DEFAULT_RECONNECT_TIME$1;\n this.url = new URL('tcp://localhost');\n this.url.hostname = host;\n this.url.port = port.toString();\n this._buf = '';\n this._firstConn = true; // if the Gateway has managed to connect to a server before\n this._firstReConn = true; // if the Gateway has attempted to reconnect to a server before\n this.pendingOnOpen = []; // list of callbacks make as soon as gateway is open\n this.connListeners = []; // external listeners wanting to listen connection events\n this.debug = false;\n this._sockInit(host, port);\n }\n\n\n _sendConnEvent(val) {\n this.connListeners.forEach(l => {\n l && {}.toString.call(l) === '[object Function]' && l(val);\n });\n }\n\n _sockInit(host, port){\n if (!createConnection){\n try {\n // @ts-ignore\n import('net').then(module => {\n createConnection = module.createConnection;\n this._sockSetup(host, port);\n });\n }catch(error){\n if(this.debug) console.log('Unable to import net module');\n }\n }else {\n this._sockSetup(host, port);\n }\n }\n\n _sockSetup(host, port){\n if(!createConnection) return;\n try{\n this.sock = createConnection({ 'host': host, 'port': port });\n this.sock.setEncoding('utf8');\n this.sock.on('connect', this._onSockOpen.bind(this));\n this.sock.on('error', this._sockReconnect.bind(this));\n this.sock.on('close', () => {this._sendConnEvent(false);});\n this.sock.send = data => {this.sock.write(data);};\n } catch (error) {\n if(this.debug) console.log('Connection failed to ', this.sock.host + ':' + this.sock.port);\n return;\n }\n }\n\n _sockReconnect(){\n if (this._firstConn || !this._keepAlive || this.sock.readyState == SOCKET_OPENING || this.sock.readyState == SOCKET_OPEN) return;\n if (this._firstReConn) this._sendConnEvent(false);\n this._firstReConn = false;\n setTimeout(() => {\n this.pendingOnOpen = [];\n this._sockSetup(this.url.hostname, this.url.port);\n }, this._reconnectTime);\n }\n\n _onSockOpen() {\n this._sendConnEvent(true);\n this._firstConn = false;\n this.sock.on('close', this._sockReconnect.bind(this));\n this.sock.on('data', this._processSockData.bind(this));\n this.pendingOnOpen.forEach(cb => cb());\n this.pendingOnOpen.length = 0;\n this._buf = '';\n }\n\n _processSockData(s){\n this._buf += s;\n var lines = this._buf.split('\\n');\n lines.forEach((l, idx) => {\n if (idx < lines.length-1){\n if (l && this._onSockRx) this._onSockRx.call(this,l);\n } else {\n this._buf = l;\n }\n });\n }\n\n toString(){\n let s = '';\n s += 'TCPConnector [' + this.sock ? this.sock.remoteAddress.toString() + ':' + this.sock.remotePort.toString() : '' + ']';\n return s;\n }\n\n /**\n * Write a string to the connector\n * @param {string} s - string to be written out of the connector to the master\n * @return {boolean} - true if connect was able to write or queue the string to the underlying socket\n */\n write(s){\n if (!this.sock || this.sock.readyState == SOCKET_OPENING){\n this.pendingOnOpen.push(() => {\n this.sock.send(s+'\\n');\n });\n return true;\n } else if (this.sock.readyState == SOCKET_OPEN) {\n this.sock.send(s+'\\n');\n return true;\n }\n return false;\n }\n\n /**\n * @callback TCPConnectorReadCallback\n * @ignore\n * @param {string} s - incoming message string\n */\n\n /**\n * Set a callback for receiving incoming strings from the connector\n * @param {TCPConnectorReadCallback} cb - callback that is called when the connector gets a string\n */\n setReadCallback(cb){\n if (cb && {}.toString.call(cb) === '[object Function]') this._onSockRx = cb;\n }\n\n /**\n * Add listener for connection events\n * @param {function} listener - a listener callback that is called when the connection is opened/closed\n */\n addConnectionListener(listener){\n this.connListeners.push(listener);\n }\n\n /**\n * Remove listener for connection events\n * @param {function} listener - remove the listener for connection\n * @return {boolean} - true if the listner was removed successfully\n */\n removeConnectionListener(listener) {\n let ndx = this.connListeners.indexOf(listener);\n if (ndx >= 0) {\n this.connListeners.splice(ndx, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Close the connector\n */\n close(){\n if (!this.sock) return;\n if (this.sock.readyState == SOCKET_OPENING) {\n this.pendingOnOpen.push(() => {\n this.sock.send('{\"alive\": false}\\n');\n this.sock.removeAllListeners('connect');\n this.sock.removeAllListeners('error');\n this.sock.removeAllListeners('close');\n this.sock.destroy();\n });\n } else if (this.sock.readyState == SOCKET_OPEN) {\n this.sock.send('{\"alive\": false}\\n');\n this.sock.removeAllListeners('connect');\n this.sock.removeAllListeners('error');\n this.sock.removeAllListeners('close');\n this.sock.destroy();\n }\n }\n}\n\nconst DEFAULT_RECONNECT_TIME = 5000; // ms, delay between retries to connect to the server.\n\n/**\n * @class\n * @ignore\n */\nclass WSConnector {\n\n /**\n * Create an WSConnector to connect to a fjage master over WebSockets\n * @param {Object} opts\n * @param {string} [opts.hostname='localhost'] - hostname/ip address of the master container to connect to\n * @param {number} [opts.port=80] - port number of the master container to connect to\n * @param {string} [opts.pathname=\"/\"] - path of the master container to connect to\n * @param {boolean} [opts.keepAlive=true] - try to reconnect if the connection is lost\n * @param {boolean} [opts.debug=false] - debug info to be logged to console?\n * @param {number} [opts.reconnectTime=5000] - time before reconnection is attempted after an error\n */\n constructor(opts = {}) {\n let host = opts.hostname || 'localhost';\n let port = opts.port || 80;\n this.url = new URL('ws://localhost');\n this.url.hostname = host;\n this.url.port = port.toString();\n this.url.pathname = opts.pathname || '/';\n this._keepAlive = opts.keepAlive;\n this._reconnectTime = opts.reconnectTime || DEFAULT_RECONNECT_TIME;\n this.debug = opts.debug || false; // debug info to be logged to console?\n this._firstConn = true; // if the Gateway has managed to connect to a server before\n this._firstReConn = true; // if the Gateway has attempted to reconnect to a server before\n this.pendingOnOpen = []; // list of callbacks make as soon as gateway is open\n this.connListeners = []; // external listeners wanting to listen connection events\n this._websockSetup(this.url);\n }\n\n _sendConnEvent(val) {\n this.connListeners.forEach(l => {\n l && {}.toString.call(l) === '[object Function]' && l(val);\n });\n }\n\n _websockSetup(url){\n try {\n this.sock = new WebSocket(url);\n this.sock.onerror = this._websockReconnect.bind(this);\n this.sock.onopen = this._onWebsockOpen.bind(this);\n this.sock.onclose = () => {this._sendConnEvent(false);};\n } catch (error) {\n if(this.debug) console.log('Connection failed to ', url);\n return;\n }\n }\n\n _websockReconnect(){\n if (this._firstConn || !this._keepAlive || this.sock.readyState == this.sock.CONNECTING || this.sock.readyState == this.sock.OPEN) return;\n if (this._firstReConn) this._sendConnEvent(false);\n this._firstReConn = false;\n if(this.debug) console.log('Reconnecting to ', this.sock.url);\n setTimeout(() => {\n this.pendingOnOpen = [];\n this._websockSetup(this.sock.url);\n }, this._reconnectTime);\n }\n\n _onWebsockOpen() {\n if(this.debug) console.log('Connected to ', this.sock.url);\n this._sendConnEvent(true);\n this.sock.onclose = this._websockReconnect.bind(this);\n this.sock.onmessage = event => { if (this._onWebsockRx) this._onWebsockRx.call(this,event.data); };\n this._firstConn = false;\n this._firstReConn = true;\n this.pendingOnOpen.forEach(cb => cb());\n this.pendingOnOpen.length = 0;\n }\n\n toString(){\n let s = '';\n s += 'WSConnector [' + this.sock ? this.sock.url.toString() : '' + ']';\n return s;\n }\n\n /**\n * Write a string to the connector\n * @param {string} s - string to be written out of the connector to the master\n */\n write(s){\n if (!this.sock || this.sock.readyState == this.sock.CONNECTING){\n this.pendingOnOpen.push(() => {\n this.sock.send(s+'\\n');\n });\n return true;\n } else if (this.sock.readyState == this.sock.OPEN) {\n this.sock.send(s+'\\n');\n return true;\n }\n return false;\n }\n\n /**\n * @callback WSConnectorReadCallback\n * @ignore\n * @param {string} s - incoming message string\n */\n\n /**\n * Set a callback for receiving incoming strings from the connector\n * @param {WSConnectorReadCallback} cb - callback that is called when the connector gets a string\n * @ignore\n */\n setReadCallback(cb){\n if (cb && {}.toString.call(cb) === '[object Function]') this._onWebsockRx = cb;\n }\n\n /**\n * Add listener for connection events\n * @param {function} listener - a listener callback that is called when the connection is opened/closed\n */\n addConnectionListener(listener){\n this.connListeners.push(listener);\n }\n\n /**\n * Remove listener for connection events\n * @param {function} listener - remove the listener for connection\n * @return {boolean} - true if the listner was removed successfully\n */\n removeConnectionListener(listener) {\n let ndx = this.connListeners.indexOf(listener);\n if (ndx >= 0) {\n this.connListeners.splice(ndx, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Close the connector\n */\n close(){\n if (!this.sock) return;\n if (this.sock.readyState == this.sock.CONNECTING) {\n this.pendingOnOpen.push(() => {\n this.sock.send('{\"alive\": false}\\n');\n this.sock.onclose = null;\n this.sock.close();\n });\n } else if (this.sock.readyState == this.sock.OPEN) {\n this.sock.send('{\"alive\": false}\\n');\n this.sock.onclose = null;\n this.sock.close();\n }\n }\n}\n\n/* global global Buffer */\n\n\nconst DEFAULT_QUEUE_SIZE = 128; // max number of old unreceived messages to store\n\n/**\n * An action represented by a message. The performative actions are a subset of the\n * FIPA ACL recommendations for interagent communication.\n * @enum {string}\n */\nconst Performative = {\n REQUEST: 'REQUEST', // Request an action to be performed\n AGREE: 'AGREE', // Agree to performing the requested action\n REFUSE: 'REFUSE', // Refuse to perform the requested action\n FAILURE: 'FAILURE', // Notification of failure to perform a requested or agreed action\n INFORM: 'INFORM', // Notification of an event\n CONFIRM: 'CONFIRM', // Confirm that the answer to a query is true\n DISCONFIRM: 'DISCONFIRM', // Confirm that the answer to a query is false\n QUERY_IF: 'QUERY_IF', // Query if some statement is true or false\n NOT_UNDERSTOOD: 'NOT_UNDERSTOOD', // Notification that a message was not understood\n CFP: 'CFP', // Call for proposal\n PROPOSE: 'PROPOSE', // Response for CFP\n CANCEL: 'CANCEL' // Cancel pending request\n};\n\n/**\n * An identifier for an agent or a topic.\n * @class\n * @param {string} name - name of the agent\n * @param {boolean} [topic=false] - name of topic\n * @param {Gateway} [owner] - Gateway owner for this AgentID\n */\nclass AgentID {\n\n\n constructor(name, topic=false, owner) {\n this.name = name;\n this.topic = topic;\n this.owner = owner;\n }\n\n /**\n * Gets the name of the agent or topic.\n *\n * @returns {string} - name of agent or topic\n */\n getName() {\n return this.name;\n }\n\n /**\n * Returns true if the agent id represents a topic.\n *\n * @returns {boolean} - true if the agent id represents a topic, false if it represents an agent\n */\n isTopic() {\n return this.topic;\n }\n\n /**\n * Sends a message to the agent represented by this id.\n *\n * @param {Message} msg - message to send\n * @returns {void}\n */\n send(msg) {\n msg.recipient = this.toJSON();\n if (this.owner) this.owner.send(msg);\n else throw new Error('Unowned AgentID cannot send messages');\n }\n\n /**\n * Sends a request to the agent represented by this id and waits for a reponse.\n *\n * @param {Message} msg - request to send\n * @param {number} [timeout=1000] - timeout in milliseconds\n * @returns {Promise<Message>} - response\n */\n async request(msg, timeout=1000) {\n msg.recipient = this.toJSON();\n if (this.owner) return this.owner.request(msg, timeout);\n else throw new Error('Unowned AgentID cannot send messages');\n }\n\n /**\n * Gets a string representation of the agent id.\n *\n * @returns {string} - string representation of the agent id\n */\n toString() {\n return this.toJSON() + ((this.owner && this.owner.connector) ? ` on ${this.owner.connector.url}` : '');\n }\n\n /**\n * Gets a JSON string representation of the agent id.\n *\n * @returns {string} - JSON string representation of the agent id\n */\n toJSON() {\n return (this.topic ? '#' : '') + this.name;\n }\n\n /**\n * Sets parameter(s) on the Agent referred to by this AgentID.\n *\n * @param {(string|string[])} params - parameters name(s) to be set\n * @param {(Object|Object[])} values - parameters value(s) to be set\n * @param {number} [index=-1] - index of parameter(s) to be set\n * @param {number} [timeout=5000] - timeout for the response\n * @returns {Promise<(Object|Object[])>} - a promise which returns the new value(s) of the parameters\n */\n async set (params, values, index=-1, timeout=5000) {\n if (!params) return null;\n let msg = new ParameterReq();\n msg.recipient = this.name;\n if (Array.isArray(params)){\n msg.param = params.shift();\n msg.value = values.shift();\n msg.requests = params.map((p, i) => {\n return {\n 'param': p,\n 'value': values[i]\n };\n });\n // Add back for generating a response\n params.unshift(msg.param);\n } else {\n msg.param = params;\n msg.value = values;\n }\n msg.index = Number.isInteger(index) ? index : -1;\n const rsp = await this.owner.request(msg, timeout);\n var ret = Array.isArray(params) ? new Array(params.length).fill(null) : null;\n if (!rsp || rsp.perf != Performative.INFORM || !rsp.param) {\n if (this.owner._returnNullOnFailedResponse) return ret;\n else throw new Error(`Unable to set ${this.name}.${params} to ${values}`);\n }\n if (Array.isArray(params)) {\n if (!rsp.values) rsp.values = {};\n if (rsp.param) rsp.values[rsp.param] = rsp.value;\n const rkeys = Object.keys(rsp.values);\n return params.map( p => {\n if (p.includes('.')) p = p.split('.').pop();\n let f = rkeys.find(k => (k.includes('.') ? k.split('.').pop() : k) == p);\n return f ? rsp.values[f] : undefined;\n });\n } else {\n return rsp.value;\n }\n }\n\n\n /**\n * Gets parameter(s) on the Agent referred to by this AgentID.\n *\n * @param {(?string|?string[])} params - parameters name(s) to be get, null implies get value of all parameters on the Agent\n * @param {number} [index=-1] - index of parameter(s) to be get\n * @param {number} [timeout=5000] - timeout for the response\n * @returns {Promise<(?Object|?Object[])>} - a promise which returns the value(s) of the parameters\n */\n async get(params, index=-1, timeout=5000) {\n let msg = new ParameterReq();\n msg.recipient = this.name;\n if (params){\n if (Array.isArray(params)) {\n msg.param = params.shift();\n msg.requests = params.map(p => {return {'param': p};});\n // Add back for generating a response\n params.unshift(msg.param);\n }\n else msg.param = params;\n }\n msg.index = Number.isInteger(index) ? index : -1;\n const rsp = await this.owner.request(msg, timeout);\n var ret = Array.isArray(params) ? new Array(params.length).fill(null) : null;\n if (!rsp || rsp.perf != Performative.INFORM || !rsp.param) {\n if (this.owner._returnNullOnFailedResponse) return ret;\n else throw new Error(`Unable to get ${this.name}.${params}`);\n }\n // Request for listing of all parameters.\n if (!params) {\n if (!rsp.values) rsp.values = {};\n if (rsp.param) rsp.values[rsp.param] = rsp.value;\n return rsp.values;\n } else if (Array.isArray(params)) {\n if (!rsp.values) rsp.values = {};\n if (rsp.param) rsp.values[rsp.param] = rsp.value;\n const rkeys = Object.keys(rsp.values);\n return params.map( p => {\n if (p.includes('.')) p = p.split('.').pop();\n let f = rkeys.find(k => (k.includes('.') ? k.split('.').pop() : k) == p);\n return f ? rsp.values[f] : undefined;\n });\n } else {\n return rsp.value;\n }\n }\n}\n\n// protected String msgID = UUID.randomUUID().toString();\n// protected Performative perf;\n// protected AgentID recipient;\n// protected AgentID sender = null;\n// protected String inReplyTo = null;\n// protected Long sentAt = null;\n\n/**\n * Base class for messages transmitted by one agent to another. Creates an empty message.\n * @class\n * @param {string} [msgID] - unique identifier for the message\n * @param {Performative} [perf=Performative.INFORM] - performative\n * @param {AgentID} [recipient] - recipient of the message\n * @param {AgentID} [sender] - sender of the message\n * @param {string} [inReplyTo] - message to which this response corresponds to\n * @param {Message} [inReplyTo] - message to which this response corresponds to\n * @param {number} [sentAt] - time at which the message was sent\n */\nclass Message {\n\n constructor(inReplyTo={msgID:null, sender:null}, perf=Performative.INFORM) {\n this.__clazz__ = 'org.arl.fjage.Message';\n this.msgID = _guid(8);\n this.sender = null;\n this.recipient = inReplyTo.sender;\n this.perf = perf;\n this.inReplyTo = inReplyTo.msgID || null;\n }\n\n /**\n * Gets a string representation of the message.\n *\n * @returns {string} - string representation\n */\n toString() {\n let s = '';\n let suffix = '';\n if (!this.__clazz__) return '';\n let clazz = this.__clazz__;\n clazz = clazz.replace(/^.*\\./, '');\n let perf = this.perf;\n for (var k in this) {\n if (k.startsWith('__')) continue;\n if (k == 'sender') continue;\n if (k == 'recipient') continue;\n if (k == 'msgID') continue;\n if (k == 'perf') continue;\n if (k == 'inReplyTo') continue;\n if (typeof this[k] == 'object') {\n suffix = ' ...';\n continue;\n }\n s += ' ' + k + ':' + this[k];\n }\n s += suffix;\n return clazz+':'+perf+'['+s.replace(/^ /, '')+']';\n }\n\n // convert a message into a JSON string\n // NOTE: we don't do any base64 encoding for TX as\n // we don't know what data type is intended\n /**\n * @private\n *\n * @return {string} - JSON string representation of the message\n */\n _serialize() {\n let clazz = this.__clazz__ || 'org.arl.fjage.Message';\n let data = JSON.stringify(this, (k,v) => {\n if (k.startsWith('__')) return;\n return v;\n });\n return '{ \"clazz\": \"'+clazz+'\", \"data\": '+data+' }';\n }\n\n // inflate a data dictionary into the message\n /** @private */\n _inflate(data) {\n for (var key in data)\n this[key] = data[key];\n }\n\n // convert a dictionary (usually from decoding JSON) into a message\n /**\n * @private\n *\n * @param {(string|Object)} json - JSON string or object to be converted to a message\n * @returns {Message} - message created from the JSON string or object\n * */\n static _deserialize(json) {\n let obj = null;\n if (typeof json == 'string') {\n try {\n obj = JSON.parse(json);\n }catch(e){\n return null;\n }\n } else obj = json;\n let qclazz = obj.clazz;\n let clazz = qclazz.replace(/^.*\\./, '');\n let rv = MessageClass[clazz] ? new MessageClass[clazz] : new Message();\n rv.__clazz__ = qclazz;\n rv._inflate(obj.data);\n return rv;\n }\n}\n\n/**\n * A message class that can convey generic messages represented by key-value pairs.\n * @class\n * @extends Message\n */\nclass GenericMessage extends Message {\n /**\n * Creates an empty generic message.\n */\n constructor() {\n super();\n this.__clazz__ = 'org.arl.fjage.GenericMessage';\n }\n}\n\n/**\n * A gateway for connecting to a fjage master container. The new version of the constructor\n * uses an options object instead of individual parameters. The old version with\n *\n *\n * @class\n * @param {Object} opts\n * @param {string} [opts.hostname=\"localhost\"] - hostname/ip address of the master container to connect to\n * @param {number} [opts.port=1100] - port number of the master container to connect to\n * @param {string} [opts.pathname=\"\"] - path of the master container to connect to (for WebSockets)\n * @param {string} [opts.keepAlive=true] - try to reconnect if the connection is lost\n * @param {number} [opts.queueSize=128] - size of the queue of received messages that haven't been consumed yet\n * @param {number} [opts.timeout=1000] - timeout for fjage level messages in ms\n * @param {boolean} [opts.returnNullOnFailedResponse=true] - return null instead of throwing an error when a parameter is not found\n */\nclass Gateway {\n\n constructor(opts = {}) {\n // Similar to Object.assign but also overwrites `undefined` and empty strings with defaults\n for (var key in GATEWAY_DEFAULTS){\n if (opts[key] == undefined || opts[key] === '') opts[key] = GATEWAY_DEFAULTS[key];\n }\n var url = DEFAULT_URL;\n url.hostname = opts.hostname;\n url.port = opts.port;\n url.pathname = opts.pathname;\n let existing = this._getGWCache(url);\n if (existing) return existing;\n this._timeout = opts.timeout; // timeout for fjage level messages (agentForService etc)\n this._keepAlive = opts.keepAlive; // reconnect if connection gets closed/errored\n this._queueSize = opts.queueSize; // size of queue\n this._returnNullOnFailedResponse = opts.returnNullOnFailedResponse; // null or error\n this.pending = {}; // msgid to callback mapping for pending requests to server\n this.subscriptions = {}; // hashset for all topics that are subscribed\n this.listener = {}; // set of callbacks that want to listen to incoming messages\n this.eventListeners = {}; // external listeners wanting to listen internal events\n this.queue = []; // incoming message queue\n this.connected = false; // connection status\n this.debug = false; // debug info to be logged to console?\n this.aid = new AgentID('gateway-'+_guid(4)); // gateway agent name\n this.connector = this._createConnector(url);\n this._addGWCache(this);\n }\n\n /**\n * Sends an event to all registered listeners of the given type.\n * @private\n * @param {string} type - type of event\n * @param {Object|Message|string} val - value to be sent to the listeners\n */\n _sendEvent(type, val) {\n if (Array.isArray(this.eventListeners[type])) {\n this.eventListeners[type].forEach(l => {\n if (l && {}.toString.call(l) === '[object Function]'){\n try {\n l(val);\n } catch (error) {\n console.warn('Error in event listener : ' + error);\n }\n }\n });\n }\n }\n\n /**\n * @private\n * @param {string} data - stringfied JSON data received from the master container to be processed\n * @returns {void}\n */\n _onMsgRx(data) {\n var obj;\n if (this.debug) console.log('< '+data);\n this._sendEvent('rx', data);\n try {\n obj = JSON.parse(data, _decodeBase64);\n }catch(e){\n return;\n }\n this._sendEvent('rxp', obj);\n if ('id' in obj && obj.id in this.pending) {\n // response to a pending request to master\n this.pending[obj.id](obj);\n delete this.pending[obj.id];\n } else if (obj.action == 'send') {\n // incoming message from master\n // @ts-ignore\n let msg = Message._deserialize(obj.message);\n if (!msg) return;\n this._sendEvent('rxmsg', msg);\n if ((msg.recipient == this.aid.toJSON() )|| this.subscriptions[msg.recipient]) {\n var consumed = false;\n if (Array.isArray(this.eventListeners['message'])){\n for (var i = 0; i < this.eventListeners['message'].length; i++) {\n try {\n if (this.eventListeners['message'][i](msg)) {\n consumed = true;\n break;\n }\n } catch (error) {\n console.warn('Error in message listener : ' + error);\n }\n }\n }\n // iterate over internal callbacks, until one consumes the message\n for (var key in this.listener){\n // callback returns true if it has consumed the message\n try {\n if (this.listener[key](msg)) {\n consumed = true;\n break;\n }\n } catch (error) {\n console.warn('Error in listener : ' + error);\n }\n }\n if(!consumed) {\n if (this.queue.length >= this._queueSize) this.queue.shift();\n this.queue.push(msg);\n }\n }\n } else {\n // respond to standard requests that every container must\n let rsp = { id: obj.id, inResponseTo: obj.action };\n switch (obj.action) {\n case 'agents':\n rsp.agentIDs = [this.aid.getName()];\n break;\n case 'containsAgent':\n rsp.answer = (obj.agentID == this.aid.getName());\n break;\n case 'services':\n rsp.services = [];\n break;\n case 'agentForService':\n rsp.agentID = '';\n break;\n case 'agentsForService':\n rsp.agentIDs = [];\n break;\n default:\n rsp = undefined;\n }\n if (rsp) this._msgTx(rsp);\n }\n }\n\n /**\n * Sends a message out to the master container.\n * @private\n * @param {string|Object} s - JSON object (either stringified or not) to be sent to the master container\n * @returns {boolean} - true if the message was sent successfully\n */\n _msgTx(s) {\n if (typeof s != 'string' && !(s instanceof String)) s = JSON.stringify(s);\n if(this.debug) console.log('> '+s);\n this._sendEvent('tx', s);\n return this.connector.write(s);\n }\n\n /**\n * @private\n * @param {Object} rq - request to be sent to the master container as a JSON object\n * @returns {Promise<Object>} - a promise which returns the response from the master container\n */\n _msgTxRx(rq) {\n rq.id = _guid(8);\n return new Promise(resolve => {\n let timer = setTimeout(() => {\n delete this.pending[rq.id];\n if (this.debug) console.log('Receive Timeout : ' + rq);\n resolve();\n }, 8*this._timeout);\n this.pending[rq.id] = rsp => {\n clearTimeout(timer);\n resolve(rsp);\n };\n if (!this._msgTx.call(this,rq)) {\n clearTimeout(timer);\n delete this.pending[rq.id];\n if (this.debug) console.log('Transmit Timeout : ' + rq);\n resolve();\n }\n });\n }\n\n /**\n * @private\n * @param {URL} url - URL object of the master container to connect to\n * @returns {TCPConnector|WSConnector} - connector object to connect to the master container\n */\n _createConnector(url){\n let conn;\n if (url.protocol.startsWith('ws')){\n conn = new WSConnector({\n 'hostname':url.hostname,\n 'port':parseInt(url.port),\n 'pathname':url.pathname,\n 'keepAlive': this._keepAlive,\n 'debug': this.debug\n });\n }else if (url.protocol.startsWith('tcp')){\n conn = new TCPConnector({\n 'hostname':url.hostname,\n 'port':parseInt(url.port),\n 'keepAlive': this._keepAlive,\n 'debug': this.debug\n });\n } else return null;\n conn.setReadCallback(this._onMsgRx.bind(this));\n conn.addConnectionListener(state => {\n this.connected = !!state;\n if (state == true){\n this.flush();\n this.connector.write('{\"alive\": true}');\n this._update_watch();\n }\n this._sendEvent('conn', state);\n });\n return conn;\n }\n\n /**\n * Checks if the object is a constructor.\n *\n * @private\n * @param {Object} value - an object to be checked if it is a constructor\n * @returns {boolean} - if the object is a constructor\n */\n _isConstructor(value) {\n try {\n new new Proxy(value, {construct() { return {}; }});\n return true;\n } catch (err) {\n return false;\n }\n }\n\n /**\n * Matches a message with a filter.\n * @private\n * @param {string|Object|function} filter - filter to be matched\n * @param {Message} msg - message to be matched to the filter\n * @returns {boolean} - true if the message matches the filter\n */\n _matchMessage(filter, msg){\n if (typeof filter == 'string' || filter instanceof String) {\n return 'inReplyTo' in msg && msg.inReplyTo == filter;\n } else if (Object.prototype.hasOwnProperty.call(filter, 'msgID')) {\n return 'inReplyTo' in msg && msg.inReplyTo == filter.msgID;\n } else if (filter.__proto__.name == 'Message' || filter.__proto__.__proto__.name == 'Message') {\n return filter.__clazz__ == msg.__clazz__;\n } else if (typeof filter == 'function' && !this._isConstructor(filter)) {\n try {\n return filter(msg);\n }catch(e){\n console.warn('Error in filter : ' + e);\n return false;\n }\n } else {\n return msg instanceof filter;\n }\n }\n\n /**\n * Gets the next message from the queue that matches the filter.\n * @private\n * @param {string|Object|function} filter - filter to be matched\n */\n _getMessageFromQueue(filter) {\n if (!this.queue.length) return;\n if (!filter) return this.queue.shift();\n let matchedMsg = this.queue.find( msg => this._matchMessage(filter, msg));\n if (matchedMsg) this.queue.splice(this.queue.indexOf(matchedMsg), 1);\n return matchedMsg;\n }\n\n /**\n * Gets a cached gateway object for the given URL (if it exists).\n * @private\n * @param {URL} url - URL object of the master container to connect to\n * @returns {Gateway|void} - gateway object for the given URL\n */\n _getGWCache(url){\n if (!gObj.fjage || !gObj.fjage.gateways) return null;\n var f = gObj.fjage.gateways.filter(g => g.connector.url.toString() == url.toString());\n if (f.length ) return f[0];\n return null;\n }\n\n /**\n * Adds a gateway object to the cache if it doesn't already exist.\n * @private\n * @param {Gateway} gw - gateway object to be added to the cache\n */\n _addGWCache(gw){\n if (!gObj.fjage || !gObj.fjage.gateways) return;\n gObj.fjage.gateways.push(gw);\n }\n\n /**\n * Removes a gateway object from the cache if it exists.\n * @private\n * @param {Gateway} gw - gateway object to be removed from the cache\n */\n _removeGWCache(gw){\n if (!gObj.fjage || !gObj.fjage.gateways) return;\n var index = gObj.fjage.gateways.indexOf(gw);\n if (index != null) gObj.fjage.gateways.splice(index,1);\n }\n\n /** @private */\n _update_watch() {\n // FIXME : Turning off wantsMessagesFor in fjagejs for now as it breaks multiple browser\n // windows connecting to the same master container.\n //\n // let watch = Object.keys(this.subscriptions);\n // watch.push(this.aid.getName());\n // let rq = { action: 'wantsMessagesFor', agentIDs: watch };\n // this._msgTx(rq);\n }\n\n /**\n * Add an event listener to listen to various events happening on this Gateway\n *\n * @param {string} type - type of event to be listened to\n * @param {function} listener - new callback/function to be called when the event happens\n * @returns {void}\n */\n addEventListener(type, listener) {\n if (!Array.isArray(this.eventListeners[type])){\n this.eventListeners[type] = [];\n }\n this.eventListeners[type].push(listener);\n }\n\n /**\n * Remove an event listener.\n *\n * @param {string} type - type of event the listener was for\n * @param {function} listener - callback/function which was to be called when the event happens\n * @returns {void}\n */\n removeEventListener(type, listener) {\n if (!this.eventListeners[type]) return;\n let ndx = this.eventListeners[type].indexOf(listener);\n if (ndx >= 0) this.eventListeners[type].splice(ndx, 1);\n }\n\n /**\n * Add a new listener to listen to all {Message}s sent to this Gateway\n *\n * @param {function} listener - new callback/function to be called when a {Message} is received\n * @returns {void}\n */\n addMessageListener(listener) {\n this.addEventListener('message',listener);\n }\n\n /**\n * Remove a message listener.\n *\n * @param {function} listener - removes a previously registered listener/callback\n * @returns {void}\n */\n removeMessageListener(listener) {\n this.removeEventListener('message', listener);\n }\n\n /**\n * Add a new listener to get notified when the connection to master is created and terminated.\n *\n * @param {function} listener - new callback/function to be called connection to master is created and terminated\n * @returns {void}\n */\n addConnListener(listener) {\n this.addEventListener('conn', listener);\n }\n\n /**\n * Remove a connection listener.\n *\n * @param {function} listener - removes a previously registered listener/callback\n * @returns {void}\n */\n removeConnListener(listener) {\n this.removeEventListener('conn', listener);\n }\n\n /**\n * Gets the agent ID associated with the gateway.\n *\n * @returns {AgentID} - agent ID\n */\n getAgentID() {\n return this.aid;\n }\n\n /**\n * Get an AgentID for a given agent name.\n *\n * @param {string} name - name of agent\n * @returns {AgentID} - AgentID for the given name\n */\n agent(name) {\n return new AgentID(name, false, this);\n }\n\n /**\n * Returns an object representing the named topic.\n *\n * @param {string|AgentID} topic - name of the topic or AgentID\n * @param {string} [topic2] - name of the topic if the topic param is an AgentID\n * @returns {AgentID} - object representing the topic\n */\n topic(topic, topic2) {\n if (typeof topic == 'string' || topic instanceof String) return new AgentID(topic, true, this);\n if (topic instanceof AgentID) {\n if (topic.isTopic()) return topic;\n return new AgentID(topic.getName()+(topic2 ? '__' + topic2 : '')+'__ntf', true, this);\n }\n }\n\n /**\n * Subscribes the gateway to receive all messages sent to the given topic.\n *\n * @param {AgentID} topic - the topic to subscribe to\n * @returns {boolean} - true if the subscription is successful, false otherwise\n */\n subscribe(topic) {\n if (!topic.isTopic()) topic = new AgentID(topic.getName() + '__ntf', true, this);\n this.subscriptions[topic.toJSON()] = true;\n this._update_watch();\n return true;\n }\n\n /**\n * Unsubscribes the gateway from a given topic.\n *\n * @param {AgentID} topic - the topic to unsubscribe\n * @returns {void}\n */\n unsubscribe(topic) {\n if (!topic.isTopic()) topic = new AgentID(topic.getName() + '__ntf', true, this);\n delete this.subscriptions[topic.toJSON()];\n this._update_watch();\n }\n\n /**\n * Gets a list of all agents in the container.\n * @returns {Promise<AgentID[]>} - a promise which returns an array of all agent ids when resolved\n */\n async agents() {\n let rq = { action: 'agents' };\n let rsp = await this._msgTxRx(rq);\n if (!rsp || !Array.isArray(rsp.agentIDs)) throw new Error('Unable to get agents');\n return rsp.agentIDs.map(aid => new AgentID(aid, false, this));\n }\n\n /**\n * Check if an agent with a given name exists in the container.\n *\n * @param {AgentID|String} agentID - the agent id to check\n * @returns {Promise<boolean>} - a promise which returns true if the agent exists when resolved\n */\n async containsAgent(agentID) {\n let rq = { action: 'containsAgent', agentID: agentID instanceof AgentID ? agentID.getName() : agentID };\n let rsp = await this._msgTxRx(rq);\n if (!rsp) throw new Error('Unable to check if agent exists');\n return !!rsp.answer;\n }\n\n /**\n * Finds an agent that provides a named service. If multiple agents are registered\n * to provide a given service, any of the agents' id may be returned.\n *\n * @param {string} service - the named service of interest\n * @returns {Promise<?AgentID>} - a promise which returns an agent id for an agent that provides the service when resolved\n */\n async agentForService(service) {\n let rq = { action: 'agentForService', service: service };\n let rsp = await this._msgTxRx(rq);\n if (!rsp) {\n if (this._returnNullOnFailedResponse) return null;\n else throw new Error('Unable to get agent for service');\n }\n if (!rsp.agentID) return null;\n return new AgentID(rsp.agentID, false, this);\n }\n\n /**\n * Finds all agents that provides a named service.\n *\n * @param {string} service - the named service of interest\n * @returns {Promise<?AgentID[]>} - a promise which returns an array of all agent ids that provides the service when resolved\n */\n async agentsForService(service) {\n let rq = { action: 'agentsForService', service: service };\n let rsp = await this._msgTxRx(rq);\n let aids = [];\n if (!rsp) {\n if (this._returnNullOnFailedResponse) return aids;\n else throw new Error('Unable to get agents for service');\n }\n if (!Array.isArray(rsp.agentIDs)) return aids;\n for (var i = 0; i < rsp.agentIDs.length; i++)\n aids.push(new AgentID(rsp.agentIDs[i], false, this));\n return aids;\n }\n\n /**\n * Sends a message to the recipient indicated in the message. The recipient\n * may be an agent or a topic.\n *\n * @param {Message} msg - message to be sent\n * @returns {boolean} - if sending was successful\n */\n send(msg) {\n msg.sender = this.aid.toJSON();\n if (msg.perf == '') {\n if (msg.__clazz__.endsWith('Req')) msg.perf = Performative.REQUEST;\n else msg.perf = Performative.INFORM;\n }\n this._sendEvent('txmsg', msg);\n let rq = JSON.stringify({ action: 'send', relay: true, message: '###MSG###' });\n // @ts-ignore\n rq = rq.replace('\"###MSG###\"', msg._serialize());\n return !!this._msgTx(rq);\n }\n\n /**\n * Flush the Gateway queue for all pending messages. This drops all the pending messages.\n * @returns {void}\n *\n */\n flush() {\n this.queue.length = 0;\n }\n\n /**\n * Sends a request and waits for a response. This method returns a {Promise} which resolves when a response\n * is received or if no response is received after the timeout.\n *\n * @param {Message} msg - message to send\n * @param {number} [timeout=1000] - timeout in milliseconds\n * @returns {Promise<Message|void>} - a promise which resolves with the received response message, null on timeout\n */\n async request(msg, timeout=1000) {\n this.send(msg);\n return this.receive(msg, timeout);\n }\n\n /**\n * Returns a response message received by the gateway. This method returns a {Promise} which resolves when\n * a response is received or if no response is received after the timeout.\n *\n * @param {function|Message|typeof Message} filter - original message to which a response is expected, or a MessageClass of the type\n * of message to match, or a closure to use to match against the message\n * @param {number} [timeout=0] - timeout in milliseconds\n * @returns {Promise<Message|void>} - received response message, null on timeout\n */\n async receive(filter, timeout=0) {\n return new Promise(resolve => {\n let msg = this._getMessageFromQueue.call(this,filter);\n if (msg) {\n resolve(msg);\n return;\n }\n if (timeout == 0) {\n if (this.debug) console.log('Receive Timeout : ' + filter);\n resolve();\n return;\n }\n let lid = _guid(8);\n let timer;\n if (timeout > 0){\n timer = setTimeout(() => {\n this.listener[lid] && delete this.listener[lid];\n if (this.debug) console.log('Receive Timeout : ' + filter);\n resolve();\n }, timeout);\n }\n this.listener[lid] = msg => {\n if (!this._matchMessage(filter, msg)) return false;\n if(timer) clearTimeout(timer);\n this.listener[lid] && delete this.listener[lid];\n resolve(msg);\n return true;\n };\n });\n }\n\n /**\n * Closes the gateway. The gateway functionality may not longer be accessed after\n * this method is called.\n * @returns {void}\n */\n close() {\n this.connector.close();\n this._removeGWCache(this);\n }\n\n}\n\n/**\n * Services supported by fjage agents.\n */\nconst Services = {\n SHELL : 'org.arl.fjage.shell.Services.SHELL'\n};\n\n/**\n * Creates a unqualified message class based on a fully qualified name.\n * @param {string} name - fully qualified name of the message class to be created\n * @param {typeof Message} [parent] - class of the parent MessageClass to inherit from\n * @constructs Message\n * @example\n * const ParameterReq = MessageClass('org.arl.fjage.param.ParameterReq');\n * let pReq = new ParameterReq()\n */\nfunction MessageClass(name, parent=Message) {\n let sname = name.replace(/^.*\\./, '');\n if (MessageClass[sname]) return MessageClass[sname];\n let cls = class extends parent {\n /**\n * @param {{ [x: string]: any; }} params\n */\n constructor(params) {\n super();\n this.__clazz__ = name;\n if (params){\n const keys = Object.keys(params);\n for (let k of keys) {\n this[k] = params[k];\n }\n }\n if (name.endsWith('Req')) this.perf = Performative.REQUEST;\n }\n };\n cls.__clazz__ = name;\n MessageClass[sname] = cls;\n return cls;\n}\n\n////// private utilities\n\n// generate random ID with length 4*len characters\n/** @private */\nfunction _guid(len) {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n }\n let s = s4();\n for (var i = 0; i < len-1; i++)\n s += s4();\n return s;\n}\n\n// convert from base 64 to array\n/** @private */\nfunction _b64toArray(base64, dtype, littleEndian=true) {\n let s = gObj.atob(base64);\n let len = s.length;\n let bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++)\n bytes[i] = s.charCodeAt(i);\n let rv = [];\n let view = new DataView(bytes.buffer);\n switch (dtype) {\n case '[B': // byte array\n for (i = 0; i < len; i++)\n rv.push(view.getUint8(i));\n break;\n case '[S': // short array\n for (i = 0; i < len; i+=2)\n rv.push(view.getInt16(i, littleEndian));\n break;\n case '[I': // integer array\n for (i = 0; i < len; i+=4)\n rv.push(view.getInt32(i, littleEndian));\n break;\n case '[J': // long array\n for (i = 0; i < len; i+=8)\n rv.push(view.getBigInt64(i, littleEndian));\n break;\n case '[F': // float array\n for (i = 0; i < len; i+=4)\n rv.push(view.getFloat32(i, littleEndian));\n break;\n case '[D': // double array\n for (i = 0; i < len; i+=8)\n rv.push(view.getFloat64(i, littleEndian));\n break;\n default:\n return;\n }\n return rv;\n}\n\n// base 64 JSON decoder\n/** @private */\nfunction _decodeBase64(k, d) {\n if (d === null) {\n return null;\n }\n if (typeof d == 'object' && 'clazz' in d) {\n let clazz = d.clazz;\n if (clazz.startsWith('[') && clazz.length == 2 && 'data' in d) {\n let x = _b64toArray(d.data, d.clazz);\n if (x) d = x;\n }\n }\n return d;\n}\n\n////// global\n\nconst GATEWAY_DEFAULTS = {};\n\n/** @type {Window & globalThis & Object} */\nlet gObj = {};\nlet DEFAULT_URL;\nif (isBrowser || isWebWorker){\n gObj = window;\n Object.assign(GATEWAY_DEFAULTS, {\n 'hostname': gObj.location.hostname,\n 'port': gObj.location.port,\n 'pathname' : '/ws/',\n 'timeout': 1000,\n 'keepAlive' : true,\n 'queueSize': DEFAULT_QUEUE_SIZE,\n 'returnNullOnFailedResponse': true\n });\n DEFAULT_URL = new URL('ws://localhost');\n // Enable caching of Gateways\n if (typeof gObj.fjage === 'undefined') gObj.fjage = {};\n if (typeof gObj.fjage.gateways == 'undefined') gObj.fjage.gateways = [];\n} else if (isJsDom || isNode){\n gObj = global;\n Object.assign(GATEWAY_DEFAULTS, {\n 'hostname': 'localhost',\n 'port': '1100',\n 'pathname': '',\n 'timeout': 1000,\n 'keepAlive' : true,\n 'queueSize': DEFAULT_QUEUE_SIZE,\n 'returnNullOnFailedResponse': true\n });\n DEFAULT_URL = new URL('tcp://localhost');\n gObj.atob = a => Buffer.from(a, 'base64').toString('binary');\n}\n\n/**\n * @typedef {Object} ParameterReq.Entry\n * @property {string} param - parameter name\n * @property {Object} value - parameter value\n * @exports ParameterReq.Entry\n */\n\n\n/**\n * A message that requests one or more parameters of an agent.\n * @typedef {Message} ParameterReq\n * @property {string} param - parameters name to be get/set if only a single parameter is to be get/set\n * @property {Object} value - parameters value to be set if only a single parameter is to be set\n * @property {Array<ParameterReq.Entry>} requests - a list of multiple parameters to be get/set\n * @property {number} [index=-1] - index of parameter(s) to be set\n * @exports ParameterReq\n */\nconst ParameterReq = MessageClass('org.arl.fjage.param.ParameterReq');\n\nexport { AgentID, Gateway, GenericMessage, Message, MessageClass, ParameterReq, Performative, Services };\n","import {AgentID, MessageClass, Services, Gateway} from 'fjage';\n\nconst DatagramReq = MessageClass('org.arl.unet.DatagramReq');\nconst DatagramNtf = MessageClass('org.arl.unet.DatagramNtf');\nconst TxFrameReq = MessageClass('org.arl.unet.phy.TxFrameReq', DatagramReq);\nconst RxFrameNtf = MessageClass('org.arl.unet.phy.RxFrameNtf', DatagramNtf);\nconst BasebandSignal = MessageClass('org.arl.unet.bb.BasebandSignal');\n\nlet UnetServices = {\n 'NODE_INFO': 'org.arl.unet.Services.NODE_INFO',\n 'ADDRESS_RESOLUTION': 'org.arl.unet.Services.ADDRESS_RESOLUTION',\n 'DATAGRAM': 'org.arl.unet.Services.DATAGRAM',\n 'PHYSICAL': 'org.arl.unet.Services.PHYSICAL',\n 'RANGING': 'org.arl.unet.Services.RANGING',\n 'BASEBAND': 'org.arl.unet.Services.BASEBAND',\n 'LINK': 'org.arl.unet.Services.LINK',\n 'MAC': 'org.arl.unet.Services.MAC',\n 'ROUTING': 'org.arl.unet.Services.ROUTING',\n 'ROUTE_MAINTENANCE': 'org.arl.unet.Services.ROUTE_MAINTENANCE',\n 'TRANSPORT': 'org.arl.unet.Services.TRANSPORT',\n 'REMOTE': 'org.arl.unet.Services.REMOTE',\n 'STATE_MANAGER': 'org.arl.unet.Services.STATE_MANAGER',\n 'DEVICE_INFO': 'org.arl.unet.Services.DEVICE_INFO',\n 'DOA': 'org.arl.unet.Services.DOA',\n 'SCHEDULER':'org.arl.unet.Services.SCHEDULER'\n};\n\nObject.assign(Services, UnetServices);\n\n/**\n * Well-known protocol number assignments used in UnetStack\n * @typedef {Object.<string, number>} Protocol\n */\nlet Protocol = {\n 'DATA' : 0, // Protocol number for user application data.\n 'RANGING' : 1, // Protocol number for use by ranging agents.\n 'LINK' : 2, // Protocol number for use by link agents.\n 'REMOTE' : 3, // Protocol number for use by remote management agents.\n 'MAC' : 4, // Protocol number for use by MAC protocol agents.\n 'ROUTING' : 5, // Protocol number for use by routing agents.\n 'TRANSPORT' : 6, // Protocol number for use by transport agents.\n 'ROUTE_MAINTENANCE' : 7, // Protocol number for use by route maintenance agents.\n 'LINK2' : 8, // Protocol number for use by secondary link agents.\n 'USER' : 32, // Lowest protocol number allowable for user protocols.\n 'MAX' : 63, // Largest protocol number allowable.\n};\n\n/**\n * Well-known protocol Messages used in UnetStack\n * @typedef {Object.<string, MessageClass>} UnetMessages\n */\nlet UnetMessages = {\n // unet\n 'TestReportNtf' : MessageClass('org.arl.unet.TestReportNtf'),\n 'AbnormalTerminationNtf' : MessageClass('org.arl.unet.AbnormalTerminationNtf'),\n 'CapabilityListRsp' : MessageClass('org.arl.unet.CapabilityListRsp'),\n 'CapabilityReq' : MessageClass('org.arl.unet.CapabilityReq'),\n 'ClearReq' : MessageClass('org.arl.unet.ClearReq'),\n 'DatagramCancelReq' : MessageClass('org.arl.unet.DatagramCancelReq'),\n 'DatagramDeliveryNtf' : MessageClass('org.arl.unet.DatagramDeliveryNtf'),\n 'DatagramFailureNtf' : MessageClass('org.arl.unet.DatagramFailureNtf'),\n 'DatagramNtf' : MessageClass('org.arl.unet.DatagramNtf'),\n 'DatagramProgressNtf' : MessageClass('org.arl.unet.DatagramProgressNtf'),\n 'DatagramReq' : MessageClass('org.arl.unet.DatagramReq'),\n 'ParamChangeNtf' : MessageClass('org.arl.unet.ParamChangeNtf'),\n 'RefuseRsp' : MessageClass('org.arl.unet.RefuseRsp'),\n 'FailureNtf' : MessageClass('org.arl.unet.FailureNtf'),\n\n // net\n 'DatagramTraceReq' : MessageClass('org.arl.unet.net.DatagramTraceReq'),\n 'RouteDiscoveryReq' : MessageClass('org.arl.unet.net.RouteDiscoveryReq'),\n 'RouteTraceReq' : MessageClass('org.arl.unet.net.RouteTraceReq'),\n 'RouteDiscoveryNtf' : MessageClass('org.arl.unet.net.RouteDiscoveryNtf'),\n 'RouteTraceNtf' : MessageClass('org.arl.unet.net.RouteTraceNtf'),\n\n // phy\n 'FecDecodeReq' : MessageClass('org.arl.unet.phy.FecDecodeReq'),\n 'RxSWiG1FrameNtf' : MessageClass('org.arl.unet.phy.RxSWiG1FrameNtf', RxFrameNtf),\n 'TxSWiG1FrameReq' : MessageClass('org.arl.unet.phy.TxSWiG1FrameReq', TxFrameReq),\n 'RxJanusFrameNtf' : MessageClass('org.arl.unet.phy.RxJanusFrameNtf', RxFrameNtf),\n 'TxJanusFrameReq' : MessageClass('org.arl.unet.phy.TxJanusFrameReq', TxFrameReq),\n 'BadFrameNtf' : MessageClass('org.arl.unet.phy.BadFrameNtf'),\n 'BadRangeNtf' : MessageClass('org.arl.unet.phy.BadRangeNtf'),\n 'ClearSyncReq' : MessageClass('org.arl.unet.phy.ClearSyncReq'),\n 'CollisionNtf' : MessageClass('org.arl.unet.phy.CollisionNtf'),\n 'RxFrameNtf' : MessageClass('org.arl.unet.phy.RxFrameNtf', DatagramNtf),\n 'RxFrameStartNtf' : MessageClass('org.arl.unet.phy.RxFrameStartNtf'),\n 'SyncInfoReq' : MessageClass('org.arl.unet.phy.SyncInfoReq'),\n 'SyncInfoRsp' : MessageClass('org.arl.unet.phy.SyncInfoRsp'),\n 'TxFrameNtf' : MessageClass('org.arl.unet.phy.TxFrameNtf'),\n 'TxFrameReq' : MessageClass('org.arl.unet.phy.TxFrameReq', DatagramReq),\n 'TxFrameStartNtf' : MessageClass('org.arl.unet.phy.TxFrameStartNtf'),\n 'TxRawFrameReq' : MessageClass('org.arl.unet.phy.TxRawFrameReq'),\n\n // addr\n 'AddressAllocReq' : MessageClass('org.arl.unet.addr.AddressAllocReq'),\n 'AddressAllocRsp' : MessageClass('org.arl.unet.addr.AddressAllocRsp'),\n 'AddressResolutionReq' : MessageClass('org.arl.unet.addr.AddressResolutionReq'),\n 'AddressResolutionRsp' : MessageClass('org.arl.unet.addr.AddressResolutionRsp'),\n\n // bb\n 'BasebandSignal' : MessageClass('org.arl.unet.bb.BasebandSignal'),\n 'RecordBasebandSignalReq' : MessageClass('org.arl.unet.bb.RecordBasebandSignalReq'),\n 'RxBasebandSignalNtf' : MessageClass('org.arl.unet.bb.RxBasebandSignalNtf', BasebandSignal),\n 'TxBasebandSignalReq' : MessageClass('org.arl.unet.bb.TxBasebandSignalReq', BasebandSignal),\n\n // link\n 'LinkStatusNtf' : MessageClass('org.arl.unet.link.LinkStatusNtf'),\n\n // localization\n 'RangeNtf' : MessageClass('org.arl.unet.localization.RangeNtf'),\n 'RangeReq' : MessageClass('org.arl.unet.localization.RangeReq'),\n 'BeaconReq' : MessageClass('org.arl.unet.localization.BeaconReq'),\n 'RespondReq' : MessageClass('org.arl.unet.localization.RespondReq'),\n 'InterrogationNtf' : MessageClass('org.arl.unet.localization.InterrogationNtf'),\n\n\n // mac\n 'ReservationAcceptReq' : MessageClass('org.arl.unet.mac.ReservationAcceptReq'),\n 'ReservationCancelReq' : MessageClass('org.arl.unet.mac.ReservationCancelReq'),\n 'ReservationReq' : MessageClass('org.arl.unet.mac.ReservationReq'),\n 'ReservationRsp' : MessageClass('org.arl.unet.mac.ReservationRsp'),\n 'ReservationStatusNtf' : MessageClass('org.arl.unet.mac.ReservationStatusNtf'),\n 'RxAckNtf' : MessageClass('org.arl.unet.mac.RxAckNtf'),\n 'TxAckReq' : MessageClass('org.arl.unet.mac.TxAckReq'),\n\n\n // remote\n 'RemoteExecReq' : MessageClass('org.arl.unet.remote.RemoteExecReq'),\n 'RemoteFailureNtf' : MessageClass('org.arl.unet.remote.RemoteFailureNtf'),\n 'RemoteFileGetReq' : MessageClass('org.arl.unet.remote.RemoteFileGetReq'),\n 'RemoteFileNtf' : MessageClass('org.arl.unet.remote.RemoteFileNtf'),\n 'RemoteFilePutReq' : MessageClass('org.arl.unet.remote.RemoteFilePutReq'),\n 'RemoteSuccessNtf' : MessageClass('org.arl.unet.remote.RemoteSuccessNtf'),\n 'RemoteTextNtf' : MessageClass('org.arl.unet.remote.RemoteTextNtf'),\n 'RemoteTextReq' : MessageClass('org.arl.unet.remote.RemoteTextReq'),\n\n // scheduler\n 'AddScheduledSleepReq' : MessageClass('org.arl.unet.scheduler.AddScheduledSleepReq'),\n 'GetSleepScheduleReq' : MessageClass('org.arl.unet.scheduler.GetSleepScheduleReq'),\n 'RemoveScheduledSleepReq' : MessageClass('org.arl.unet.scheduler.RemoveScheduledSleepReq'),\n 'SleepScheduleRsp' : MessageClass('org.arl.unet.scheduler.SleepScheduleRsp'),\n 'WakeFromSleepNtf' : MessageClass('org.arl.unet.scheduler.WakeFromSleepNtf'),\n\n // state\n 'ClearStateReq' : MessageClass('org.arl.unet.state.ClearStateReq'),\n 'SaveStateReq' : MessageClass('org.arl.unet.state.SaveStateReq')\n};\n\n/**\n * Convert coordinates from a local coordinates to GPS coordinate\n * @param {Array} origin - Local coordinate system's origin as `[latitude, longitude]`\n * @param {Number} x - X coordinate of the local coordinate to be converted\n * @param {Number} y - Y coordinate of the local coordinate to be converted\n * @returns {Array} - GPS coordinates (in decimal degrees) as `[latitude, longitude]`\n */\n\nexport function toGps(origin, x, y) {\n let coords = [] ;\n let [xScale,yScale] = _initConv(origin[0]);\n coords[1] = x/xScale + origin[1];\n coords[0] = y/yScale + origin[0];\n return coords;\n}\n\n/**\n * Convert coordinates from a GPS coordinates to local coordinate\n * @param {Array} origin - Local coordinate system's origin as `[latitude, longitude]`\n * @param {Number} lat - Latitude of the GPS coordinate to be converted\n * @param {Number} lon - Longitude of the GPS coordinate to be converted\n * @returns {Array} - GPS coordinates (in decimal degrees) as `[latitude, longitude]`\n */\nexport function toLocal(origin, lat, lon) {\n let pos = [];\n let [xScale,yScale] = _initConv(origin[0]);\n pos[0] = (lon-origin[1]) * xScale;\n pos[1] = (lat-origin[0]) * yScale;\n return pos;\n}\n\nfunction _initConv(lat){\n let rlat = lat * Math.PI/180;\n let yScale = 111132.92 - 559.82*Math.cos(2*rlat) + 1.175*Math.cos(4*rlat) - 0.0023*Math.cos(6*rlat);\n let xScale = 111412.84*Math.cos(rlat) - 93.5*Math.cos(3*rlat) + 0.118*Math.cos(5*rlat);\n return [xScale, yScale];\n}\n\n/**\n * A message which requests the transmission of the datagram from the Unet\n *\n * @typedef {Message} DatagramReq\n * @property {number[]} data - data as an Array of bytes\n * @property {number} from - from/source node address\n * @property {number} to - to/destination node address\n * @property {number} protocol - protocol number to be used to send this Datagram\n * @property {boolean} reliability - true if Datagram should be reliable, false if unreliable\n * @property {number} ttl - time-to-live for the datagram. Time-to-live is advisory, and an agent may choose it ignore it\n */\n\n/**\n * Notification of received datagram message received by the Unet node.\n *\n * @typedef {Message} DatagramNtf\n * @property {number[]} data - data as an Array of bytes\n * @property {number} from - from/source node address\n * @property {number} to - to/destination node address\n * @property {number} protocol - protocol number to be used to send this Datagram\n * @property {number} ttl - time-to-live for the datagram. Time-to-live is advisory, and an agent may choose it ignore it\n */\n\n/**\n * An identifier for an agent or a topic.\n * @external AgentID\n * @see {@link https://org-arl.github.io/fjage/jsdoc/|fjåge.js Documentation}\n */\n\n/**\n * Services supported by fjage agents.\n * @external Services\n * @see {@link https://org-arl.github.io/fjage/jsdoc/|fjåge.js Documentation}\n */\n\n/**\n * An action represented by a message.\n * @external Performative\n * @see {@link https://org-arl.github.io/fjage/jsdoc/|fjåge.js Documentation}\n */\n\n/**\n * Function to creates a unqualified message class based on a fully qualified name.\n * @external MessageClass\n * @see {@link https://org-arl.github.io/fjage/jsdoc/|fjåge.js Documentation}\n */\n\n/**\n * A caching CachingAgentID which caches Agent parameters locally.\n *\n * @class\n * @extends AgentID\n * @param {string | AgentID} name - name of the agent or an AgentID to copy\n * @param {boolean} topic - name of topic\n * @param {Gateway} owner - Gateway owner for this AgentID\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n *\n*/\nclass CachingAgentID extends AgentID {\n\n constructor(name, topic, owner, greedy=true) {\n if (name instanceof AgentID) {\n super(name.getName(), name.topic, name.owner);\n } else {\n super(name, topic, owner);\n }\n this.greedy = greedy;\n this.cache = {};\n this.specialParams = ['name', 'version'];\n }\n\n /**\n * Sets parameter(s) on the Agent referred to by this AgentID, and caches the parameter(s).\n *\n * @param {(string|string[])} params - parameters name(s) to be set\n * @param {(Object|Object[])} values - parameters value(s) to be set\n * @param {number} [index=-1] - index of parameter(s) to be set\n * @param {number} [timeout=5000] - timeout for the response\n * @returns {Promise<(Object|Object[])>} - a promise which returns the new value(s) of the parameters\n */\n async set(params, values, index=-1, timeout=5000) {\n let s = await super.set(params, values, index, timeout);\n this._updateCache(params, s, index);\n return s;\n }\n\n /**\n * Gets parameter(s) on the Agent referred to by this AgentID, getting them from the cache if possible.\n *\n * @param {(string|string[])} params - parameters name(s) to be fetched\n * @param {number} [index=-1] - index of parameter(s) to be fetched\n * @param {number} [timeout=5000] - timeout for the response\n * @param {number} [maxage=5000] - maximum age of the cached result to retreive\n * @returns {Promise<(Object|Object[])>} - a promise which returns the value(s) of the parameters\n */\n async get(params, index=-1, timeout=5000, maxage=5000) {\n if (this._isCached(params, index, maxage)) return this._getCache(params, index);\n if (this.greedy &&\n !(Array.isArray(params) && [...new Set([...params, ...this.specialParams])].length!=0) &&\n !this.specialParams.includes(params)) {\n let rsp = await super.get(null, index, timeout);\n this._updateCache(null, rsp, index);\n if (!rsp) return Array.isArray(params) ? new Array(params.length).fill(null) : null;\n if (!params) return rsp;\n else if (Array.isArray(params)) {\n return params.map(p => {\n let f = Object.keys(rsp).find(rv => this._toNamed(rv) === p);\n return f ? rsp[f] : null;\n });\n } else {\n let f = Object.keys(rsp).find(rv => this._toNamed(rv) === params);\n return f ? rsp[f] : null;\n }\n } else{\n let r = await super.get(params, index, timeout);\n this._updateCache(params, r, index);\n return r;\n }\n }\n\n _updateCache(params, vals, index) {\n if (vals == null || Array.isArray(vals) && vals.every(v => v == null)) return;\n if (params == null) {\n params = Object.keys(vals);\n vals = Object.values(vals);\n } else if (!Array.isArray(params)) params = [params];\n if (!Array.isArray(vals)) vals = [vals];\n params = params.map(this._toNamed);\n if (this.cache[index.toString()] === undefined) this.cache[index.toString()] = {};\n let c = this.cache[index.toString()];\n for (let i = 0; i < params.length; i++) {\n if (c[params[i]] === undefined) c[params[i]] = {};\n c[params[i]].value = vals[i];\n c[params[i]].ctime = Date.now();\n }\n }\n\n _isCached(params, index, maxage) {\n if (maxage <= 0) return false;\n if (params == null) return false;\n let c = this.cache[index.toString()];\n if (!c) {\n return false;\n }\n if (!Array.isArray(params)) params = [params];\n const rv = params.every(p => {\n p = this._toNamed(p);\n return (p in c) && (Date.now() - c[p].ctime <= maxage);\n });\n return rv;\n }\n\n _getCache(params, index) {\n let c = this.cache[index.toString()];\n if (!c) return null;\n if (!Array.isArray(params)){\n if (params in c) return c[params].value;\n return null;\n }else {\n return params.map(p => p in c ? c[p].value : null);\n }\n }\n\n _toNamed(param) {\n const idx = param.lastIndexOf('.');\n if (idx < 0) return param;\n else return param.slice(idx+1);\n }\n\n}\n\n\nclass CachingGateway extends Gateway{\n\n /**\n * Get an AgentID for a given agent name.\n *\n * @param {string} name - name of agent\n * @param {Boolean} [caching=true] - if the AgentID should cache parameters\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n * @returns {AgentID|CachingAgentID} - AgentID for the given name\n */\n agent(name, caching=true, greedy=true) {\n const aid = super.agent(name);\n return caching ? new CachingAgentID(aid, null, null, greedy) : aid;\n }\n\n /**\n * Returns an object representing the named topic.\n *\n * @param {string|AgentID} topic - name of the topic or AgentID\n * @param {string} topic2 - name of the topic if the topic param is an AgentID\n * @param {Boolean} [caching=true] - if the AgentID should cache parameters\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n * @returns {AgentID|CachingAgentID} - object representing the topic\n */\n topic(topic, topic2, caching=true, greedy=true) {\n const aid = super.topic(topic, topic2);\n return caching ? new CachingAgentID(aid, null, null, greedy) : aid;\n }\n\n /**\n * Finds an agent that provides a named service. If multiple agents are registered\n * to provide a given service, any of the agents' id may be returned.\n *\n * @param {string} service - the named service of interest\n * @param {Boolean} [caching=true] - if the AgentID should cache parameters\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n * @returns {Promise<?AgentID|CachingAgentID>} - a promise which returns an agent id for an agent that provides the service when resolved\n */\n async agentForService(service, caching=true, greedy=true) {\n const aid = await super.agentForService(service);\n if (!aid) return aid;\n return caching ? new CachingAgentID(aid, null, null, greedy) : aid;\n }\n\n /**\n * Finds all agents that provides a named service.\n *\n * @param {string} service - the named service of interest\n * @param {Boolean} [caching=true] - if the AgentID should cache parameters\n * @param {Boolean} [greedy=true] - greedily fetches and caches all parameters if this Agent\n * @returns {Promise<?AgentID|CachingAgentID[]>} - a promise which returns an array of all agent ids that provides the service when resolved\n */\n async agentsForService(service, caching=true, greedy=true) {\n const aids = await super.agentsForService(service);\n return caching ? aids.map(a => new CachingAgentID(a, null, null, greedy)) : aids;\n }\n}\n\nexport {AgentID, Services, UnetMessages, Protocol, CachingGateway, CachingAgentID};\n","import {Gateway, Performative} from 'fjage';\nimport {Services, UnetMessages, Protocol} from './unetutils';\n\nconst REQUEST_TIMEOUT = 1000;\n\nconst AddressResolutionReq = UnetMessages.AddressResolutionReq;\nconst DatagramReq = UnetMessages.DatagramReq;\nconst DatagramNtf = UnetMessages.DatagramNtf;\nconst RxFrameNtf = UnetMessages.RxFrameNtf;\n\n/**\n * Creates a new UnetSocket to connect to a running Unet instance. This constructor returns a\n * {@link Promise} instead of the constructed UnetSocket object. Use `await` or `.then()` to get\n * a reference to the UnetSocket object. Based on if this is run in a Browser or Node.js,\n * it will internally connect over WebSockets or TCP respectively.\n *\n *\n * @class UnetSocket\n * @param {string} [hostname] - hostname/ip address of the master container to connect to\n * @param {string} [port] - port number of the master container to connect to\n * @param {string} [path=''] - path of the master container to connect to (for WebSockets)\n * @returns {Promise<UnetSocket>} - Promise which resolves to the UnetSocket object being constructed\n *\n * @example\n * let socket = await new UnetSocket('localhost', 8081, '/ws/');\n */\nexport default class UnetSocket {\n\n constructor(hostname, port, path='') {\n return (async () => {\n this.gw = new Gateway({\n hostname : hostname,\n port : port,\n path : path\n });\n this.localProtocol = -1;\n this.remoteAddress = -1;\n this.remoteProtocol = Protocol.DATA;\n this.timeout = 0;\n this.provider = null;\n const alist = await this.gw.agentsForService(Services.DATAGRAM);\n alist.forEach(a => {this.gw.subscribe(this.gw.topic(a));});\n return this;\n })();\n }\n\n /**\n * Closes the socket. The socket functionality may not longer be accessed after this method is called.\n * @returns {void}\n */\n close() {\n this.gw.close();\n this.gw = null;\n }\n\n /**\n * Checks if a socket is closed.\n * @returns {boolean} - true if closed, false if open\n */\n isClosed() {\n return this.gw == null;\n }\n\n /**\n * Binds a socket to listen to a specific protocol datagrams.\n * Protocol numbers between Protocol.DATA+1 to Protocol.USER-1 are reserved protocols\n * and cannot be bound. Unbound sockets listen to all unreserved\n * @param {Protocol} protocol - protocol number to listen for\n * @returns {boolean} - true on success, false on failure\n */\n bind(protocol) {\n if (protocol == Protocol.DATA || (protocol >= Protocol.USER && protocol <= Protocol.MAX)) {\n this.localProtocol = protocol;\n return true;\n }\n return false;\n }\n\n /**\n * Unbinds a socket so that it listens to all unreserved protocols.\n * Protocol numbers between Protocol.DATA+1 to Protocol.USER-1 are considered reserved.\n * @returns {void}\n */\n unbind() { this.localProtocol = -1;}\n\n /**\n * Checks if a socket is bound.\n * @returns {boolean} - true if bound to a protocol, false if unbound\n */\n isBound() { return this.localProtocol >= 0;}\n\n /**\n * Sets the default destination address and destination protocol number for datagrams sent\n * using this socket. The defaults can be overridden for specific send() calls.\n * The default protcol number when a socket is opened is Protcol.DATA.\n * The default node address is undefined.\n * Protocol numbers between Protocol.DATA+1 to Protocol.USER-1 are considered reserved,\n * and cannot be used for sending datagrams using the socket.\n *\n * @param {number} to - default destination node address\n * @param {Protocol} protocol - default protocol number\n * @returns {boolean} - true on success, false on failure\n */\n connect(to, protocol) {\n if (to >= 0 && (protocol == Protocol.DATA || (protocol >= Protocol.USER && protocol <= Protocol.MAX))) {\n this.remoteAddress = to;\n this.remoteProtocol = protocol;\n return true;\n }\n return false;\n }\n\n /**\n * Resets the default destination address to undefined, and the default protocol number\n * to Protocol.DATA.\n * @returns {void}\n */\n disconnect() {\n this.remoteAddress = -1;\n this.remoteProtocol = 0;\n }\n\n /**\n * Checks if a socket is connected, i.e., has a default destination address and protocol number.\n * @returns {boolean} - true if connected, false otherwise\n */\n isConnected() { return this.remoteAddress >= 0; }\n\n /**\n * Gets the local node address of the Unet node connected to.\n * @returns {Promise<int>} - local node address, or -1 on error\n */\n async getLocalAddress() {\n if (this.gw == null) return -1;\n const nodeinfo = await this.gw.agentForService(Services.NODE_INFO);\n if (nodeinfo == null) return -1;\n const addr = await nodeinfo.get('address');\n return addr != null ? addr : -1;\n }\n\n /**\n * Gets the protocol number that the socket is bound to.\n * @returns {number}} - protocol number if socket is bound, -1 otherwise\n */\n getLocalProtocol() { return this.localProtocol; }\n\n /**\n * Gets the default destination node address for a connected socket.\n * @returns {number}} - default destination node address if connected, -1 otherwise\n */\n getRemoteAddress() { return this.remoteAddress; }\n\n /**\n * Gets the default transmission protocol number.\n * @returns {number}} - default protocol number used to transmit a datagram\n */\n getRemoteProtocol() { return this.remoteProtocol; }\n\n /**\n * Sets the timeout for datagram reception. A timeout of 0 means the\n * {@link UnetSocket#receive|receive method} will check any appropriate\n * Datagram has already been received (and is cached) else return immediately.\n *\n * @param {number} ms - timeout in milliseconds\n * @returns {void}\n */\n setTimeout(ms) {\n if (ms < 0) ms = 0;\n this.timeout = ms;\n }\n\n /**\n * Gets the timeout for datagram reception.\n * @returns {number} - timeout in milliseconds\n */\n getTimeout() { return this.timeout; }\n\n /**\n * Transmits a datagram to the specified node address using the specified protocol.\n * Protocol numbers between Protocol.DATA+1 to Protocol.USER-1 are considered reserved,\n * and cannot be used for sending datagrams using the socket.\n * @param {number[]|DatagramReq} data - data to be sent over the socket as an Array of bytes or DatagramReq\n * @param {number} to - destination node address\n * @param {number} protocol - protocol number\n * @returns {Promise<boolean>} - true if the Unet node agreed to send out the Datagram, false otherwise\n */\n async send(data, to=this.remoteAddress, protocol=this.remoteProtocol) {\n if (to < 0 || this.gw == null) return false;\n var req;\n if (Array.isArray(data)){\n req = new DatagramReq();\n req.data = data;\n req.to = to;\n req.protocol = protocol;\n } else if (data instanceof DatagramReq){\n req = data;\n } else {\n return false;\n }\n let p = req.protocol;\n if (p != Protocol.DATA && (p < Protocol.USER || p > Protocol.MAX)) return false;\n if (req.recipient == null) {\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.TRANSPORT);\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.ROUTING);\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.LINK);\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.PHYSICAL);\n if (this.provider == null) this.provider = await this.gw.agentForService(Services.DATAGRAM);\n if (this.provider == null) return false;\n req.recipient = this.provider;\n }\n const rsp = await this.gw.request(req, REQUEST_TIMEOUT);\n return (rsp != null && rsp.perf == Performative.AGREE);\n }\n\n /**\n * Receives a datagram sent to the local node and the bound protocol number. If the socket is unbound,\n * then datagrams with all unreserved protocols are received. Any broadcast datagrams are also received.\n *\n * @returns {Promise<?DatagramNtf>} - datagram received by the socket\n */\n async receive() {\n if (this.gw == null) return null;\n return await this.gw.receive(msg => {\n if (msg.__clazz__ != DatagramNtf.__clazz__ && msg.__clazz__ != RxFrameNtf.__clazz__ ) return false;\n let p = msg.protocol;\n if (p == Protocol.DATA || p >= Protocol.USER) {\n return this.localProtocol < 0 || this.localProtocol == p;\n }\n return false;\n }, this.timeout);\n }\n\n /**\n * Gets a Gateway to provide low-level access to UnetStack.\n * @returns {Gateway} - underlying fjage Gateway supporting this socket\n */\n getGateway() { return this.gw; }\n\n /**\n * Gets an AgentID providing a specified service for low-level access to UnetStack\n * @param {string} svc - the named service of interest\n * @param {Boolean} caching - if the AgentID should cache parameters\n * @returns {Promise<?AgentID>} - a promise which returns an {@link AgentID} that provides the service when resolved\n */\n async agentForService(svc, caching=true) {\n if (this.gw == null) return null;\n return await this.gw.agentForService(svc, caching);\n }\n\n /**\n *\n * @param {string} svc - the named service of interest\n * @param {Boolean} caching - if the AgentID should cache parameters\n * @returns {Promise<AgentID[]>} - a promise which returns an array of {@link AgentID|AgentIDs} that provides the service when resolved\n */\n async agentsForService(svc, caching=true) {\n if (this.gw == null) return null;\n return await this.gw.agentsForService(svc, caching``);\n }\n\n /**\n * Gets a named AgentID for low-level access to UnetStack.\n * @param {string} name - name of agent\n * @param {Boolean} caching - if the AgentID should cache parameters\n * @returns {AgentID} - AgentID for the given name\n */\n agent(name, caching=true) {\n if (this.gw == null) return null;\n return this.gw.agent(name, caching);\n }\n\n /**\n * Resolve node name to node address.\n * @param {string} nodeName - name of the node to resolve\n * @returns {Promise<?number>} - address of the node, or null if unable to resolve\n */\n async host(nodeName) {\n const arp = await this.agentForService(Services.ADDRESS_RESOLUTION);\n if (arp == null) return null;\n const req = new AddressResolutionReq(nodeName);\n req.name = nodeName;\n req.recipient = arp;\n const rsp = await this.gw.request(req, REQUEST_TIMEOUT);\n if (rsp == null || ! Object.prototype.hasOwnProperty.call(rsp, 'address')) return null;\n return rsp.address;\n }\n}"],"names":["DatagramReq","DatagramNtf","RxFrameNtf"],"mappings":"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","x_google_ignoreList":[0]}
|