mirror of
https://github.com/lzh-1625/go_process_manager.git
synced 2025-12-24 12:57:52 +08:00
46 lines
887 B
Go
46 lines
887 B
Go
package middle
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/lzh-1625/go_process_manager/internal/app/logic"
|
|
)
|
|
|
|
type WaitCondMiddle struct {
|
|
wc *logic.WaitCond
|
|
}
|
|
|
|
func NewWaitCond(wc *logic.WaitCond) *WaitCondMiddle {
|
|
return &WaitCondMiddle{
|
|
wc: wc,
|
|
}
|
|
}
|
|
|
|
func (p *WaitCondMiddle) Trigger() {
|
|
p.wc.Trigger()
|
|
}
|
|
|
|
func (p *WaitCondMiddle) WaitGetMiddel(c *gin.Context) {
|
|
version, err := strconv.ParseInt(c.GetHeader("Version"), 10, 64)
|
|
if err != nil {
|
|
rErr(c, -1, "version is invalid", err)
|
|
return
|
|
}
|
|
if version < p.wc.Version.Load() {
|
|
c.Header("Version", strconv.FormatInt(p.wc.Version.Load(), 10))
|
|
c.Next()
|
|
return
|
|
}
|
|
p.wc.Cond.L.Lock()
|
|
defer p.wc.Cond.L.Unlock()
|
|
p.wc.Cond.Wait()
|
|
c.Header("Version", strconv.FormatInt(p.wc.Version.Load(), 10))
|
|
c.Next()
|
|
}
|
|
|
|
func (p *WaitCondMiddle) WaitTriggerMiddel(c *gin.Context) {
|
|
defer p.Trigger()
|
|
c.Next()
|
|
}
|