fitbit-asap
Version:
Send peer messages reliably on Fitbit OS.
104 lines • 2.79 kB
JavaScript
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