74 lines
1.7 KiB
TypeScript
74 lines
1.7 KiB
TypeScript
import WebSocket = require('ws');
|
|
import chalk = require('chalk');
|
|
|
|
import { EventEmitter } from 'events';
|
|
import { Logger } from './Logger';
|
|
import { WebSocketHandler } from './WebSocketHandler';
|
|
import { WebServer } from './WebServer';
|
|
import { Channel } from './Channel';
|
|
import { Client } from './Client';
|
|
|
|
const PORT = process.env.PORT;
|
|
|
|
class Server extends EventEmitter {
|
|
logger: Logger;
|
|
wsh: WebSocketHandler;
|
|
ws: WebServer;
|
|
channels: Channel[];
|
|
|
|
constructor () {
|
|
super();
|
|
|
|
this.bindEventListeners();
|
|
|
|
this.channels = [];
|
|
|
|
this.logger = new Logger('server', chalk.green);
|
|
this.logger.debug(`port: ${PORT}`);
|
|
this.wsh = new WebSocketHandler(this);
|
|
this.ws = new WebServer(parseInt(PORT));
|
|
|
|
this.ws.linkWebSocketServer(this.wsh.wss);
|
|
|
|
this.emit('start');
|
|
}
|
|
|
|
bindEventListeners() {
|
|
this.on('start', () => {
|
|
this.logger.log('Server started.');
|
|
});
|
|
}
|
|
|
|
setClientChannel(cl: Client, str: string) {
|
|
// TODO put client in channel or create new channel
|
|
|
|
let channelExists = false;
|
|
let ch: Channel;
|
|
|
|
for (let c of this.channels) {
|
|
if (str == c._id) channelExists = true;
|
|
ch = c;
|
|
}
|
|
|
|
|
|
if (!channelExists) {
|
|
ch = new Channel(str, this);
|
|
}
|
|
|
|
if (ch.hasClient(cl)) return;
|
|
|
|
|
|
if (ch.isLobby() && ch.connectedClients.length >= 20) {
|
|
let new_id = ch._id + ch.getIncrementedIDNumber();
|
|
ch = this.channels.find(ch => new_id == str);
|
|
if (!ch) ch = new Channel(new_id, this);
|
|
}
|
|
|
|
ch.connectClient(cl);
|
|
}
|
|
}
|
|
|
|
export {
|
|
Server
|
|
}
|