forked from nestjs/nest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsocket-module.js
49 lines (49 loc) · 2.82 KB
/
socket-module.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
const container_1 = require("./container");
const web_sockets_controller_1 = require("./web-sockets-controller");
const socket_server_provider_1 = require("./socket-server-provider");
const constants_1 = require("./constants");
const ws_context_creator_1 = require("./context/ws-context-creator");
const ws_proxy_1 = require("./context/ws-proxy");
const exception_filters_context_1 = require("./context/exception-filters-context");
const pipes_consumer_1 = require("@nestjs/core/pipes/pipes-consumer");
const pipes_context_creator_1 = require("@nestjs/core/pipes/pipes-context-creator");
const guards_context_creator_1 = require("@nestjs/core/guards/guards-context-creator");
const guards_consumer_1 = require("@nestjs/core/guards/guards-consumer");
const interceptors_context_creator_1 = require("@nestjs/core/interceptors/interceptors-context-creator");
const interceptors_consumer_1 = require("@nestjs/core/interceptors/interceptors-consumer");
class SocketModule {
constructor() {
this.socketsContainer = new container_1.SocketsContainer();
}
setup(container, config) {
this.webSocketsController = new web_sockets_controller_1.WebSocketsController(new socket_server_provider_1.SocketServerProvider(this.socketsContainer, config), container, config, this.getContextCreator(container));
const modules = container.getModules();
modules.forEach(({ components }, moduleName) => this.hookGatewaysIntoServers(components, moduleName));
}
hookGatewaysIntoServers(components, moduleName) {
components.forEach(wrapper => this.hookGatewayIntoServer(wrapper, moduleName));
}
hookGatewayIntoServer(wrapper, moduleName) {
const { instance, metatype, isNotMetatype } = wrapper;
if (isNotMetatype) {
return;
}
const metadataKeys = Reflect.getMetadataKeys(metatype);
if (metadataKeys.indexOf(constants_1.GATEWAY_METADATA) < 0) {
return;
}
this.webSocketsController.hookGatewayIntoServer(instance, metatype, moduleName);
}
close() {
const servers = this.socketsContainer.getAllServers();
servers.forEach(({ server }) => server.close());
this.socketsContainer.clear();
}
getContextCreator(container) {
return new ws_context_creator_1.WsContextCreator(new ws_proxy_1.WsProxy(), new exception_filters_context_1.ExceptionFiltersContext(), new pipes_context_creator_1.PipesContextCreator(), new pipes_consumer_1.PipesConsumer(), new guards_context_creator_1.GuardsContextCreator(container), new guards_consumer_1.GuardsConsumer(), new interceptors_context_creator_1.InterceptorsContextCreator(container), new interceptors_consumer_1.InterceptorsConsumer());
}
}
exports.SocketModule = SocketModule;