'use strict'; const assert = require('assert'); const is = require('is-type-of'); const cluster = require('./lib'); const symbols = require('./lib/symbol'); const APIClientBase = require('./lib/api_client'); /** * Create an Wrapper * * @param {Function} clientClass - client class * @param {Object} options - wrapper options * @return {ClientWrapper} wrapper */ module.exports = cluster; /** * Close a ClusterClient * * @param {Object} client - ClusterClient instance to be closed * @return {Promise} returns a promise which will be resolved after fully closed */ module.exports.close = client => { assert(is.function(client[symbols.close]), '[cluster#close] client should be instanceof ClusterClient'); return client[symbols.close](); }; /** * API Client SuperClass * * @example * --------------------------------------------- * class ClusterClient extends APIClientBase { * get DataClient() { * return require('./supports/client'); * } * get delegates() { * return { * unPublish: 'invokeOneway', * }; * } * get clusterOptions() { * return { * responseTimeout: 1000, * port, * }; * } * subscribe(...args) { * return this._client.subscribe(...args); * } * unSubscribe(...args) { * return this._client.unSubscribe(...args); * } * publish(...args) { * return this._client.publish(...args); * } * unPublish(...args) { * return this._client.unPublish(...args); * } * close() { * return this._client.close(); * } * } */ module.exports.APIClientBase = APIClientBase;