This commit is contained in:
aozhiwei 2024-05-10 17:23:20 +08:00
parent fcc9cbc260
commit 5f89f20777
3 changed files with 96 additions and 3 deletions

View File

@ -5,6 +5,7 @@ import (
"main/constant" "main/constant"
"mt" "mt"
"main/middleware" "main/middleware"
. "main/global"
) )
type app struct { type app struct {
@ -49,8 +50,16 @@ func (this *app) registerDataSources() {
mt.Table.MailDb.GetById(0).GetPasswd(), mt.Table.MailDb.GetById(0).GetPasswd(),
mt.Table.MailDb.GetById(0).GetDatabase(), mt.Table.MailDb.GetById(0).GetDatabase(),
3) 3)
f5.GetJsStyleDb().RegisterDataSource(
constant.MAIL_DB,
mt.Table.MailDb.GetById(0).GetHost(),
mt.Table.MailDb.GetById(0).GetPort(),
mt.Table.MailDb.GetById(0).GetUser(),
mt.Table.MailDb.GetById(0).GetPasswd(),
mt.Table.MailDb.GetById(0).GetDatabase(),
1)
} }
func (this *app) HasTask() bool { func (this *app) HasTask() bool {
return false return GetMailMgr().HasTask()
} }

View File

@ -58,4 +58,5 @@ type MailMgr interface{
CaGetUnreadMailCnt(c *gin.Context) CaGetUnreadMailCnt(c *gin.Context)
CaGetAttachment(c *gin.Context) CaGetAttachment(c *gin.Context)
CaDeleteMails(c *gin.Context) CaDeleteMails(c *gin.Context)
HasTask() bool
} }

View File

@ -10,6 +10,13 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
type dbEvent struct {
idx int64
eventName string
param1 string
entry q5.ListHead
}
type userGroup struct { type userGroup struct {
groupId int64 groupId int64
userHash sync.Map userHash sync.Map
@ -23,9 +30,13 @@ type mailMgr struct {
groupHash sync.Map //int64 => *userGroup groupHash sync.Map //int64 => *userGroup
lastSyncEventIdx int64 lastSyncEventIdx int64
pullingEvent bool pullingEvent bool
procingEvent bool
eventQueue q5.Queue
timerWp *f5.TimerWp
} }
func (this *mailMgr) Init() { func (this *mailMgr) Init() {
this.eventQueue.Init()
this.syncEvent() this.syncEvent()
this.loadMails() this.loadMails()
this.loadGroups() this.loadGroups()
@ -35,9 +46,18 @@ func (this *mailMgr) Init() {
f5.GetApp().RegisterCaHandle("Mail", "getUnreadMailCnt", this.CaGetUnreadMailCnt) f5.GetApp().RegisterCaHandle("Mail", "getUnreadMailCnt", this.CaGetUnreadMailCnt)
f5.GetApp().RegisterCaHandle("Mail", "getAttachment", this.CaGetAttachment) f5.GetApp().RegisterCaHandle("Mail", "getAttachment", this.CaGetAttachment)
f5.GetApp().RegisterCaHandle("Mail", "deleteMails", this.CaDeleteMails) f5.GetApp().RegisterCaHandle("Mail", "deleteMails", this.CaDeleteMails)
this.timerWp = f5.GetTimer().SetIntervalWp(
300,
func (e int32, args* q5.Args) {
if e == q5.TIMER_EXEC_EVENT {
this.updateDbEvent()
}
})
} }
func (this *mailMgr) UnInit() { func (this *mailMgr) UnInit() {
f5.GetTimer().Delete(this.timerWp)
this.timerWp = nil
} }
func (this *mailMgr) loadMails() { func (this *mailMgr) loadMails() {
@ -306,21 +326,84 @@ func (this *mailMgr) syncEvent() {
}) })
} }
func (this *mailMgr) addDbEvent(e *dbEvent) {
this.eventQueue.Push(&e.entry)
}
func (this *mailMgr) updateDbEvent() {
if this.eventQueue.IsEmpty() {
return
}
if this.procingEvent {
return
}
this.eventQueue.Fetch()
for !this.eventQueue.WorkList.Empty() {
e := this.eventQueue.WorkList.FirstEntry().(*dbEvent)
if e.eventName == constant.EVENT_MAIL_UPDATE {
this.procMailUpdate(e)
break
} else if e.eventName == constant.EVENT_UPSER_GROUP_UPDATE {
this.procGroupUpdate(e)
break
} else {
e.entry.DelInit()
}
}
}
func (this *mailMgr) pullEvent() { func (this *mailMgr) pullEvent() {
if this.pullingEvent { if this.pullingEvent {
return return
} }
this.pullingEvent = true this.pullingEvent = true
go f5.GetJsStyleDb().SelectCustomQuery( f5.GetJsStyleDb().SelectCustomQuery(
constant.MAIL_DB, constant.MAIL_DB,
fmt.Sprintf("SELECT * FROM t_event WHERE idx > %d;", this.lastSyncEventIdx), fmt.Sprintf("SELECT * FROM t_event WHERE idx > %d;", this.lastSyncEventIdx),
func(err error, ds *f5.DataSet) { func(err error, ds *f5.DataSet) {
this.pullingEvent = false
if err != nil { if err != nil {
this.pullingEvent = false
return return
} }
for ds.Next() { for ds.Next() {
e := new(dbEvent)
e.idx = q5.ToInt64(ds.GetByName("idx"))
e.eventName = ds.GetByName("event_name")
e.param1 = ds.GetByName("param1")
e.entry.Init(e)
_mailMgr.addDbEvent(e)
this.lastSyncEventIdx = q5.ToInt64(ds.GetByName("idx")) this.lastSyncEventIdx = q5.ToInt64(ds.GetByName("idx"))
} }
this.pullingEvent = false
})
}
func (this* mailMgr) HasTask() bool {
return false
}
func (this* mailMgr) procMailUpdate(e *dbEvent) {
this.procingEvent = true
f5.GetJsStyleDb().OrmSelectOne(
constant.MAIL_DB,
"t_mail",
[][]string{
{"mail_id", e.param1},
},
func (err error, ds *f5.DataSet) {
})
}
func (this* mailMgr) procGroupUpdate(e *dbEvent) {
this.procingEvent = true
f5.GetJsStyleDb().OrmSelectOne(
constant.MAIL_DB,
"t_group",
[][]string{
{"group_id", e.param1},
},
func (err error, ds *f5.DataSet) {
}) })
} }