2024-06-22 21:26:49 -04:00
|
|
|
import EventEmitter from 'events';
|
|
|
|
|
import NetworkServer from '../NetworkServer.js';
|
|
|
|
|
import { Server, Socket } from 'net';
|
|
|
|
|
import IConfig from '../IConfig.js';
|
|
|
|
|
import TCPClient from './TCPClient.js';
|
|
|
|
|
import { IPDataManager } from '../IPData.js';
|
|
|
|
|
import { User } from '../User.js';
|
2024-07-16 08:29:52 -04:00
|
|
|
import pino from 'pino';
|
2024-05-27 00:06:05 -04:00
|
|
|
|
|
|
|
|
export default class TCPServer extends EventEmitter implements NetworkServer {
|
2024-06-22 21:26:49 -04:00
|
|
|
listener: Server;
|
|
|
|
|
Config: IConfig;
|
2024-07-16 08:29:52 -04:00
|
|
|
logger = pino({name: 'CVMTS.TCPServer'});
|
2024-06-22 21:26:49 -04:00
|
|
|
clients: TCPClient[];
|
2024-05-27 00:06:05 -04:00
|
|
|
|
2024-06-22 21:26:49 -04:00
|
|
|
constructor(config: IConfig) {
|
|
|
|
|
super();
|
|
|
|
|
this.Config = config;
|
|
|
|
|
this.listener = new Server();
|
|
|
|
|
this.clients = [];
|
|
|
|
|
this.listener.on('connection', (socket) => this.onConnection(socket));
|
|
|
|
|
}
|
2024-05-27 00:06:05 -04:00
|
|
|
|
2024-06-22 21:26:49 -04:00
|
|
|
private onConnection(socket: Socket) {
|
2024-07-16 08:29:52 -04:00
|
|
|
this.logger.info(`New TCP connection from ${socket.remoteAddress}`);
|
2024-06-22 21:26:49 -04:00
|
|
|
var client = new TCPClient(socket);
|
|
|
|
|
this.clients.push(client);
|
|
|
|
|
this.emit('connect', new User(client, IPDataManager.GetIPData(client.getIP()), this.Config));
|
|
|
|
|
}
|
2024-05-27 00:06:05 -04:00
|
|
|
|
2024-06-22 21:26:49 -04:00
|
|
|
start(): void {
|
|
|
|
|
this.listener.listen(this.Config.tcp.port, this.Config.tcp.host, () => {
|
2024-07-16 08:29:52 -04:00
|
|
|
this.logger.info(`TCP server listening on ${this.Config.tcp.host}:${this.Config.tcp.port}`);
|
2024-06-22 21:26:49 -04:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
stop(): void {
|
|
|
|
|
this.listener.close();
|
|
|
|
|
}
|
|
|
|
|
}
|