@pandorajs/hub
Version:
pandora.js messenge hub
122 lines • 4.57 kB
JavaScript
"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