mirror of
https://github.com/electron-vite/electron-vite-vue
synced 2025-01-19 20:07:06 +08:00
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
/**
|
|
* Ws server side
|
|
* Hot reload from preload script during development
|
|
*/
|
|
import WebSocket from 'ws'
|
|
import chalk from 'chalk'
|
|
import pkg from '../package.json'
|
|
|
|
|
|
export interface CreateWsServerOptions { }
|
|
|
|
export interface WssServer {
|
|
wss: WebSocket.Server
|
|
instance: WebSocket | null
|
|
}
|
|
|
|
const TAG = '[ws.ts]'
|
|
|
|
export function createWsServer(options: CreateWsServerOptions = {}): WssServer {
|
|
const port = pkg.env.PORT_WS
|
|
const host = pkg.env.HOST // '127.0.0.1'
|
|
const wss = new WebSocket.Server({ host, port })
|
|
const wssInstance: WssServer = { wss, instance: null }
|
|
|
|
console.log(TAG, 'Wss run at - ' + chalk.yellow(`ws://${host}:${port}`))
|
|
|
|
wss.on('connection', ws => {
|
|
console.log(TAG, chalk.yellow(`wss.on('connection')`))
|
|
|
|
wssInstance.instance = ws
|
|
ws.on('message', message => {
|
|
console.log(TAG, `ws.on('message'):`, message.toString())
|
|
})
|
|
|
|
ws.send(formatWsSendData({ cmd: 'message', data: 'connected.' }))
|
|
})
|
|
|
|
wss.on('close', () => {
|
|
console.log(TAG, chalk.gray(`wss.on('close')`))
|
|
|
|
wssInstance.instance = null
|
|
})
|
|
|
|
return wssInstance
|
|
}
|
|
|
|
export function formatWsSendData(json: { cmd: string, data?: any }) {
|
|
return JSON.stringify(json)
|
|
}
|