82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import * as plugins from './smartsocket.plugins';
|
|
|
|
// used in case no other server is supplied
|
|
import * as http from 'http';
|
|
import { Smartsocket } from './smartsocket.classes.smartsocket';
|
|
|
|
/**
|
|
* class socketServer
|
|
* handles the attachment of socketIo to whatever server is in play
|
|
*/
|
|
export class SocketServer {
|
|
private smartsocket: Smartsocket;
|
|
private httpServer: http.Server;
|
|
// wether httpServer is standalone
|
|
private standaloneServer = false;
|
|
private expressServer: any;
|
|
|
|
constructor(smartSocketInstance: Smartsocket) {
|
|
this.smartsocket = smartSocketInstance;
|
|
}
|
|
|
|
/**
|
|
* starts the server with another server
|
|
* also works with an express style server
|
|
*/
|
|
public async setExternalServer(serverType: 'express' | 'http', serverArg: any) {
|
|
if (serverType === 'http') {
|
|
this.httpServer = serverArg;
|
|
} else if (serverType === 'express') {
|
|
this.expressServer = serverArg;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* gets the server for socket.io
|
|
*/
|
|
public getServerForSocketIo() {
|
|
if (this.httpServer) {
|
|
return this.httpServer;
|
|
} else if (this.expressServer) {
|
|
return this.expressServer;
|
|
} else if (!this.httpServer && !this.expressServer) {
|
|
this.httpServer = new http.Server();
|
|
this.standaloneServer = true;
|
|
return this.httpServer;
|
|
} else {
|
|
throw new Error('no server specified!');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* starts listening to incoming sockets:
|
|
*/
|
|
public async start() {
|
|
const done = plugins.smartpromise.defer();
|
|
|
|
// handle http servers
|
|
// in case an external server has been set "this.standaloneServer" should be false
|
|
if (this.httpServer && this.standaloneServer) {
|
|
if (!this.smartsocket.options.port) {
|
|
console.log('there should be a port specifed for smartsocket!')
|
|
throw new Error('there should be a port specified for smartsocket')
|
|
}
|
|
this.httpServer.listen(this.smartsocket.options.port, () => {
|
|
console.log(`Server started in standalone mode on ${this.smartsocket.options.port}`);
|
|
done.resolve();
|
|
});
|
|
} else {
|
|
done.resolve();
|
|
}
|
|
|
|
// nothing else to do if express server is set
|
|
await done.promise;
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* closes the server
|
|
*/
|
|
public async stop() {}
|
|
}
|