优化全局zap的打印,修复待机任务出现多个的情况
This commit is contained in:
@@ -10,12 +10,17 @@ import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
// PlayBgm 播放背景音乐
|
||||
func PlayBgm() leaf.HandlerFunc {
|
||||
return func(c *leaf.Context) {
|
||||
pm := leaf.Value[*schema.PlayModal](c, PayloadJSONKey)
|
||||
|
||||
bgm := utils.LinkAudio(pm.BGM)
|
||||
bgm, err := utils.LinkAudio(pm.BGM)
|
||||
if err != nil {
|
||||
logger.Errorln("背景音乐解析异常", err)
|
||||
}
|
||||
if bgm != nil {
|
||||
logger.Infoln("背景音乐解析成功")
|
||||
// 等待组
|
||||
var wait sync.WaitGroup
|
||||
defer wait.Wait()
|
||||
@@ -25,15 +30,18 @@ func PlayBgm() leaf.HandlerFunc {
|
||||
// 发送结束信号
|
||||
defer close(a)
|
||||
|
||||
wait.Add(1)
|
||||
go func() {
|
||||
// 等待结束
|
||||
wait.Add(1)
|
||||
defer wait.Done()
|
||||
|
||||
ctrl, closer := audio.PlayBgmMP3(bgm)
|
||||
logger.Infoln("开始播放背景音乐")
|
||||
defer logger.Infoln("结束背景音乐播放")
|
||||
|
||||
ctrl, closer, e := audio.PlayBgmMP3(bgm)
|
||||
defer closer()
|
||||
if ctrl == nil {
|
||||
logger.Infoln("播放背景音乐失败")
|
||||
if e != nil {
|
||||
logger.Errorln("播放背景音乐失败", e)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -47,6 +55,8 @@ func PlayBgm() leaf.HandlerFunc {
|
||||
}
|
||||
}
|
||||
}()
|
||||
} else {
|
||||
logger.Errorln("背景音乐解析为空")
|
||||
}
|
||||
|
||||
c.Next()
|
||||
|
||||
@@ -17,7 +17,7 @@ func PayloadJSON[T schema.JsonModel]() leaf.HandlerFunc {
|
||||
pm := new(T)
|
||||
err := json.Unmarshal(c.Payload, pm)
|
||||
if err != nil {
|
||||
logger.Panicf("报文解析错误: %v\n", err)
|
||||
logger.Panicln("报文解析错误", err)
|
||||
}
|
||||
leaf.WithValue[*T](c, PayloadJSONKey, pm)
|
||||
c.Next()
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
func RunLog() leaf.HandlerFunc {
|
||||
return func(c *leaf.Context) {
|
||||
logger.Infof("收到消息, topic: %s, payload: %s", c.Topic, c.Payload)
|
||||
defer logger.Infof("执行结束")
|
||||
defer logger.Infof("处理结束")
|
||||
|
||||
c.Next()
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package middleware
|
||||
import (
|
||||
"game-driver/internal/schema"
|
||||
"game-driver/leaf"
|
||||
"game-driver/pkg/logger"
|
||||
"game-driver/pkg/relay"
|
||||
)
|
||||
|
||||
@@ -13,6 +14,11 @@ func RelayMaster(r *relay.Device) leaf.HandlerFunc {
|
||||
if r != nil && pm.Power {
|
||||
r.On(1)
|
||||
defer r.Off(1)
|
||||
|
||||
logger.Infoln("开启电源")
|
||||
defer logger.Infoln("关闭电源")
|
||||
} else {
|
||||
logger.Infoln("继电器未开启/不需要电源控制")
|
||||
}
|
||||
c.Next()
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package middleware
|
||||
import (
|
||||
"game-driver/internal/common"
|
||||
"game-driver/leaf"
|
||||
"game-driver/pkg/logger"
|
||||
)
|
||||
|
||||
// EmergencyStop 紧急停止中间件
|
||||
@@ -17,10 +18,13 @@ func EmergencyStop(stopper common.Stopper) leaf.HandlerFunc {
|
||||
defer close(a)
|
||||
|
||||
go func() {
|
||||
defer logger.Infoln("结束停止信号监控")
|
||||
|
||||
select {
|
||||
case <-a:
|
||||
case <-stopper.Done():
|
||||
{
|
||||
logger.Infoln("紧急停止信号触发")
|
||||
cancel()
|
||||
leaf.WithValue[leaf.EndType](c, leaf.EndKey, leaf.EndStop)
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package middleware
|
||||
import (
|
||||
"game-driver/internal/schema"
|
||||
"game-driver/leaf"
|
||||
"game-driver/pkg/logger"
|
||||
"game-driver/pkg/tts"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -31,14 +32,18 @@ func TickerAction() leaf.HandlerFunc {
|
||||
// 发送结束信号
|
||||
defer close(a)
|
||||
|
||||
wait.Add(1)
|
||||
go func() {
|
||||
start := time.Now()
|
||||
// 等待结束
|
||||
wait.Add(1)
|
||||
defer wait.Done()
|
||||
// 定时器
|
||||
ticker := time.NewTicker(time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
logger.Infoln("开始 Ticker 计时")
|
||||
defer logger.Infoln("结束 Ticker 计时")
|
||||
|
||||
for over := false; !over; {
|
||||
select {
|
||||
case <-a:
|
||||
|
||||
@@ -3,6 +3,7 @@ package middleware
|
||||
import (
|
||||
"game-driver/internal/schema"
|
||||
"game-driver/leaf"
|
||||
"game-driver/pkg/logger"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
@@ -31,15 +32,20 @@ func TimeoutOver(maxTimeout int) leaf.HandlerFunc {
|
||||
defer close(a)
|
||||
|
||||
cancel := leaf.WithCancel(c)
|
||||
wait.Add(1)
|
||||
go func() {
|
||||
// 等待结束
|
||||
wait.Add(1)
|
||||
defer wait.Done()
|
||||
|
||||
logger.Infoln("超时 Timer 监控开始")
|
||||
defer logger.Infoln("超时 Timer 监控结束")
|
||||
|
||||
// 结束标志
|
||||
select {
|
||||
case <-a:
|
||||
case <-timer.C: // 定时器结束
|
||||
{
|
||||
logger.Infoln("超时 Timer 触发")
|
||||
cancel()
|
||||
leaf.WithValue[leaf.EndType](c, leaf.EndKey, leaf.EndTimer)
|
||||
}
|
||||
|
||||
28
internal/middleware/unique.go
Normal file
28
internal/middleware/unique.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"game-driver/internal/common"
|
||||
"game-driver/leaf"
|
||||
"game-driver/pkg/logger"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// Unique 唯一任务中间件,会停止之前的任务,让新任务执行。同一时间只能有一个任务在执行
|
||||
func Unique(stopper common.Stopper) leaf.HandlerFunc {
|
||||
var lock sync.Mutex
|
||||
return func(c *leaf.Context) {
|
||||
if !lock.TryLock() {
|
||||
logger.Infoln("尝试加锁失败,执行停止任务")
|
||||
stopper.Stop()
|
||||
lock.Lock()
|
||||
}
|
||||
logger.Infoln("加锁完成")
|
||||
|
||||
defer func() {
|
||||
lock.Unlock()
|
||||
logger.Infoln("解锁完成")
|
||||
}()
|
||||
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user