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