Explorar o código

add auto json marshal

Joyit hai 1 mes
pai
achega
47b84348b6
Modificáronse 1 ficheiros con 22 adicións e 5 borrados
  1. 22 5
      hub.go

+ 22 - 5
hub.go

@@ -2,6 +2,7 @@ package tinymq
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"log"
@@ -346,7 +347,23 @@ func (h *Hub) requestFromNet(request *RequestData) {
 // 当前调用将会阻塞,直到命令都执行结束,最后返回执行的数量
 // 如果 backFunc 返回为 false 则提前结束
 // 最大数量和超时时间如果为0的话表示使用默认值
-func (h *Hub) GetWithMaxAndTimeout(channel *regexp.Regexp, cmd string, data []byte, backFunc GetBack, max int, timeout int) (count int) {
+func (h *Hub) GetWithMaxAndTimeout(channel *regexp.Regexp, cmd string, data any, backFunc GetBack, max int, timeout int) (count int) {
+	var reqData []byte
+	switch data := data.(type) {
+	case []byte:
+		reqData = data
+	default:
+		if data != nil {
+			// 自动转换数据为json格式
+			var err error
+			reqData, err = json.Marshal(data)
+			if err != nil {
+				log.Println(err.Error())
+				return 0
+			}
+		}
+	}
+
 	// 排除空频道
 	if channel == nil {
 		return 0
@@ -357,7 +374,7 @@ func (h *Hub) GetWithMaxAndTimeout(channel *regexp.Regexp, cmd string, data []by
 	gd := &GetData{
 		Channel:  channel,
 		Cmd:      cmd,
-		Data:     data,
+		Data:     reqData,
 		Max:      max,
 		Timeout:  timeout,
 		backchan: make(chan *ResponseData, 32),
@@ -406,13 +423,13 @@ func (h *Hub) GetWithMaxAndTimeout(channel *regexp.Regexp, cmd string, data []by
 // 请求频道并获取数据,采用回调的方式返回结果
 // 当前调用将会阻塞,直到命令都执行结束,最后返回执行的数量
 // 如果 backFunc 返回为 false 则提前结束
-func (h *Hub) Get(channel *regexp.Regexp, cmd string, data []byte, backFunc GetBack) (count int) {
+func (h *Hub) Get(channel *regexp.Regexp, cmd string, data any, backFunc GetBack) (count int) {
 	return h.GetWithMaxAndTimeout(channel, cmd, data, backFunc, 0, 0)
 }
 
 // 只获取一个频道的数据,阻塞等待到默认超时间隔
 // 如果没有结果将返回 NO_MATCH
-func (h *Hub) GetOne(channel *regexp.Regexp, cmd string, data []byte) (response *ResponseData) {
+func (h *Hub) GetOne(channel *regexp.Regexp, cmd string, data any) (response *ResponseData) {
 	h.GetWithMaxAndTimeout(channel, cmd, data, func(rp *ResponseData) (ok bool) {
 		response = rp
 		return false
@@ -428,7 +445,7 @@ func (h *Hub) GetOne(channel *regexp.Regexp, cmd string, data []byte) (response
 
 // 只获取一个频道的数据,阻塞等待到指定超时间隔
 // 如果没有结果将返回 NO_MATCH
-func (h *Hub) GetOneWithTimeout(channel *regexp.Regexp, cmd string, data []byte, timeout int) (response *ResponseData) {
+func (h *Hub) GetOneWithTimeout(channel *regexp.Regexp, cmd string, data any, timeout int) (response *ResponseData) {
 	h.GetWithMaxAndTimeout(channel, cmd, data, func(rp *ResponseData) (ok bool) {
 		response = rp
 		return false