82 lines
2.3 KiB
JavaScript
82 lines
2.3 KiB
JavaScript
|
|
const express = require('express');
|
||
|
|
const router = express.Router();
|
||
|
|
const roomStore = require('../store/roomStore');
|
||
|
|
const { validateRoom } = require('../middleware/validate');
|
||
|
|
const { generateStreamUrls } = require('../utils/streamUrl');
|
||
|
|
const { getActiveStreamKeys } = require('../utils/srsHttpApi');
|
||
|
|
|
||
|
|
const getRequestHost = (req) => {
|
||
|
|
const hostHeader = req && req.get ? req.get('host') : null;
|
||
|
|
const fromHeader = hostHeader ? String(hostHeader).split(':')[0] : null;
|
||
|
|
return req && req.hostname ? req.hostname : fromHeader;
|
||
|
|
};
|
||
|
|
|
||
|
|
// GET /api/rooms - 获取所有房间
|
||
|
|
router.get('/', async (req, res) => {
|
||
|
|
const rooms = roomStore.getAll();
|
||
|
|
const activeStreamKeys = await getActiveStreamKeys({ app: 'live' });
|
||
|
|
const requestHost = getRequestHost(req);
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
success: true,
|
||
|
|
data: rooms.map(room => ({
|
||
|
|
...room,
|
||
|
|
isLive: activeStreamKeys.size ? activeStreamKeys.has(room.streamKey) : room.isLive,
|
||
|
|
streamUrls: generateStreamUrls(room.streamKey, requestHost)
|
||
|
|
}))
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// POST /api/rooms - 创建房间
|
||
|
|
router.post('/', validateRoom, (req, res) => {
|
||
|
|
const { title, streamerName } = req.body;
|
||
|
|
const room = roomStore.create({ title, streamerName });
|
||
|
|
const requestHost = getRequestHost(req);
|
||
|
|
|
||
|
|
res.status(201).json({
|
||
|
|
success: true,
|
||
|
|
data: {
|
||
|
|
...room,
|
||
|
|
streamUrls: generateStreamUrls(room.streamKey, requestHost)
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// GET /api/rooms/:id - 获取单个房间
|
||
|
|
router.get('/:id', async (req, res) => {
|
||
|
|
const room = roomStore.getById(req.params.id);
|
||
|
|
const requestHost = getRequestHost(req);
|
||
|
|
|
||
|
|
if (!room) {
|
||
|
|
return res.status(404).json({
|
||
|
|
success: false,
|
||
|
|
error: { code: 'ROOM_NOT_FOUND', message: '房间不存在' }
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
success: true,
|
||
|
|
data: {
|
||
|
|
...room,
|
||
|
|
isLive: (await getActiveStreamKeys({ app: 'live' })).has(room.streamKey) || room.isLive,
|
||
|
|
streamUrls: generateStreamUrls(room.streamKey, requestHost)
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// DELETE /api/rooms/:id - 删除房间
|
||
|
|
router.delete('/:id', (req, res) => {
|
||
|
|
const deleted = roomStore.delete(req.params.id);
|
||
|
|
|
||
|
|
if (!deleted) {
|
||
|
|
return res.status(404).json({
|
||
|
|
success: false,
|
||
|
|
error: { code: 'ROOM_NOT_FOUND', message: '房间不存在' }
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
res.json({ success: true });
|
||
|
|
});
|
||
|
|
|
||
|
|
module.exports = router;
|