siesta-lite
Version:
Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers
73 lines (49 loc) • 2.06 kB
text/typescript
import {NodeJsLogger} from "../../util/role/NodeJsLogger.js";
import {Base, Constructable} from "../../../generic/util/Common.js";
import {ServerEndPoint} from "./ServerEndPoint.js";
const ws = require('ws')
export class ConnectionServer extends NodeJsLogger(Base) {
serverClass : Constructable<ServerEndPoint>
serverConfig : Partial<ServerEndPoint>
port : number = 0
connectionServerWS : any
constructor (props : Partial<ConnectionServer>) {
super(props)
Object.assign(this, props)
}
start () : Promise<any> {
return new Promise((resolve, reject) => {
const connectionServerWS = this.connectionServerWS = new ws.Server({
clientTracking : true,
port : this.port
}, () => {
this.port = this.connectionServerWS.address().port
resolve()
})
connectionServerWS.on('connection', wsClient => {
this.debug("Connection received")
const cls = this.serverClass
const config = Object.assign({
socket : wsClient,
logLevel : this.logLevel
}, this.serverConfig || {})
const webSocketServer = new cls(config)
webSocketServer.connect()
});
connectionServerWS.on('error', () => { this.stop() } );
// wsServer.on('error', (e) => console.log("ERROR: ", e));
// wsServer.on('headers', (headers, request) => console.log("HEADERS: ", headers, request));
})
}
stop () : Promise<any> {
return new Promise((resolve, reject) => {
if (this.connectionServerWS)
this.connectionServerWS.close(() => {
this.connectionServerWS = null
resolve()
})
else
resolve()
})
}
}