niujiuru 2 тижнів тому
батько
коміт
d15e93dd7f
1 змінених файлів з 24 додано та 2 видалено
  1. 24 2
      mcu_ctrl_board/bridge.go

+ 24 - 2
mcu_ctrl_board/bridge.go

@@ -87,9 +87,31 @@ func (mgr *WorkStateMgr) Has(s WorkState) bool {
 	return mgr.state&s != 0
 }
 
+// 判断JSON字符串是请求/应答
+func DetectJsonRole(jsonStr string) string {
+	var obj map[string]json.RawMessage
+	if json.Unmarshal([]byte(jsonStr), &obj) != nil {
+		return "invalid"
+	}
+	switch {
+	case obj["method"] != nil:
+		return "request"
+	case obj["result"] != nil || obj["error"] != nil:
+		return "response"
+	default:
+		return "unknown"
+	}
+}
+
 //export RTU_ProcessJsonString
-func RTU_ProcessJsonString(s *C.char) *C.char {
-	r, err := jsonrpc2.ParseRequest(C.GoString(s))
+func RTU_ProcessJsonString(jsonStr *C.char) *C.char {
+	s := C.GoString(jsonStr)
+	role := DetectJsonRole(s)
+	if role != "request" {
+		return nil
+	}
+
+	r, err := jsonrpc2.ParseRequest(s)
 	var w *jsonrpc2.Response
 
 	call := func(f func(*jsonrpc2.Request) (*jsonrpc2.Response, error)) *jsonrpc2.Response {