first commit
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user