web-font/backend/server/tcp_server.ts
崮生(子虚) fe61bace16 fix: 修复所有 TypeScript 类型错误
- 修复 fonteditor-core 模块声明(添加 FontEditor 命名空间、FontType 类型、SubsetOptions 接口)
- 修复 llrt.ts 中 mkdir 和 rm 方法的返回类型问题
- 修复 tcp_server.ts 中 chunk 类型问题(添加 Buffer 类型检查和转换)
- 修复 font_detail.ts 中缺失的 ORIGIN 导入
- 修复 subset.ts 中 subsetQueueTimeoutSeconds 的导入
- 为 Font 类添加 optimize() 和 write() 方法声明
2026-08-15 07:38:57 +08:00

58 lines
1.3 KiB
TypeScript

import { createServer } from "net";
// 创建 TCP 服务器
export function createTcpServer(
onSocket: (socket: {
readable: ReadableStream<Uint8Array>;
writable: WritableStream<Uint8Array>;
close: () => void;
}) => void,
) {
const server = createServer((socket) => {
const readable = new ReadableStream<Uint8Array>({
start(controller) {
socket.on("data", (chunk: Buffer) => {
controller.enqueue(new Uint8Array(chunk));
});
socket.on("error", (err) => {
controller.error(err);
});
socket.on("close", () => {
controller.close();
});
},
cancel() {
socket.destroy();
},
});
// 创建 WritableStream
const writable = new WritableStream<Uint8Array>({
write(chunk) {
return new Promise<void>((resolve, reject) => {
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
socket.write(buffer, (err) => {
if (err) reject(err);
else resolve();
});
});
},
close() {
socket.end();
},
abort(reason) {
socket.destroy(reason);
},
});
// 实现 close 方法
function close() {
socket.end();
socket.destroy();
}
onSocket({ readable, writable, close });
});
return server;
}