111 lines
2.4 KiB
Go
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
|
|
}
|
|
}
|
|
}
|