mirror of
https://github.com/ragestudio/linebridge.git
synced 2025-06-09 02:24:17 +00:00
use universal service registration via ipc
This commit is contained in:
parent
0d5b9be68c
commit
e1c383df53
@ -78,54 +78,6 @@ export default class HyperExpressEngineNG {
|
||||
}
|
||||
|
||||
listen = async () => {
|
||||
if (process.env.lb_service) {
|
||||
let pathOverrides = Object.keys(this.router.map).map((key) => {
|
||||
return key.split("/")[1]
|
||||
})
|
||||
|
||||
// remove duplicates
|
||||
pathOverrides = [...new Set(pathOverrides)]
|
||||
|
||||
// remove "" and _map
|
||||
pathOverrides = pathOverrides.filter((key) => {
|
||||
if (key === "" || key === "_map") {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
})
|
||||
|
||||
if (this.ctx.constructor.enableWebsockets === true) {
|
||||
process.send({
|
||||
type: "router:ws:register",
|
||||
id: process.env.lb_service.id,
|
||||
index: process.env.lb_service.index,
|
||||
data: {
|
||||
namespace: this.ctx.constructor.refName,
|
||||
ws_path: this.ctx.constructor.wsPath ?? "/",
|
||||
listen_port: this.ctx.constructor.listen_port,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if (process.send) {
|
||||
// try to send router map to host
|
||||
process.send({
|
||||
type: "router:register",
|
||||
id: process.env.lb_service.id,
|
||||
index: process.env.lb_service.index,
|
||||
data: {
|
||||
router_map: this.router.map,
|
||||
path_overrides: pathOverrides,
|
||||
listen: {
|
||||
ip: this.ctx.constructor.listen_ip,
|
||||
port: this.ctx.constructor.listen_port,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
await this.app.listen(this.ctx.constructor.listen_port)
|
||||
}
|
||||
|
||||
|
@ -75,56 +75,6 @@ export default class Engine {
|
||||
}
|
||||
|
||||
listen = async () => {
|
||||
if (process.env.lb_service) {
|
||||
let pathOverrides = Object.keys(this.router.map).map((key) => {
|
||||
return key.split("/")[1]
|
||||
})
|
||||
|
||||
// remove duplicates
|
||||
pathOverrides = [...new Set(pathOverrides)]
|
||||
|
||||
// remove "" and _map
|
||||
pathOverrides = pathOverrides.filter((key) => {
|
||||
if (key === "" || key === "_map") {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
})
|
||||
|
||||
if (this.ctx.constructor.enableWebsockets) {
|
||||
process.send({
|
||||
type: "router:ws:register",
|
||||
id: process.env.lb_service.id,
|
||||
index: process.env.lb_service.index,
|
||||
data: {
|
||||
namespace: this.ctx.constructor.refName,
|
||||
listen_port: this.ctx.constructor.listen_port,
|
||||
ws_path:
|
||||
this.ctx.constructor.wsPath ??
|
||||
this.ctx.constructor.refName,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if (process.send) {
|
||||
// try to send router map to host
|
||||
process.send({
|
||||
type: "router:register",
|
||||
id: process.env.lb_service.id,
|
||||
index: process.env.lb_service.index,
|
||||
data: {
|
||||
router_map: this.router.map,
|
||||
path_overrides: pathOverrides,
|
||||
listen: {
|
||||
ip: this.ctx.constructor.listen_ip,
|
||||
port: this.ctx.constructor.listen_port,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
await this.app.listen(this.ctx.constructor.listen_port)
|
||||
}
|
||||
|
||||
|
@ -209,6 +209,7 @@ class Server {
|
||||
// if is a linebridge service then initialize IPC Channels
|
||||
if (process.env.lb_service) {
|
||||
await this.initializeIpc()
|
||||
await this.registerServiceToIPC()
|
||||
}
|
||||
|
||||
// try to execute beforeInitialize hook.
|
||||
@ -326,6 +327,54 @@ class Server {
|
||||
|
||||
return execs
|
||||
}
|
||||
|
||||
registerServiceToIPC = () => {
|
||||
if (!process.env.lb_service || !process.send) {
|
||||
console.error("IPC not available")
|
||||
return null
|
||||
}
|
||||
|
||||
// get only the root paths
|
||||
let paths = Object.keys(this.engine.router.map).map((key) => {
|
||||
const root = key.split("/")[1]
|
||||
|
||||
return "/" + root
|
||||
})
|
||||
|
||||
// remove duplicates
|
||||
paths = [...new Set(paths)]
|
||||
|
||||
// remove "" and _map
|
||||
paths = paths.filter((key) => {
|
||||
if (key === "/" || key === "/_map") {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
})
|
||||
|
||||
process.send({
|
||||
type: "service:register",
|
||||
id: process.env.lb_service.id,
|
||||
index: process.env.lb_service.index,
|
||||
register: {
|
||||
namespace: this.constructor.refName,
|
||||
http: {
|
||||
enabled: true,
|
||||
paths: paths,
|
||||
proto: this.ssl?.key && this.ssl?.cert ? "https" : "http",
|
||||
},
|
||||
websocket: {
|
||||
enabled: this.constructor.enableWebsockets,
|
||||
path: this.constructor.wsPath ?? "/",
|
||||
},
|
||||
listen: {
|
||||
ip: this.params.listen_ip,
|
||||
port: this.params.listen_port,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Server
|
||||
|
Loading…
x
Reference in New Issue
Block a user