Files
wechat_ipad_pro/srv/wxcore/wxsyncmgr.go
2026-02-17 13:06:23 +08:00

111 lines
2.4 KiB
Go

package wxcore
import (
"time"
"xiawan/wx/clientsdk/baseinfo"
"xiawan/wx/srv/wxface"
)
// WXSyncMgr 同步管理器(同步消息,同步收藏等等)
type WXSyncMgr struct {
wxConn wxface.IWXConnect
newSyncIDList chan uint32
favSyncIDList chan uint32
newInitIDList chan uint32
endNewChan chan bool
endFavChan chan bool
endInitChan chan bool
isStart bool
}
// NewWXSyncMgr 新建同步管理器
func NewWXSyncMgr(wxConn wxface.IWXConnect) wxface.IWXSyncMgr {
return &WXSyncMgr{
wxConn: wxConn,
newSyncIDList: make(chan uint32, 100),
favSyncIDList: make(chan uint32, 100),
newInitIDList: make(chan uint32, 200),
endNewChan: make(chan bool, 1),
endFavChan: make(chan bool, 1),
endInitChan: make(chan bool, 1),
isStart: false,
}
}
// Start 开启管理器
func (wxsm *WXSyncMgr) Start() {
if wxsm.isStart {
return
}
wxsm.isStart = true
go wxsm.startNewSyncListener()
go wxsm.startFavSyncListener()
// go wxsm.startInitSyncListener()
}
// Stop 关闭管理器
func (wxsm *WXSyncMgr) Stop() {
wxsm.isStart = false
wxsm.endNewChan <- true
wxsm.endFavChan <- true
wxsm.endInitChan <- true
}
// SendNewSyncRequest 发送同步消息请求
func (wxsm *WXSyncMgr) SendNewSyncRequest() {
wxsm.newSyncIDList <- 1
}
// SendFavSyncRequest 发送同步收藏请求
func (wxsm *WXSyncMgr) SendFavSyncRequest() {
wxsm.favSyncIDList <- 1
}
func (wxsm *WXSyncMgr) SendSyncInitRequest() {
wxsm.newInitIDList <- 1
}
func (wxsm *WXSyncMgr) startNewSyncListener() {
//处理异常
defer TryE(wxsm.wxConn.GetWXAccount().GetUserInfo().GetUserName())
currentReqInvoker := wxsm.wxConn.GetWXReqInvoker()
for {
select {
case <-wxsm.newSyncIDList:
// 同步消息
currentReqInvoker.SendNewSyncRequest(baseinfo.MMSyncSceneTypeNeed)
case <-wxsm.endNewChan:
return
}
}
}
func (wxsm *WXSyncMgr) startFavSyncListener() {
currentReqInvoker := wxsm.wxConn.GetWXReqInvoker()
for {
// 3秒执行一次
time.Sleep(1 * time.Second)
select {
case <-wxsm.favSyncIDList:
// 同步收藏
currentReqInvoker.SendFavSyncRequest()
case <-wxsm.endFavChan:
return
}
}
}
func (wxsm *WXSyncMgr) startInitSyncListener() {
currentReqInvoker := wxsm.wxConn.GetWXReqInvoker()
for {
select {
case <-wxsm.newInitIDList:
// 同步收藏
_ = currentReqInvoker.SendNewInitSyncRequest()
case <-wxsm.endInitChan:
return
}
}
}