Skip to content

Commit 54070bb

Browse files
committed
🐞 fix: socket 消息格式处理
1 parent 43a018f commit 54070bb

1 file changed

Lines changed: 52 additions & 16 deletions

File tree

electron/main/services/SocketService.ts

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -240,26 +240,62 @@ export class SocketService {
240240
return;
241241
}
242242

243+
// 处理 WebSocket 协议消息
244+
const trimmedMessage = message.trim().toUpperCase();
245+
// 自动回复 PONG
246+
if (trimmedMessage === "PING") {
247+
try {
248+
if (socket.readyState === socket.OPEN) {
249+
socket.send("PONG");
250+
}
251+
} catch {
252+
// ignore
253+
}
254+
return;
255+
}
256+
// 解析 JSON
257+
let parsed: unknown;
243258
try {
244-
const parsed = JSON.parse(message);
245-
socketLog.info("📨 Received message:", parsed);
259+
parsed = JSON.parse(message);
260+
} catch {
261+
this.sendToClient(socket, {
262+
type: "error",
263+
data: {
264+
message: "消息格式错误,请发送有效的 JSON 格式消息",
265+
received: message.substring(0, 100),
266+
},
267+
});
268+
return;
269+
}
270+
// 解析对象结构
271+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
272+
socketLog.warn("⚠️ Invalid message structure: not an object");
273+
this.sendToClient(socket, {
274+
type: "error",
275+
data: { message: "消息格式错误,根对象必须是对象类型" },
276+
});
277+
return;
278+
}
246279

247-
// 根据消息类型进行处理
248-
if (parsed.type === "control") {
249-
this.handleControlCommand(socket, parsed.data);
250-
} else {
251-
// 未知的消息类型
252-
this.sendToClient(socket, {
253-
type: "error",
254-
data: { message: `Unknown message type: ${parsed.type}` },
255-
});
256-
}
257-
} catch (error) {
258-
socketLog.error("⚠️ Error handling message:", error);
259-
// 如果消息格式不正确,可以发送错误响应
280+
const messageObj = parsed as { type?: string; data?: unknown };
281+
if (!messageObj.type) {
282+
socketLog.warn("⚠️ Missing message type");
283+
this.sendToClient(socket, {
284+
type: "error",
285+
data: { message: "消息格式错误,缺少 type 字段" },
286+
});
287+
return;
288+
}
289+
socketLog.log(`📨 Received message type: ${messageObj.type}`);
290+
// 根据消息类型进行处理
291+
if (messageObj.type === "control") {
292+
this.handleControlCommand(socket, messageObj.data as { command?: string });
293+
} else {
294+
// 未知的消息类型
295+
socketLog.warn(`⚠️ Unknown message type: ${messageObj.type}`);
260296
this.sendToClient(socket, {
261297
type: "error",
262-
data: { message: "Invalid message format" },
298+
data: { message: `未知的消息类型: ${messageObj.type}` },
263299
});
264300
}
265301
}

0 commit comments

Comments
 (0)