113 lines
2.4 KiB
Go
113 lines
2.4 KiB
Go
package websrv
|
|
|
|
import (
|
|
"errors"
|
|
"sync"
|
|
"xiawan/wx/clientsdk/baseinfo"
|
|
)
|
|
|
|
// WebTaskMgr web任务管理器
|
|
type WebTaskMgr struct {
|
|
// wxConn wxface.IWXConnect
|
|
taskChan chan *WebTask
|
|
endChan chan bool
|
|
isStart bool
|
|
}
|
|
|
|
// 全局只能定义一个
|
|
var WebTaskMgrInit *WebTaskMgr = &WebTaskMgr{
|
|
taskChan: make(chan *WebTask, 100),
|
|
endChan: make(chan bool, 1),
|
|
isStart: false,
|
|
}
|
|
|
|
var globalLock sync.Mutex = sync.Mutex{}
|
|
|
|
// NewWebTaskMgr 新建web任务管理器
|
|
func NewWebTaskMgr() *WebTaskMgr {
|
|
globalLock.Lock()
|
|
defer globalLock.Unlock()
|
|
return WebTaskMgrInit
|
|
}
|
|
|
|
// Start 开启
|
|
func (wtm *WebTaskMgr) Start() {
|
|
globalLock.Lock()
|
|
defer globalLock.Unlock()
|
|
if wtm.isStart {
|
|
return
|
|
}
|
|
wtm.isStart = true
|
|
go wtm.queryAndExecuteTask()
|
|
}
|
|
|
|
// Stop 关闭
|
|
func (wtm *WebTaskMgr) Stop() {
|
|
wtm.isStart = false
|
|
wtm.endChan <- true
|
|
}
|
|
|
|
// AddWebTask 新增Web任务
|
|
func (wtm *WebTaskMgr) retSetWebTask(webTask *WebTask) {
|
|
// 最多三次
|
|
if webTask.Count >= 2 {
|
|
return
|
|
}
|
|
webTask.Count++
|
|
wtm.taskChan <- webTask
|
|
}
|
|
|
|
// AddWebTask 新增Web任务
|
|
func (wtm *WebTaskMgr) AddWebTask(userInfo *baseinfo.UserInfo, taskInfo *TaskInfo, status string, tmpType uint32, connectInfo map[string]interface{}) {
|
|
if !wtm.isStart {
|
|
return
|
|
}
|
|
globalLock.Lock()
|
|
defer globalLock.Unlock()
|
|
newWebTask := &WebTask{}
|
|
newWebTask.ConnectInfo = connectInfo
|
|
newWebTask.TaskInfo = taskInfo
|
|
newWebTask.UserInfo = userInfo
|
|
newWebTask.Status = status
|
|
newWebTask.Type = tmpType
|
|
newWebTask.Count = 0
|
|
wtm.taskChan <- newWebTask
|
|
}
|
|
|
|
func (wtm *WebTaskMgr) queryAndExecuteTask() {
|
|
for {
|
|
select {
|
|
case webTask := <-wtm.taskChan:
|
|
if webTask.Type == TaskTypeUploadStatus {
|
|
err := errors.New("")
|
|
// err := UploadTaskStatus(webTask)
|
|
// if err != nil && webTask.Status != TaskStateCheckLoginQrcodeSuccess {
|
|
// wtm.retSetWebTask(webTask)
|
|
// continue
|
|
// }
|
|
// 登陆成功上报
|
|
if webTask.Status == TaskStateLoginSuccess {
|
|
err = ReportWechatStatus(webTask, "1")
|
|
if err != nil {
|
|
wtm.retSetWebTask(webTask)
|
|
continue
|
|
}
|
|
}
|
|
// 退出登陆上报
|
|
if webTask.Status == TaskStateLogout {
|
|
err = ReportWechatStatus(webTask, "0")
|
|
if err != nil {
|
|
wtm.retSetWebTask(webTask)
|
|
continue
|
|
}
|
|
}
|
|
} else if webTask.Type == TaskTypeReportHeart {
|
|
// 上报心跳包
|
|
}
|
|
continue
|
|
case <-wtm.endChan:
|
|
return
|
|
}
|
|
}
|
|
}
|