UNPKG

@micro.ts/core

Version:

Microservice framework with Typescript

82 lines (81 loc) 3.54 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SocketIOBroker = void 0; const AbstractBroker_1 = require("../AbstractBroker"); const socket_io_1 = require("socket.io"); class SocketIOBroker extends AbstractBroker_1.AbstractBroker { constructor() { super(...arguments); this.name = 'SocketIoBroker'; this.routeMapper = (def) => { let basePart = def.base; if (basePart.indexOf('/') !== 0) { basePart = `/${basePart}`; } let controllerPart = def.controller; if (controllerPart.indexOf('/') !== 0) { controllerPart = `/${controllerPart}`; } let handlerPart = def.handler; if (handlerPart.indexOf('/') !== 0 && handlerPart.length > 0) { handlerPart = `/${handlerPart}`; } return `${basePart}${controllerPart}${handlerPart}`.replace('//', '/'); }; this.requestMapper = (clientId, query, headers, body, path, socket) => __awaiter(this, void 0, void 0, function* () { const act = { request: { params: {}, path, headers: Object.assign(Object.assign({}, headers), { socket_id: clientId }), method: 'post', body, qs: query, raw: { clientId, query, body, headers, path }, }, connection: socket, }; return act; }); } construct() { this.server = new socket_io_1.Server(this.config); } getConnection() { return this.server; } onDisconnected(cb) { } /** * Start listening */ start() { return __awaiter(this, void 0, void 0, function* () { this.construct(); this.server.on('close', (e) => this.handleConnectionError(e)); this.server.on('error', (e) => this.handleConnectionError(e)); this.server.on('connection', (socket) => { const clientId = socket.id; const query = socket.handshake.query; const headers = socket.handshake.headers; this.registeredRoutes.forEach((defs, key) => { socket.on(key, (body) => __awaiter(this, void 0, void 0, function* () { const action = yield this.requestMapper(clientId, query, headers, body, key, socket); const handler = this.actionToRouteMapper(key, action, defs); const response = yield handler(action); socket.emit(key, response.response); })); }); }); }); } } exports.SocketIOBroker = SocketIOBroker;