forked from nestjs/nest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsocket-server-provider.ts
36 lines (30 loc) · 1.5 KB
/
socket-server-provider.ts
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
import { SocketsContainer } from './container';
import { ObservableSocket } from './observable-socket';
import { ObservableSocketServer } from './interfaces/observable-socket-server.interface';
import { validatePath } from '@nestjs/common/utils/shared.utils';
import { ApplicationConfig } from '@nestjs/core/application-config';
export class SocketServerProvider {
constructor(
private readonly socketsContainer: SocketsContainer,
private readonly applicationConfig: ApplicationConfig) {}
public scanForSocketServer(namespace: string, port: number): ObservableSocketServer {
const observableServer = this.socketsContainer.getServer(namespace, port);
return observableServer ? observableServer : this.createSocketServer(namespace, port);
}
private createSocketServer(namespace: string, port: number) {
const server = this.getServerOfNamespace(namespace, port);
const observableSocket = ObservableSocket.create(server);
this.socketsContainer.addServer(namespace, port, observableSocket);
return observableSocket;
}
private getServerOfNamespace(namespace: string, port: number) {
const adapter = this.applicationConfig.getIoAdapter();
if (namespace && adapter.createWithNamespace) {
return adapter.createWithNamespace(port, this.validateNamespace(namespace));
}
return adapter.create(port);
}
private validateNamespace(namespace: string): string {
return validatePath(namespace);
}
}