Browse Source

WIP: impl NchanPubsubDelegator

Yuki Takei 5 years ago
parent
commit
34d4c0a810

+ 17 - 0
src/server/service/config-pubsub/base.js

@@ -0,0 +1,17 @@
+class ConfigPubsubDelegator {
+
+  constructor(uri) {
+    this.uri = uri;
+
+    if (uri == null) {
+      throw new Error('uri must be set');
+    }
+  }
+
+  connect() {
+    throw new Error('implement this');
+  }
+
+}
+
+module.exports = ConfigPubsubDelegator;

+ 43 - 0
src/server/service/config-pubsub/index.js

@@ -0,0 +1,43 @@
+const logger = require('@alias/logger')('growi:service:ConfigPubsubFactory');
+
+const envToModuleMappings = {
+  redis:   'redis',
+  nchan:   'nchan',
+};
+
+class ConfigPubsubDelegatorFactory {
+
+  initializeDelegator(crowi) {
+    const type = crowi.configManager.getConfig('crowi', 'configPubsub:serverType');
+
+    if (type == null) {
+      logger.info('Config pub/sub server is not defined.');
+      return;
+    }
+
+    logger.info(`Config pub/sub server type '${type}' is set.`);
+
+    const module = envToModuleMappings[type];
+
+    const modulePath = `./${module}`;
+    this.delegator = require(modulePath)(crowi);
+
+    if (this.delegator == null) {
+      logger.warn('Failed to initialize config pub/sub delegator.');
+    }
+  }
+
+  getDelegator(crowi) {
+    if (this.delegator == null) {
+      this.initializeDelegator(crowi);
+    }
+    return this.delegator;
+  }
+
+}
+
+const factory = new ConfigPubsubDelegatorFactory();
+
+module.exports = (crowi) => {
+  return factory.getDelegator(crowi);
+};

+ 39 - 0
src/server/service/config-pubsub/nchan.js

@@ -0,0 +1,39 @@
+const logger = require('@alias/logger')('growi:service:config-pubsub:nchan');
+
+const ConfigPubsubDelegator = require('./base');
+
+
+class NchanDelegator extends ConfigPubsubDelegator {
+
+  constructor(uri, publishPath, subscribePath) {
+    super(uri);
+
+    this.publishPath = publishPath;
+    this.subscribePath = subscribePath;
+  }
+
+  /**
+   * @inheritdoc
+   */
+  connect() {
+    // TODO implement
+  }
+
+}
+
+module.exports = function(crowi) {
+  const { configManager } = crowi;
+
+  const uri = configManager.getConfig('crowi', 'app:nchanUri');
+
+  // when nachan server URI is not set
+  if (uri == null) {
+    logger.warn('NCHAN_URI is not specified.');
+    return;
+  }
+
+  const publishPath = configManager.getConfig('crowi', 'configPubsub:nchan:publishPath');
+  const subscribePath = configManager.getConfig('crowi', 'configPubsub:nchan:subscribePath');
+
+  return new NchanDelegator(uri, publishPath, subscribePath);
+};

+ 5 - 0
src/server/service/config-pubsub/redis.js

@@ -0,0 +1,5 @@
+const logger = require('@alias/logger')('growi:service:config-pubsub:redis');
+
+module.exports = function(crowi) {
+  logger.warn('Config pub/sub with Redis has not implemented yet.');
+};