bitcore-node-zcash/plugins/mailbox.js

64 lines
2.0 KiB
JavaScript
Raw Normal View History

2014-08-20 09:05:27 -07:00
var microtime = require('microtime');
2014-08-20 09:49:57 -07:00
var mdb = require('../lib/MessageDb').default();
var logger = require('../lib/logger').logger;
var preconditions = require('preconditions').singleton();
2014-08-20 09:21:58 -07:00
2014-08-20 09:49:57 -07:00
var io;
module.exports.init = function(ext_io, config) {
2014-08-20 11:40:56 -07:00
logger.info('Using mailbox plugin');
2014-08-20 09:49:57 -07:00
preconditions.checkArgument(ext_io);
io = ext_io;
io.sockets.on('connection', function(socket) {
2014-08-20 09:21:58 -07:00
// when it requests sync, send him all pending messages
socket.on('sync', function(ts) {
2014-08-20 15:04:58 -07:00
logger.verbose('Sync requested by ' + socket.id);
2014-08-20 09:49:57 -07:00
logger.debug(' from timestamp ' + ts);
2014-08-20 09:21:58 -07:00
var rooms = socket.rooms;
if (rooms.length !== 2) {
socket.emit('insight-error', 'Must subscribe with public key before syncing');
return;
}
var to = rooms[1];
var upper_ts = Math.round(microtime.now());
2014-08-20 09:49:57 -07:00
logger.debug(' to timestamp ' + upper_ts);
2014-08-20 09:21:58 -07:00
mdb.getMessages(to, ts, upper_ts, function(err, messages) {
if (err) {
throw new Error('Couldn\'t get messages on sync request: ' + err);
}
2014-08-20 15:04:58 -07:00
logger.verbose('\tFound ' + messages.length + ' message' + (messages.length !== 1 ? 's' : ''));
2014-08-28 15:20:27 -07:00
if (messages.length) {
for (var i = 0; i < messages.length; i++) {
broadcastMessage(messages[i], socket);
}
} else {
socket.emit('no messages');
2014-08-20 09:21:58 -07:00
}
});
});
// when it sends a message, add it to db
socket.on('message', function(m) {
2014-08-20 09:49:57 -07:00
logger.debug('Message sent from ' + m.pubkey + ' to ' + m.to);
2014-08-20 09:21:58 -07:00
mdb.addMessage(m, function(err) {
if (err) {
throw new Error('Couldn\'t add message to database: ' + err);
}
});
});
});
mdb.on('message', broadcastMessage);
};
2014-08-20 09:49:57 -07:00
var broadcastMessage = module.exports.broadcastMessage = function(message, socket) {
preconditions.checkState(io);
var s = socket || io.sockets.in(message.to);
logger.debug('sending message to ' + message.to);
s.emit('message', message);
}