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