|
@@ -1,18 +1,61 @@
|
|
|
const logger = require('@alias/logger')('growi:service:system-events:SyncPageStatusService');
|
|
const logger = require('@alias/logger')('growi:service:system-events:SyncPageStatusService');
|
|
|
|
|
|
|
|
-class SyncPageStatusService {
|
|
|
|
|
|
|
+const ConfigPubsubMessage = require('../../models/vo/config-pubsub-message');
|
|
|
|
|
+const ConfigPubsubMessageHandlable = require('../config-pubsub/handlable');
|
|
|
|
|
+
|
|
|
|
|
+class SyncPageStatusService extends ConfigPubsubMessageHandlable {
|
|
|
|
|
+
|
|
|
|
|
+ constructor(crowi, configPubsub, socketIoService) {
|
|
|
|
|
+ super();
|
|
|
|
|
|
|
|
- constructor(crowi, configPubsubService, socketIoService) {
|
|
|
|
|
this.crowi = crowi;
|
|
this.crowi = crowi;
|
|
|
- this.configPubsubService = configPubsubService;
|
|
|
|
|
|
|
+ this.configPubsub = configPubsub;
|
|
|
this.socketIoService = socketIoService;
|
|
this.socketIoService = socketIoService;
|
|
|
|
|
|
|
|
this.emitter = crowi.events.page;
|
|
this.emitter = crowi.events.page;
|
|
|
|
|
|
|
|
- this.init();
|
|
|
|
|
|
|
+ this.initSystemEventListeners();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @inheritdoc
|
|
|
|
|
+ */
|
|
|
|
|
+ shouldHandleConfigPubsubMessage(configPubsubMessage) {
|
|
|
|
|
+ const { eventName } = configPubsubMessage;
|
|
|
|
|
+ if (eventName !== 'pageStatusUpdated') {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @inheritdoc
|
|
|
|
|
+ */
|
|
|
|
|
+ async handleConfigPubsubMessage(configPubsubMessage) {
|
|
|
|
|
+ const { socketIoEventName, page, user } = configPubsubMessage;
|
|
|
|
|
+ const { socketIoService } = this;
|
|
|
|
|
+
|
|
|
|
|
+ // emit the updated information to clients
|
|
|
|
|
+ socketIoService.getDefaultSocket().emit(socketIoEventName, { page, user });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ async publishToOtherServers(socketIoEventName, page, user) {
|
|
|
|
|
+ const { configPubsub } = this;
|
|
|
|
|
+
|
|
|
|
|
+ if (configPubsub != null) {
|
|
|
|
|
+ const configPubsubMessage = new ConfigPubsubMessage('pageStatusUpdated', { socketIoEventName, page, user });
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ await configPubsub.publish(configPubsubMessage);
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (e) {
|
|
|
|
|
+ logger.error('Failed to publish update message with configPubsub: ', e.message);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- init() {
|
|
|
|
|
|
|
+ initSystemEventListeners() {
|
|
|
const { socketIoService } = this;
|
|
const { socketIoService } = this;
|
|
|
const { pageService } = this.crowi;
|
|
const { pageService } = this.crowi;
|
|
|
|
|
|
|
@@ -22,21 +65,28 @@ class SyncPageStatusService {
|
|
|
|
|
|
|
|
page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
|
|
page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
|
|
|
socketIoService.getDefaultSocket().emit('page:create', { page, user, socketClientId });
|
|
socketIoService.getDefaultSocket().emit('page:create', { page, user, socketClientId });
|
|
|
|
|
+
|
|
|
|
|
+ this.publishToOtherServers('page:create', page, user);
|
|
|
});
|
|
});
|
|
|
this.emitter.on('update', (page, user, socketClientId) => {
|
|
this.emitter.on('update', (page, user, socketClientId) => {
|
|
|
logger.debug('\'update\' event emitted.');
|
|
logger.debug('\'update\' event emitted.');
|
|
|
|
|
|
|
|
page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
|
|
page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
|
|
|
socketIoService.getDefaultSocket().emit('page:update', { page, user, socketClientId });
|
|
socketIoService.getDefaultSocket().emit('page:update', { page, user, socketClientId });
|
|
|
|
|
+
|
|
|
|
|
+ this.publishToOtherServers('page:update', page, user);
|
|
|
});
|
|
});
|
|
|
this.emitter.on('delete', (page, user, socketClientId) => {
|
|
this.emitter.on('delete', (page, user, socketClientId) => {
|
|
|
logger.debug('\'delete\' event emitted.');
|
|
logger.debug('\'delete\' event emitted.');
|
|
|
|
|
|
|
|
page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
|
|
page = pageService.serializeToObj(page); // eslint-disable-line no-param-reassign
|
|
|
socketIoService.getDefaultSocket().emit('page:delete', { page, user, socketClientId });
|
|
socketIoService.getDefaultSocket().emit('page:delete', { page, user, socketClientId });
|
|
|
|
|
+
|
|
|
|
|
+ this.publishToOtherServers('page:delete', page, user);
|
|
|
});
|
|
});
|
|
|
this.emitter.on('saveOnHackmd', (page) => {
|
|
this.emitter.on('saveOnHackmd', (page) => {
|
|
|
socketIoService.getDefaultSocket().emit('page:editingWithHackmd', { page });
|
|
socketIoService.getDefaultSocket().emit('page:editingWithHackmd', { page });
|
|
|
|
|
+ this.publishToOtherServers('page:editingWithHackmd', page);
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|