UNPKG

@nexex/orderbook

Version:
89 lines 4.01 kB
"use strict"; 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 __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var common_1 = require("@nestjs/common"); var websockets_1 = require("@nestjs/websockets"); var orderbook_1 = require("@nexex/types/orderbook"); var cerialize_1 = require("cerialize"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var logger_1 = __importDefault(require("../logger")); var WsGateway = /** @class */ (function () { function WsGateway(events$) { this.events$ = events$; } /** * subscribe new order of this market * on client can only subscribe one market, exit others when subscribe a new one * @param client * @param market */ WsGateway.prototype.onSubscribe = function (client, market) { var marketKey = market.baseTokenAddr + "-" + market.quoteTokenAddr; for (var _i = 0, _a = Object.keys(client.rooms); _i < _a.length; _i++) { var roomId = _a[_i]; if (roomId !== client.id && roomId !== marketKey) { client.leave(roomId); } } logger_1.default.info('user subscribe %s', marketKey); client.join(marketKey); return { event: 'subscribe', data: 'success' }; }; WsGateway.prototype.onNotify = function (client, req) { this.events$.next({ type: orderbook_1.ObEventTypes.WS_UPSTREAM_EVENT, from: client.id, payload: req }); }; WsGateway.prototype.afterInit = function (server) { var _this = this; this.events$ .pipe(operators_1.filter(function (event) { return event.type === orderbook_1.ObEventTypes.DOWNSTREAM_EVENT; })) .subscribe(function (event) { var wrappedEvent = event.payload; return _this.server .to(event.to) .emit('orderbook', { type: wrappedEvent.type, payload: cerialize_1.Serialize(wrappedEvent.payload), id: wrappedEvent.id }); }); }; __decorate([ websockets_1.WebSocketServer(), __metadata("design:type", Object) ], WsGateway.prototype, "server", void 0); __decorate([ websockets_1.SubscribeMessage('subscribe'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Object) ], WsGateway.prototype, "onSubscribe", null); __decorate([ websockets_1.SubscribeMessage('rpc'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", void 0) ], WsGateway.prototype, "onNotify", null); WsGateway = __decorate([ websockets_1.WebSocketGateway(), __param(0, common_1.Inject('EventSubject')), __metadata("design:paramtypes", [rxjs_1.Subject]) ], WsGateway); return WsGateway; }()); exports.WsGateway = WsGateway; //# sourceMappingURL=ws.gateway.js.map