migme-seagull
Version:
Migme Chat
63 lines (57 loc) • 2.05 kB
JavaScript
;
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'];