浏览代码

1, 优化修改代码结构; 2, 新增jsonrpc2通用模块

niujiuru 3 周之前
父节点
当前提交
0dc63cd3f1
共有 4 个文件被更改,包括 115 次插入3 次删除
  1. 3 1
      utils/ftpclient.go
  2. 110 0
      utils/jsonrpc2/rpc.go
  3. 1 1
      utils/singletask.go
  4. 1 1
      utils/utils.go

+ 3 - 1
utils/ftpclient.go

@@ -1,7 +1,7 @@
 // Author: NiuJiuRu
 // Email: niujiuru@qq.com
 
-package utils
+package ftpclient
 
 import (
 	"context"
@@ -17,6 +17,8 @@ import (
 	"hnyfkj.com.cn/rtu/linux/baseapp"
 )
 
+const MODULE_NAME = "FtpClient"
+
 const (
 	defaultRtyInterval     = 1 * time.Second
 	defaultLogInterval     = 2 * time.Second

+ 110 - 0
utils/jsonrpc2/rpc.go

@@ -0,0 +1,110 @@
+// Author: NiuJiuRu
+// Email: niujiuru@qq.com
+
+package jsonrpc2
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+type ErrorCode int
+
+const (
+	ErrParse          ErrorCode = -32700 // 解析错误: "Parse error"
+	ErrInvalidRequest ErrorCode = -32600 // 无效请求: "Invalid request"
+	ErrMethodNotFound ErrorCode = -32601 // 无效方法: "Method not found"
+	ErrInvalidParams  ErrorCode = -32602 // 无效参数: "Invalid params"
+	ErrInternal       ErrorCode = -32603 // 内部错误: "Internal error"
+)
+
+type Request struct {
+	JSONRPC string          `json:"jsonrpc"`          // 版本号, 固定: "2.0"
+	Method  string          `json:"method"`           // 调用方法, 执行函数名
+	Params  json.RawMessage `json:"params,omitempty"` // 请求参数, 可选可为空
+	ID      int             `json:"id"`               // 请求ID, 用于标识请求
+}
+
+type Error struct {
+	Code    ErrorCode `json:"code"`    // 错误码
+	Message string    `json:"message"` // 错误信息
+}
+
+func (e Error) Error() string {
+	return e.Message
+}
+
+type Response struct {
+	JSONRPC string          `json:"jsonrpc"`          // 版本号, 固定: "2.0"
+	Result  json.RawMessage `json:"result,omitempty"` // 响应结果, 可选可为空
+	Error   *Error          `json:"error,omitempty"`  // 错误信息, 可选可为空
+	ID      int             `json:"id"`               // 应答ID, 响应匹配请求
+}
+
+// 解析请求数据
+func ParseRequest(jsonStr string) (*Request, error) {
+	var req Request
+	if err := json.Unmarshal([]byte(jsonStr), &req); err != nil {
+		return nil, err
+	}
+	return &req, nil
+}
+
+// 构建响应数据
+func BuildResult(id int, result any) (*Response, error) {
+	b, err := json.Marshal(result)
+	if err != nil {
+		return nil, err
+	}
+	return &Response{
+		JSONRPC: "2.0",
+		Result:  b,
+		ID:      id,
+	}, nil
+}
+
+// 构建错误响应
+func BuildError(id int, code ErrorCode, message string) *Response {
+	return &Response{
+		JSONRPC: "2.0",
+		Error: &Error{
+			Code:    code,
+			Message: message,
+		},
+		ID: id,
+	}
+}
+
+// 构建解析错误
+func BuildParseError(id int) *Response {
+	return BuildError(id, ErrParse, "Parse error")
+}
+
+// 构建无效请求
+func BuildInvalidRequest(id int) *Response {
+	return BuildError(id, ErrInvalidRequest, "Invalid request")
+}
+
+// 构建无效方法
+func BuildMethodNotFound(id int) *Response {
+	return BuildError(id, ErrMethodNotFound, "Method not found")
+}
+
+// 构建无效参数
+func BuildInvalidParams(id int) *Response {
+	return BuildError(id, ErrInvalidParams, "Invalid params")
+}
+
+// 构建内部错误
+func BuildInternalError(id int) *Response {
+	return BuildError(id, ErrInternal, "Internal error")
+}
+
+// 应答转字符串
+func (resp *Response) String() (string, error) {
+	b, err := json.Marshal(resp)
+	if err != nil {
+		return "", fmt.Errorf("marshal response: %w", err)
+	}
+	return string(b), nil
+}

+ 1 - 1
utils/singletask.go

@@ -1,7 +1,7 @@
 // Author: NiuJiuRu
 // Email: niujiuru@qq.com
 
-package utils
+package SingleTask
 
 import "sync/atomic"
 

+ 1 - 1
utils/utils.go

@@ -1,3 +1,3 @@
 package utils
 
-const MODULE_NAME = "RTUCommon"
+const MODULE_NAME = "Utils"