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