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