50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { router, error, checkAuth, clients, getTaskId, writeEvents, deleteOldClients } from './router.ts';
|
|
|
|
router.get('/api/events', async (req, res) => {
|
|
res.writeHead(200, {
|
|
'Content-Type': 'text/event-stream',
|
|
'Cache-Control': 'no-cache',
|
|
Connection: 'keep-alive',
|
|
});
|
|
const taskId = getTaskId(req);
|
|
if (!taskId) {
|
|
res.end(error('task-id is required'));
|
|
return;
|
|
}
|
|
// 将客户端连接推送到 clients 数组
|
|
clients.set(taskId, { client: res, createTime: Date.now() });
|
|
// 移除客户端连接
|
|
req.on('close', () => {
|
|
clients.delete(taskId);
|
|
});
|
|
});
|
|
|
|
router.get('/api/s1/events', async (req, res) => {
|
|
res.writeHead(200, {
|
|
'Content-Type': 'text/event-stream',
|
|
'Cache-Control': 'no-cache',
|
|
Connection: 'keep-alive',
|
|
});
|
|
const taskId = getTaskId(req);
|
|
if (!taskId) {
|
|
res.end(error('task-id is required'));
|
|
return;
|
|
}
|
|
// 将客户端连接推送到 clients 数组
|
|
clients.set(taskId, { client: res, createTime: Date.now() });
|
|
writeEvents(req, { progress: 0, message: 'start' });
|
|
// 不自动关闭连接
|
|
// res.end('ok');
|
|
});
|
|
|
|
router.get('/api/s1/events/close', async (req, res) => {
|
|
const taskId = getTaskId(req);
|
|
if (!taskId) {
|
|
res.end(error('task-id is required'));
|
|
return;
|
|
}
|
|
deleteOldClients();
|
|
clients.delete(taskId);
|
|
res.end('ok');
|
|
});
|