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 } } }