UNPKG

fitbit-asap

Version:

Send peer messages reliably on Fitbit OS.

104 lines 2.79 kB
import { __read, __spread } from "tslib"; import { readFileSync, unlinkSync, writeFileSync } from "fs"; import { peerSocket } from "messaging"; var debug = false; var queue = []; try { queue = readFileSync("_asap_queue", "cbor"); if (!Array.isArray(queue)) { queue = []; } } catch (error) { queue = []; } function enqueue(message, options) { var id = queue.length > 0 ? Math.max.apply(Math, __spread(queue)) + 1 : 1; var timeout = Date.now() + (options && options.timeout ? options.timeout : 86400000); var data = ["asap_message", id, timeout, message]; writeFileSync("_asap_" + id, data, "cbor"); queue.push(id); writeFileSync("_asap_queue", queue, "cbor"); if (queue.length === 1) { process(); } debug && console.log("Enqueued message #" + id); } function dequeue(id) { if (id) { for (var i in queue) { if (queue[i] === id) { try { unlinkSync("_asap_" + id); } catch (error) { debug && console.log(error); } queue.splice(i, 1); break; } } debug && console.log("Dequeued message #" + id); } else { for (var i in queue) { unlinkSync("_asap_" + queue[i]); } queue = []; debug && console.log("Dequeued all messages"); } writeFileSync("_asap_queue", queue, "cbor"); process(); } function process() { if (queue.length > 0) { var id = queue[0]; try { var message = readFileSync("_asap_" + id, "cbor"); var timeout = message[2]; if (timeout < Date.now()) { dequeue(id); } else { try { peerSocket.send(message); } catch (error) { debug && console.log(error); } } } catch (_a) { dequeue(id); } } } peerSocket.addEventListener("open", function () { debug && console.log("Peer socket opened"); process(); }); peerSocket.addEventListener("message", function (event) { var type = event.data[0]; var id = event.data[1]; var timeout = event.data[2]; var message = event.data[3]; if (type == "asap_message") { asap.onmessage(message); try { peerSocket.send(["asap_receipt", id]); } catch (error) { debug && console.log(error); } } else if (type == "asap_receipt") { dequeue(id); } }); var asap = { send: enqueue, cancel: dequeue, onmessage: function () { } }; export default asap; //# sourceMappingURL=app.js.map