UNPKG

omelop

Version:

[![Build Status](https://travis-ci.org/node-omelop/omelop.svg?branch=master)](https://travis-ci.org/node-omelop/omelop)

120 lines 7.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SIOConnector = void 0; const events_1 = require("events"); const http_1 = require("http"); let httpServer = (0, http_1.createServer)(); const siosocket_1 = require("./siosocket"); const socket_io_1 = require("socket.io"); let PKG_ID_BYTES = 4; let PKG_ROUTE_LENGTH_BYTES = 1; let PKG_HEAD_BYTES = PKG_ID_BYTES + PKG_ROUTE_LENGTH_BYTES; let curId = 1; /** * Connector that manager low level connection and protocol bewteen server and client. * Develper can provide their own connector to switch the low level prototol, such as tcp or probuf. */ class SIOConnector extends events_1.EventEmitter { constructor(port, host, opts) { super(); this.port = port; this.host = host; this.opts = opts; opts.pingTimeout = opts.pingTimeout || 60; opts.pingInterval = opts.pingInterval || 25; } /** * Start connector to listen the specified port */ start(cb) { let self = this; // issue https://gitee.com/NetEase/omelop-cn/issues/174 let opts; if (!!this.opts) { opts = this.opts; } else { opts = { transports: [ 'websocket', 'polling-xhr', 'polling-jsonp', 'polling' ] }; } opts.path = '/socket.io'; let sio = new socket_io_1.Server(httpServer, opts); let port = this.port; httpServer.listen(port, function () { console.log('sio Server listening at port %d', port); }); sio.on('connection', (socket) => { // this.wsocket.sockets.on('connection', function (socket) { let siosocket = new siosocket_1.SioSocket(curId++, socket); self.emit('connection', siosocket); siosocket.on('closing', function (reason) { siosocket.send({ route: 'onKick', reason: reason }); }); }); process.nextTick(cb); } /** * Stop connector */ stop(force, cb) { this.server.close(); process.nextTick(cb); } encode(reqId, route, msg) { if (reqId) { return composeResponse(reqId, route, msg); } else { return composePush(route, msg); } } /** * Decode client message package. * * Package format: * message id: 4bytes big-endian integer * route length: 1byte * route: route length bytes * body: the rest bytes * * @param {String} data socket.io package from client * @return {Object} message object */ decode(msg) { let index = 0; let id = parseIntField(msg, index, PKG_ID_BYTES); index += PKG_ID_BYTES; let routeLen = parseIntField(msg, index, PKG_ROUTE_LENGTH_BYTES); let route = msg.substr(PKG_HEAD_BYTES, routeLen); let body = msg.substr(PKG_HEAD_BYTES + routeLen); return { id: id, route: route, body: JSON.parse(body) }; } } exports.SIOConnector = SIOConnector; let composeResponse = function (msgId, route, msgBody) { return { id: msgId, body: msgBody }; }; let composePush = function (route, msgBody) { return JSON.stringify({ route: route, body: msgBody }); }; let parseIntField = function (str, offset, len) { let res = 0; for (let i = 0; i < len; i++) { if (i > 0) { res <<= 8; } res |= str.charCodeAt(offset + i) & 0xff; } return res; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvY29ubmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Nvbm5lY3RvcnMvc2lvY29ubmVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1DQUFzQztBQUN0QywrQkFBb0M7QUFDcEMsSUFBSSxVQUFVLEdBQUcsSUFBQSxtQkFBWSxHQUFFLENBQUM7QUFDaEMsMkNBQXdDO0FBRXhDLHlDQUFrRDtBQUVsRCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsSUFBSSxjQUFjLEdBQUcsWUFBWSxHQUFHLHNCQUFzQixDQUFDO0FBRTNELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUdkOzs7R0FHRztBQUNILE1BQWEsWUFBYSxTQUFRLHFCQUFZO0lBTzFDLFlBQVksSUFBWSxFQUFFLElBQVksRUFBRSxJQUF5QjtRQUM3RCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBSUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsRUFBYztRQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsdURBQXVEO1FBQ3ZELElBQUksSUFBeUIsQ0FBQztRQUM5QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDcEI7YUFDSTtZQUNELElBQUksR0FBRztnQkFDSCxVQUFVLEVBQUU7b0JBQ1IsV0FBVyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsU0FBUztpQkFDekQ7YUFDRyxDQUFDO1NBQ1o7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLGtCQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDNUIsNERBQTREO1lBQzVELElBQUksU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLE1BQU07Z0JBQ3BDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxLQUFjLEVBQUUsRUFBYztRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLEdBQVE7UUFDekMsSUFBSSxLQUFLLEVBQUU7WUFDUCxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDSCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxNQUFNLENBQUMsR0FBUTtRQUNYLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVkLElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pELEtBQUssSUFBSSxZQUFZLENBQUM7UUFFdEIsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUVqRSxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRCxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUVqRCxPQUFPO1lBQ0gsRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztTQUN6QixDQUFDO0lBQ04sQ0FBQztDQUVKO0FBdEdELG9DQXNHQztBQUVELElBQUksZUFBZSxHQUFHLFVBQVUsS0FBYSxFQUFFLEtBQWEsRUFBRSxPQUFZO0lBQ3RFLE9BQU87UUFDSCxFQUFFLEVBQUUsS0FBSztRQUNULElBQUksRUFBRSxPQUFPO0tBQ2hCLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixJQUFJLFdBQVcsR0FBRyxVQUFVLEtBQWEsRUFBRSxPQUFZO0lBQ25ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDO0FBRUYsSUFBSSxhQUFhLEdBQUcsVUFBVSxHQUFXLEVBQUUsTUFBYyxFQUFFLEdBQVc7SUFDbEUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDUCxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQ2I7UUFDRCxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQzVDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUMifQ==