@@ -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