Skip to content

Commit

Permalink
fix(docz-core): close data server when need
Browse files Browse the repository at this point in the history
  • Loading branch information
pedronauck committed Dec 19, 2018
1 parent 40d0dae commit 6a2b96a
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 18 deletions.
4 changes: 2 additions & 2 deletions packages/docz-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
"progress-estimator": "^0.2.2",
"react-dev-utils": "^6.1.1",
"react-docgen-typescript-loader": "^3.0.0-rc.0",
"react-hot-loader": "^4.6.2",
"react-hot-loader": "^4.6.3",
"rehype-docz": "^0.13.3",
"rehype-slug": "^2.0.2",
"remark-docz": "^0.13.3",
Expand All @@ -75,7 +75,7 @@
"terser-webpack-plugin": "^1.1.0",
"titleize": "^1.0.1",
"url-loader": "^1.1.2",
"webpack": "^4.27.1",
"webpack": "^4.28.0",
"webpack-bundle-analyzer": "^3.0.3",
"webpack-chain": "^5.0.1",
"webpack-dev-server": "^3.1.10",
Expand Down
24 changes: 16 additions & 8 deletions packages/docz-core/src/DataServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import WS from 'ws'
import { touch } from './utils/fs'
import { isFn } from './utils/helpers'
import * as paths from './config/paths'
import { onSignal } from './utils/on-signal'

export type Send = (type: string, payload: any) => void
export type On = (type: string) => Promise<any>
Expand Down Expand Up @@ -31,7 +32,7 @@ export interface State {
}

export class DataServer {
private server?: WS.Server
private client?: WS.Server
private states: Set<State>
private state: Record<string, any>

Expand All @@ -40,7 +41,11 @@ export class DataServer {
this.state = {}

if (server) {
this.server = new WS.Server({ server, port, host })
this.client = new WS.Server({
server,
port,
host,
})
}
}

Expand All @@ -65,13 +70,16 @@ export class DataServer {
}

public async listen(): Promise<void> {
if (this.server) {
this.server.on('connection', socket => {
if (this.client) {
this.client.on('connection', socket => {
const close = this.handleConnection(socket)

this.server!.on('close', async () => {
const handleClose = async () => {
await close()
})
socket.terminate()
}

this.client!.on('close', handleClose)
onSignal(handleClose)
})
}
}
Expand Down Expand Up @@ -101,7 +109,7 @@ export class DataServer {

return async () => {
const fns = await Promise.all(states.filter(Boolean))
for (const fn of fns) fn && isFn(fn) && fn()
for (const fn of fns) isFn(fn) && fn()
}
}

Expand Down
23 changes: 15 additions & 8 deletions packages/docz-core/src/commands/dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { bundler as webpack } from '../webpack'
import { Entries } from '../Entries'
import { loadConfig } from '../utils/load-config'
import { promiseLogger } from '../utils/promise-logger'
import { onSignal } from '../utils/on-signal'

export const dev = async (args: Config) => {
const env = envDotProp.get('node.env')
Expand All @@ -35,7 +36,11 @@ export const dev = async (args: Config) => {
}

const server = await promiseLogger(app.start(), 'Starting your server')
const dataServer = new DataServer(server, websocketPort, config.websocketHost)
const dataServer = new DataServer(
server.listeningApp,
websocketPort,
config.websocketHost
)

dataServer.register([
states.config(newConfig),
Expand All @@ -47,14 +52,16 @@ export const dev = async (args: Config) => {
await dataServer.listen()
} catch (err) {
logger.fatal('Failed to process your server:', err)
await dataServer.close()
process.exit(1)
}

const signals: any = ['SIGINT', 'SIGTERM']
for (const sig of signals) {
process.on(sig, async () => {
server.close()
process.exit()
})
}
onSignal(async () => {
await dataServer.close()
server.close()
})

server.listeningApp.on('close', async () => {
await dataServer.close()
})
}
9 changes: 9 additions & 0 deletions packages/docz-core/src/utils/on-signal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export const onSignal = (cb: () => any) => {
const signals: any = ['SIGINT', 'SIGTERM']
for (const sig of signals) {
process.on(sig, async () => {
await cb()
process.exit()
})
}
}
1 change: 1 addition & 0 deletions packages/docz-core/src/webpack/devserver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export const devServerConfig = (hooks: ServerHooks, args: Args) => {
return {
publicPath: '/',
compress: true,
logLevel: args.debug ? 'debug' : 'none',
clientLogLevel: args.debug ? 'info' : 'none',
contentBase: [nonExistentDir],
watchContentBase: true,
Expand Down

0 comments on commit 6a2b96a

Please sign in to comment.