niujiuru 2 недель назад
Родитель
Сommit
25090ae7fe
1 измененных файлов с 19 добавлено и 10 удалено
  1. 19 10
      mcu_ctrl_board/bridge.go

+ 19 - 10
mcu_ctrl_board/bridge.go

@@ -111,22 +111,35 @@ func handleResponse(jsonStr string) {
 func RTU_JsonMsgProcCb(jsonStr *C.char) *C.char {
 	s := C.GoString(jsonStr)
 	role := DetectJsonRole(s)
+
+	var w *jsonrpc2.Response
+
+	wret := func() *C.char {
+		b, err := w.String()
+		if err != nil {
+			return C.CString(fmt.Sprintf("an error occurred while calling the String() method of jsonrpc2.Response: %v", err))
+		}
+		return C.CString(b)
+	}
+
 	if role == "response" {
 		handleResponse(s)
 		return nil
-	} else if role != "request" {
-		return nil
+	}
+
+	if role != "request" {
+		w = jsonrpc2.BuildError(nil, jsonrpc2.ErrInvalidRequest, "")
+		return wret()
 	}
 
 	r, err := jsonrpc2.ParseRequest(s)
-	var w *jsonrpc2.Response
 
 	call := func(f func(*jsonrpc2.Request) (*jsonrpc2.Response, error)) *jsonrpc2.Response {
-		resp, e := f(r)
+		w, e := f(r)
 		if e != nil { // 调用本地RPC处理函数时发生错误
 			return jsonrpc2.BuildError(r, jsonrpc2.ErrInternal, "")
 		}
-		return resp
+		return w
 	}
 
 	if err != nil {
@@ -150,11 +163,7 @@ func RTU_JsonMsgProcCb(jsonStr *C.char) *C.char {
 		}
 	}
 
-	b, err := w.String()
-	if err != nil {
-		return C.CString(fmt.Sprintf("an error occurred while calling the String() method of RpcResponse: %v", err))
-	}
-	return C.CString(b)
+	return wret()
 }
 
 // 控制板查询数据板状态