55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
const {Server} = require('ws')
|
|
|
|
Server.prototype.listening = false
|
|
Server.prototype.listen = function (...args) {
|
|
return this._server
|
|
.listen(...args)
|
|
.once('listening', () => {
|
|
this.listening = true
|
|
})
|
|
}
|
|
Server.prototype.close = function (fn = Function.prototype) {
|
|
if (this.clients) {
|
|
for (const client of this.clients) client.terminate()
|
|
}
|
|
this._ultron.destroy()
|
|
this._ultron = null
|
|
return this._server.close((...args) => {
|
|
this.listening = false
|
|
fn(...args)
|
|
})
|
|
}
|
|
module.exports = Server // v 1
|
|
module.exports.createServerFrom = createServerFrom
|
|
module.exports.createServer = createServer
|
|
function createServerFrom (server, connectionListener, options = {}) {
|
|
if (typeof server === 'undefined') throw new Error('must provide server')
|
|
const wss = new Server(Object.assign(options, {server}))
|
|
return connectionListener
|
|
? wss.on('connection', connectionListener)
|
|
: wss
|
|
}
|
|
|
|
function createServer (options = {}, connectionListener) {
|
|
if (typeof options === 'function') {
|
|
connectionListener = options
|
|
options = {}
|
|
}
|
|
const server = createServerFor(options)
|
|
return createServerFrom(server, connectionListener) // v 2
|
|
function createServerFor (options) {
|
|
return options.key && options.cert || options.pfx
|
|
? require('https').createServer(options, requestListener)
|
|
: require('http').createServer(requestListener)
|
|
}
|
|
|
|
function requestListener (req, res) {
|
|
const {STATUS_CODES: {'426': status}} = require('http')
|
|
res.writeHead(426, {
|
|
'content-length': status.length,
|
|
'content-type': 'text/plain'
|
|
})
|
|
res.end(status)
|
|
}
|
|
}
|