UNPKG

@methodus/server

Version:
156 lines 7.14 kB
"use strict"; // <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