Skip to content

Commit 03023cd

Browse files
authored
🐛 fix(message-handler): 修复 ws 消息处理逻辑 (#59)
1 parent d87c36e commit 03023cd

1 file changed

Lines changed: 30 additions & 16 deletions

File tree

server/service/mcwsbridge/message-handler.ts

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,42 @@ export class MessageHandler {
2020
* @param message - 收到的消息
2121
*/
2222
public async handleMessage(peer: Peer, message: string): Promise<void> {
23+
let data: unknown;
2324
try {
24-
const data: unknown = JSON.parse(message);
25-
26-
// 检查是否是响应消息
27-
const ValidResponse = jsonRpcResponseSchema.safeParse(data);
28-
if (ValidResponse.success) {
29-
this.handleResponse(ValidResponse.data);
30-
}
25+
data = JSON.parse(message);
26+
} catch {
27+
logger.error(`[ERROR] JSON 解析失败:${peer.id}`);
28+
MessageHandler.sendError(peer, null, -32_700, "Parse error");
29+
return;
30+
}
3131

32-
const ValidRequest = createJsonRpcRequestSchema(z.unknown()).safeParse(
33-
data,
34-
);
32+
const ValidResponse = jsonRpcResponseSchema.safeParse(data);
33+
if (ValidResponse.success) {
34+
this.handleResponse(ValidResponse.data);
35+
return;
36+
}
3537

36-
if (ValidRequest.success) {
38+
const ValidRequest = createJsonRpcRequestSchema(z.unknown()).safeParse(
39+
data,
40+
);
41+
if (ValidRequest.success) {
42+
try {
3743
await requestDispatcher.dispatch(ValidRequest.data, peer);
44+
} catch (error) {
45+
logger.error({ error }, `[ERROR] 处理请求失败:${peer.id}`);
46+
MessageHandler.sendError(
47+
peer,
48+
ValidRequest.data.id ?? null,
49+
-32_603,
50+
"Internal error",
51+
);
3852
}
39-
40-
throw new Error("Invalid JSON-RPC message");
41-
} catch (error) {
42-
logger.error({ error }, `[ERROR] 处理消息失败:${peer.id}`);
43-
MessageHandler.sendError(peer, null, -32_700, "Parse error");
53+
return;
4454
}
55+
56+
// 既不是有效响应也不是有效请求
57+
logger.warn(`[WARN] 无效的 JSON-RPC 消息:${peer.id}`);
58+
MessageHandler.sendError(peer, null, -32_600, "Invalid Request");
4559
}
4660

4761
/**

0 commit comments

Comments
 (0)