2024-05-18 11:45:42 +08:00

55 lines
1.5 KiB
TypeScript

import { Response } from 'express'
import { OB11Response } from '../action/OB11Response'
import { HttpServerBase } from '@/common/server/http'
import { actionHandlers, actionMap } from '../action'
import { getConfigUtil } from '@/common/config'
import { postOb11Event } from './post-ob11-event'
import { OB11HeartbeatEvent } from '../event/meta/OB11HeartbeatEvent'
import { selfInfo } from '@/common/data'
class OB11HTTPServer extends HttpServerBase {
name = 'LLOneBot server'
handleFailed(res: Response, payload: any, e: any) {
res.send(OB11Response.error(e.stack.toString(), 200))
}
protected listen(port: number) {
if (getConfigUtil().getConfig().ob11.enableHttp) {
super.listen(port)
}
}
}
export const ob11HTTPServer = new OB11HTTPServer()
setTimeout(() => {
for (const [actionName, action] of actionMap) {
for (const method of ['post', 'get']) {
ob11HTTPServer.registerRouter(method, actionName, (res, payload) => action.handle(payload))
}
}
}, 0)
class HTTPHeart {
intervalId: NodeJS.Timeout | null = null
start() {
const { heartInterval } = getConfigUtil().getConfig()
if (this.intervalId) {
clearInterval(this.intervalId)
}
this.intervalId = setInterval(() => {
// ws的心跳是ws自己维护的
postOb11Event(new OB11HeartbeatEvent(selfInfo.online, true, heartInterval), false, false)
}, heartInterval)
}
stop() {
if (this.intervalId) {
clearInterval(this.intervalId)
}
}
}
export const httpHeart = new HTTPHeart()