"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
const util_1 = require("util");
const socket_events_host_factory_1 = require("./socket-events-host-factory");
class SocketServerProvider {
constructor(socketsContainer, applicationConfig) {
this.socketsContainer = socketsContainer;
this.applicationConfig = applicationConfig;
}
scanForSocketServer(options, port) {
const socketEventsHost = this.socketsContainer.getSocketEventsHostByPort(port);
return socketEventsHost
? this.createWithNamespace(options, port, socketEventsHost)
: this.createSocketServer(options, port);
}
createSocketServer(options, port) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const _a = options, { namespace, server } = _a, partialOptions = tslib_1.__rest(_a, ["namespace", "server"]);
const adapter = this.applicationConfig.getIoAdapter();
const ioServer = adapter.create(port, partialOptions);
const observableSocket = socket_events_host_factory_1.SocketEventsHostFactory.create(ioServer);
this.socketsContainer.addSocketEventsHost(null, port, observableSocket);
return this.createWithNamespace(options, port, observableSocket);
}
createWithNamespace(options, port, socketEventsHost) {
const { namespace } = options;
if (!namespace) {
return socketEventsHost;
}
const namespaceServer = this.getServerOfNamespace(options, port, socketEventsHost.server);
const eventsHost = socket_events_host_factory_1.SocketEventsHostFactory.create(namespaceServer);
this.socketsContainer.addSocketEventsHost(namespace, port, eventsHost);
return eventsHost;
}
getServerOfNamespace(options, port, server) {
const adapter = this.applicationConfig.getIoAdapter();
return adapter.create(port, Object.assign(Object.assign({}, options), { namespace: this.validateNamespace(options.namespace || ''), server }));
}
validateNamespace(namespace) {
if (!util_1.isString(namespace)) {
return namespace;
}
return shared_utils_1.validatePath(namespace);
}
}
exports.SocketServerProvider = SocketServerProvider;