|
|
@@ -56,13 +56,24 @@ type Hub struct {
|
|
|
// 连接状态变化时调用的函数
|
|
|
connectStatusFunc ConnectStatusFunc
|
|
|
|
|
|
- // 验证发送数据的条件是否满足 (可为空)
|
|
|
+ // 验证发送数据的条件是否满足 (可空)
|
|
|
checkConnectOkFunc CheckConnectOkFunc
|
|
|
|
|
|
+ // 通过过滤函数获取一个频道信息 (可空)
|
|
|
+ filterToChannelFunc FilterToChannelFunc
|
|
|
+
|
|
|
// 上次清理异常连接时间戳
|
|
|
lastCleanDeadConnect int64
|
|
|
}
|
|
|
|
|
|
+func (h *Hub) SetCheckConnectOkFunc(fn CheckConnectOkFunc) {
|
|
|
+ h.checkConnectOkFunc = fn
|
|
|
+}
|
|
|
+
|
|
|
+func (h *Hub) SetFilterToChannelFunc(fn FilterToChannelFunc) {
|
|
|
+ h.filterToChannelFunc = fn
|
|
|
+}
|
|
|
+
|
|
|
// 转换数据
|
|
|
func (h *Hub) convertData(data any) (reqData []byte, err error) {
|
|
|
switch data := data.(type) {
|
|
|
@@ -314,7 +325,17 @@ func (h *Hub) sendRequest(gd *GetData) (count int) {
|
|
|
if count > 0 {
|
|
|
break
|
|
|
}
|
|
|
- time.Sleep(time.Millisecond * 500)
|
|
|
+ // 如果是客户端,并且有机会自动连接,则尝试自动连接
|
|
|
+ if i == 0 && h.connectHostFunc != nil && h.filterToChannelFunc != nil {
|
|
|
+ channel := h.filterToChannelFunc(gd.Filter)
|
|
|
+ err := h.ConnectToServer(channel, false, nil)
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ time.Sleep(time.Millisecond * 500)
|
|
|
+ }
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
@@ -860,22 +881,22 @@ func NewHub(
|
|
|
// 连接状态变化时调用的函数
|
|
|
connectStatusFunc ConnectStatusFunc,
|
|
|
// 验证发送数据的条件是否满足 (可为空)
|
|
|
- checkConnectOkFunc CheckConnectOkFunc,
|
|
|
+ // checkConnectOkFunc CheckConnectOkFunc,
|
|
|
) (h *Hub) {
|
|
|
if cf == nil {
|
|
|
cf = config.NewConfig()
|
|
|
}
|
|
|
h = &Hub{
|
|
|
- cf: cf,
|
|
|
- globalID: uint16(time.Now().UnixNano()) % config.ID_MAX,
|
|
|
- channel: channel,
|
|
|
- middle: make([]MiddleFunc, 0),
|
|
|
- lines: NewMapx(),
|
|
|
- connectHostFunc: connectHostFunc,
|
|
|
- authFunc: authFunc,
|
|
|
- checkAuthFunc: checkAuthFunc,
|
|
|
- connectStatusFunc: connectStatusFunc,
|
|
|
- checkConnectOkFunc: checkConnectOkFunc,
|
|
|
+ cf: cf,
|
|
|
+ globalID: uint16(time.Now().UnixNano()) % config.ID_MAX,
|
|
|
+ channel: channel,
|
|
|
+ middle: make([]MiddleFunc, 0),
|
|
|
+ lines: NewMapx(),
|
|
|
+ connectHostFunc: connectHostFunc,
|
|
|
+ authFunc: authFunc,
|
|
|
+ checkAuthFunc: checkAuthFunc,
|
|
|
+ connectStatusFunc: connectStatusFunc,
|
|
|
+ // checkConnectOkFunc: checkConnectOkFunc,
|
|
|
lastCleanDeadConnect: time.Now().UnixMilli(),
|
|
|
}
|
|
|
go h.checkConnect()
|