sync/src/partition/announcementrefresher.js

58 lines
1.5 KiB
JavaScript
Raw Normal View History

2021-03-21 21:37:15 -07:00
import { v4 as uuidv4 } from 'uuid';
2017-04-04 23:02:31 -07:00
2017-07-08 20:11:54 -07:00
const LOGGER = require('@calzoneman/jsli')('announcementrefresher');
2016-07-03 21:28:43 -07:00
var SERVER;
class AnnouncementRefresher {
constructor(pubClient, subClient, channel) {
2016-07-03 21:28:43 -07:00
this.pubClient = pubClient;
this.subClient = subClient;
this.channel = channel;
2021-03-21 21:37:15 -07:00
this.uuid = uuidv4();
2016-07-03 21:28:43 -07:00
process.nextTick(this.init.bind(this));
}
init() {
SERVER = require('../server').getServer();
SERVER.on('announcement', this.sendAnnouncement.bind(this));
this.subClient.once('ready', () => {
this.subClient.on('message', this.handleMessage.bind(this));
this.subClient.subscribe(this.channel);
2016-07-03 21:28:43 -07:00
});
}
handleMessage(channel, message) {
if (channel !== this.channel) {
LOGGER.warn('Unexpected message from channel "%s"', channel);
2016-07-03 21:28:43 -07:00
return;
}
var data;
try {
data = JSON.parse(message);
} catch (error) {
2017-04-04 23:02:31 -07:00
LOGGER.error('Unable to unmarshal server announcement: ' + error.stack
2016-07-03 21:28:43 -07:00
+ '\nMessage was: ' + message);
return;
}
if (data.partitionID === this.uuid) {
return;
}
2016-07-14 23:19:40 -07:00
SERVER.setAnnouncement(data.data);
2016-07-03 21:28:43 -07:00
}
sendAnnouncement(data) {
const message = JSON.stringify({
2016-07-14 23:19:40 -07:00
data: data,
2016-07-03 21:28:43 -07:00
partitionID: this.uuid
});
this.pubClient.publish(this.channel, message);
2016-07-03 21:28:43 -07:00
}
}
export { AnnouncementRefresher };