|
|
|
import {Singleton, Inject} from "@extollo/di"
|
|
|
|
import {Unit} from "../lifecycle/Unit";
|
|
|
|
import {createServer, IncomingMessage, ServerResponse, Server} from "http";
|
|
|
|
import {Logging} from "./Logging";
|
|
|
|
import {Request} from "../http/lifecycle/Request";
|
|
|
|
|
|
|
|
@Singleton()
|
|
|
|
export class HTTPServer extends Unit {
|
|
|
|
@Inject()
|
|
|
|
protected readonly logging!: Logging
|
|
|
|
|
|
|
|
protected server?: Server
|
|
|
|
|
|
|
|
public async up() {
|
|
|
|
const port = 8000
|
|
|
|
|
|
|
|
await new Promise<void>((res, rej) => {
|
|
|
|
this.server = createServer(this.handler)
|
|
|
|
|
|
|
|
this.server.listen(port, undefined, undefined, () => {
|
|
|
|
this.logging.success(`Server listening on port ${port}. Press ^C to stop.`)
|
|
|
|
})
|
|
|
|
|
|
|
|
process.on('SIGINT', res)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
public async down() {
|
|
|
|
if ( this.server ) {
|
|
|
|
this.server.close(err => {
|
|
|
|
if ( err ) {
|
|
|
|
this.logging.error(`Error encountered while closing HTTP server: ${err.message}`)
|
|
|
|
this.logging.debug(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public get handler() {
|
|
|
|
return (request: IncomingMessage, response: ServerResponse) => {
|
|
|
|
const extolloReq = new Request(request, response)
|
|
|
|
extolloReq.cookies.set('testing123', {foo: 'bar', bob: 123})
|
|
|
|
extolloReq.response.send('Hi, from Extollo!!')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|