import logger from '../../utils/Logger';
import Utils from '../../utils/Utils';
import { AbstractUIServer } from './AbstractUIServer';
-import { UIServiceUtils } from './ui-services/UIServiceUtils';
+import { UIServerUtils } from './UIServerUtils';
const moduleName = 'UIHttpServer';
public start(): void {
this.httpServer.on('request', this.requestListener.bind(this) as RequestListener);
- if (this.httpServer.listening === false) {
- this.httpServer.listen(this.uiServerConfiguration.options);
- }
+ this.startHttpServer();
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
try {
if (this.responseHandlers.has(uuid) === true) {
const res = this.responseHandlers.get(uuid) as ServerResponse;
- res.writeHead(this.responseStatusToStatusCode(payload.status), {
- 'Content-Type': 'application/json',
- });
- res.end(JSON.stringify(payload));
- this.responseHandlers.delete(uuid);
+ res
+ .writeHead(this.responseStatusToStatusCode(payload.status), {
+ 'Content-Type': 'application/json',
+ })
+ .end(JSON.stringify(payload));
} else {
logger.error(
`${this.logPrefix(moduleName, 'sendResponse')} Response for unknown request id: ${uuid}`
`${this.logPrefix(moduleName, 'sendResponse')} Error at sending response id '${uuid}':`,
error
);
+ } finally {
+ this.responseHandlers.delete(uuid);
}
}
private requestListener(req: IncomingMessage, res: ServerResponse): void {
this.authenticate(req, (err) => {
if (err) {
- res.setHeader('Content-Type', 'text/plain');
- res.setHeader('WWW-Authenticate', 'Basic realm=users');
- res.writeHead(StatusCodes.UNAUTHORIZED);
- res.end(`${StatusCodes.UNAUTHORIZED} Unauthorized`);
+ res
+ .writeHead(StatusCodes.UNAUTHORIZED, {
+ 'Content-Type': 'text/plain',
+ 'WWW-Authenticate': 'Basic realm=users',
+ })
+ .end(`${StatusCodes.UNAUTHORIZED} Unauthorized`)
+ .destroy();
req.destroy();
- res.destroy();
}
});
// Expected request URL pathname: /ui/:version/:procedureName
const uuid = Utils.generateUUID();
this.responseHandlers.set(uuid, res);
try {
- if (UIServiceUtils.isProtocolAndVersionSupported(protocol, version) === false) {
- throw new BaseError(`Unsupported UI protocol version: '/${protocol}/${version}'`);
+ const fullProtocol = `${protocol}${version}`;
+ if (UIServerUtils.isProtocolAndVersionSupported(fullProtocol) === false) {
+ throw new BaseError(`Unsupported UI protocol version: '${fullProtocol}'`);
}
this.registerProtocolVersionUIService(version);
req.on('error', (error) => {