UNPKG

migme-seagull

Version:
63 lines (57 loc) 2.05 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Dinghy; var _migmeFerry = require('migme-ferry'); var _config = require('../config'); function Dinghy() { var _currentTransactions = new Set(); return { get currentTransactions() { return _currentTransactions; }, /** * Send a packet * * @param {Packet} packet - Packet to send * @param {PacketType} waitForType - If it needs to wait for a specific packet type to finish * @return {Promise} * @example * dinghy.send(packet, PacketType.GET_CONTACTS_COMPLETE) */ send: function send(packet, waitForType) { _currentTransactions.add(packet.transactionId); return new Promise(function (resolve, reject) { var receivedPackets = []; var onPacketReceived = function onPacketReceived(e) { var received = new _migmeFerry.Packet(); received.fromJSON(e); if (received.transactionId === packet.transactionId) { if (waitForType) { receivedPackets.push(received); if (received.type === waitForType) { _config.ferry.off(_migmeFerry.FerryEvent.PACKET_RECEIVED, onPacketReceived); _currentTransactions.delete(received.transactionId); resolve(receivedPackets); } else if (received.type === _migmeFerry.PacketType.ERROR) { reject(receivedPackets); } } else { _config.ferry.off(_migmeFerry.FerryEvent.PACKET_RECEIVED, onPacketReceived); _currentTransactions.delete(received.transactionId); if (received.type === _migmeFerry.PacketType.ERROR) { reject(received); } else { resolve(received); } } } }; _config.ferry.on(_migmeFerry.FerryEvent.PACKET_RECEIVED, onPacketReceived); _config.ferry.send(packet); }); } }; } module.exports = exports['default'];