UNPKG

@pandorajs/hub

Version:

pandora.js messenge hub

122 lines 4.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ObjectDispatchHandler = void 0; const const_1 = require("../const"); const util_1 = require("util"); const ObjectProxyBehaviourManager_1 = require("./ObjectProxyBehaviourManager"); /** * ObjectDispatchHandler * Handle actions of Object Proxying */ class ObjectDispatchHandler { constructor(objectManager) { this.objectManager = objectManager; this.objectProxyBehaviourManager = ObjectProxyBehaviourManager_1.ObjectProxyBehaviourManager.getInstance(); } /** * Handle actions of Object Proxying * @param {ObjectMessage} message * @return {Promise<any>} */ async dispatch(message) { if (message.action === const_1.OBJECT_ACTION_INVOKE) { return this.invoke(message); } if (message.action === const_1.OBJECT_ACTION_GET_PROPERTY) { return this.getProperty(message); } if (message.action === const_1.OBJECT_ACTION_INTROSPECT) { return this.introspect(message); } if (message.action === const_1.OBJECT_ACTION_SUBSCRIBE) { return this.subscribe(message); } if (message.action === const_1.OBJECT_ACTION_UNSUBSCRIBE) { return this.unsubscribe(message); } } /** * Handle action OBJECT_ACTION_INVOKE * @param {ObjectMessage} message * @return {Promise<any>} */ async invoke(message) { const targetMethod = message.propertyName; const objectDescription = { name: message.remote.objectName, tag: message.remote.objectTag, }; const obj = this.objectManager.getPublishedObject(objectDescription); if (obj[targetMethod]) { return this.objectProxyBehaviourManager .getBehaviour(objectDescription) .host.invoke(obj, targetMethod, message.data); } throw new Error(util_1.format('Cannot found method called %s within object %j', targetMethod, objectDescription)); } /** * Handle action OBJECT_ACTION_GET_PROPERTY * @param {ObjectMessage} message * @return {Promise<any>} */ getProperty(message) { const propertyName = message.propertyName; const objectDescription = { name: message.remote.objectName, tag: message.remote.objectTag, }; const obj = this.objectManager.getPublishedObject(objectDescription); if (obj[propertyName]) { return this.objectProxyBehaviourManager .getBehaviour(objectDescription) .host.getProperty(obj, propertyName); } } /** * Handle action OBJECT_ACTION_SUBSCRIBE * @param {SubscribeMessage} message * @return {Promise<any>} */ async subscribe(message) { const register = message.register; const objectDescription = { name: message.remote.objectName, tag: message.remote.objectTag, }; const obj = this.objectManager.getPublishedObject(objectDescription); const behaviour = this.objectProxyBehaviourManager.getBehaviour(objectDescription); await behaviour.host.subscribe(this.objectManager.hubClient, objectDescription, obj, register); } /** * Handle action OBJECT_ACTION_UNSUBSCRIBE * @param {SubscribeMessage} message * @return {Promise<any>} */ async unsubscribe(message) { const register = message.register; const objectDescription = { name: message.remote.objectName, tag: message.remote.objectTag, }; const obj = this.objectManager.getPublishedObject(objectDescription); const behaviour = this.objectProxyBehaviourManager.getBehaviour(objectDescription); await behaviour.host.unsubscribe(this.objectManager.hubClient, objectDescription, obj, register); } /** * Handle action OBJECT_ACTION_INTROSPECT * @param {ObjectMessage} message * @return {Introspection} */ introspect(message) { const objectDescription = { name: message.remote.objectName, tag: message.remote.objectTag, }; const obj = this.objectManager.getPublishedObject(objectDescription); return this.objectProxyBehaviourManager .getBehaviour(objectDescription) .host.introspect(obj); } } exports.ObjectDispatchHandler = ObjectDispatchHandler; //# sourceMappingURL=ObjectDispatchHandler.js.map