@methodus/server
Version:
dynamic rpc components
156 lines • 7.14 kB
JavaScript
;
// <references path='../interfaces/methodus.ts' />
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const debug = require('debug')('tmla:methodus');
require("reflect-metadata");
const response_1 = require("../response");
const base_1 = require("./base");
const log_1 = require("../log");
const redis = require('redis');
const fp_1 = require("../fp");
const redis_addr = '//192.168.99.100:32768';
const metadataKey = 'methodus';
let Redis = class Redis extends base_1.BaseServer {
constructor(options) {
super();
this.options = options;
}
useClass(classType) {
new RedisRouter(classType);
}
_sendEvent(methodEvent) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
let pub = redis.createClient(this.options.server);
log_1.logger.log('redis client created ');
pub.publish('event-bus', JSON.stringify(methodEvent));
log_1.logger.log('published event', methodEvent);
resolve(methodEvent);
});
});
}
publish(pub, methodinformation, methodMessage) {
return __awaiter(this, void 0, void 0, function* () {
pub.publish(methodinformation.name, JSON.stringify(methodMessage));
});
}
_send(functionArgs, methodinformation, paramsMap) {
return __awaiter(this, void 0, void 0, function* () {
log_1.logger.debug(functionArgs, methodinformation);
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
let pub = redis.createClient(this.options.server);
let sub = redis.createClient(this.options.client);
var corr = generateUuid();
sub.subscribe(corr);
sub.on('message', (destination, msg) => {
if (corr == destination) {
log_1.logger.info('recieved the call result', msg);
let m = fp_1.fp.maybeJson(msg);
if (m.statusCode && m.error)
reject(m);
else
resolve(m);
}
});
const methodMessage = new response_1.MethodMessage(methodinformation.propertyKey, paramsMap, methodinformation, functionArgs, corr);
yield this.publish(pub, methodinformation, methodMessage);
}));
});
}
};
__decorate([
log_1.Log(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], Redis.prototype, "useClass", null);
__decorate([
log_1.Log(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [response_1.MethodEvent]),
__metadata("design:returntype", Promise)
], Redis.prototype, "_sendEvent", null);
__decorate([
log_1.Log(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object, Object]),
__metadata("design:returntype", Promise)
], Redis.prototype, "publish", null);
__decorate([
log_1.Log(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object, Object]),
__metadata("design:returntype", Promise)
], Redis.prototype, "_send", null);
Redis = __decorate([
log_1.LogClass(log_1.logger),
__metadata("design:paramtypes", [Object])
], Redis);
exports.Redis = Redis;
function generateUuid() {
return Math.random().toString() +
Math.random().toString() +
Math.random().toString();
}
let RedisServer = class RedisServer {
constructor() {
this.connection = null;
}
};
RedisServer = __decorate([
log_1.LogClass(log_1.logger),
__metadata("design:paramtypes", [])
], RedisServer);
exports.RedisServer = RedisServer;
let RedisRouter = class RedisRouter {
constructor(obj) {
let proto = fp_1.fp.maybeProto(obj);
let methodus = fp_1.fp.maybeMethodus(proto);
let pub = redis.createClient(redis_addr);
let sub = redis.createClient(redis_addr);
let q = methodus.name;
sub.subscribe(q);
if (proto.methodus._events && Object.keys(proto.methodus._events).length > 0) {
let eventsub = redis.createClient(redis_addr);
eventsub.subscribe('event-bus');
eventsub.on('message', (destination, msg) => __awaiter(this, void 0, void 0, function* () {
let parsedMessage = fp_1.fp.maybeJson(msg);
if (proto.methodus._events[parsedMessage.name]) {
let pkey = proto.methodus._events[parsedMessage.name].propertyKey;
let result = yield proto[pkey](parsedMessage.value);
console.log('the result in the router after the call is', result);
}
}));
}
sub.on('message', (destination, msg) => __awaiter(this, void 0, void 0, function* () {
let parsedMessage = fp_1.fp.maybeJson(msg);
log_1.logger.debug('running local method', parsedMessage.to);
let result = yield proto[parsedMessage.to](...parsedMessage.args);
log_1.logger.log('the result in the router after the call is', result);
pub.publish(parsedMessage.correlationId, JSON.stringify(result));
}));
}
};
RedisRouter = __decorate([
log_1.LogClass(log_1.logger),
__metadata("design:paramtypes", [Object])
], RedisRouter);
exports.RedisRouter = RedisRouter;
//# sourceMappingURL=redis.js.map