mqtt加入认证,优化视频播放与浏览器

This commit is contained in:
2025-03-07 16:04:19 +08:00
parent c71e8bc13d
commit febcdfdbf7
13 changed files with 60 additions and 82 deletions

View File

@@ -1,45 +1,50 @@
package common
import "sync"
import (
"context"
"sync"
)
type PauseSub struct {
ctrl *CtrlWait
// 回调函数
ctrl *CtrlWait
items []chan int8
m sync.RWMutex
}
// Add 添加一个暂停项
func (p *PauseSub) Add(item chan int8) {
func (p *PauseSub) GetNew() chan int8 {
p.m.Lock()
defer p.m.Unlock()
p.items = append(p.items, item)
sub := make(chan int8)
p.items = append(p.items, sub)
return sub
}
// Remove 移除一个暂停项
func (p *PauseSub) Remove(item chan int8) {
func (p *PauseSub) Close(sub chan int8) {
p.m.Lock()
defer p.m.Unlock()
close(sub)
for i, v := range p.items {
if v == item {
if v == sub {
p.items = append(p.items[:i], p.items[i+1:]...)
}
}
}
// Run 开始监听
func (p *PauseSub) Run() {
func (p *PauseSub) Run(ctx context.Context) {
p.ctrl.Open()
defer p.ctrl.Close()
for {
select {
case <-p.ctrl.C:
case <-ctx.Done():
return
case c := <-p.ctrl.C:
go func() {
p.m.RLock()
defer p.m.RUnlock()
for _, item := range p.items {
item <- 1
item <- c
}
}()
}
@@ -48,6 +53,7 @@ func (p *PauseSub) Run() {
func NewPauseSub(c *CtrlWait) *PauseSub {
return &PauseSub{
ctrl: c,
ctrl: c,
items: make([]chan int8, 0),
}
}

View File

@@ -13,6 +13,9 @@ func EmergencyStop(stopper common.Stopper) leaf.HandlerFunc {
cancel := leaf.WithCancel(c)
defer stopper.Reset()
zap.S().Infoln("监听停止信号")
defer zap.S().Infoln("结束停止信号监听")
// 等待组
var wait sync.WaitGroup
defer wait.Wait()
@@ -22,11 +25,9 @@ func EmergencyStop(stopper common.Stopper) leaf.HandlerFunc {
// 发送结束信号
defer close(a)
zap.S().Infoln("监听停止信号")
wait.Add(1)
go func() {
defer wait.Done()
defer zap.S().Infoln("结束停止信号监听")
select {
case <-a:

View File

@@ -16,11 +16,11 @@ func OnlyVideo(c *leaf.Context) {
defer utils.BlankClose()
if url, ok := payload.Game["video"]; ok {
local, err := utils.LinkVideo(url.(string))
path, local, err := utils.LinkVideo(url.(string))
if err != nil {
zap.S().Errorln("视频文件获取异常: ", err)
return
}
_ = video.Play(c, local)
_ = video.Play(c, path, local)
}
}

View File

@@ -12,7 +12,7 @@ import (
func Video(item schema.WaitItemModel) func(c context.Context) error {
return func(c context.Context) error {
local, err := utils.LinkVideo(item.Data)
path, local, err := utils.LinkVideo(item.Data)
if err != nil {
return fmt.Errorf("视频文件获取异常: %w", err)
}
@@ -24,7 +24,7 @@ func Video(item schema.WaitItemModel) func(c context.Context) error {
defer utils.BlankClose()
for {
err := video.Play(c, local)
err := video.Play(c, path, local)
if err != nil {
return fmt.Errorf("视频播放异常: %w", err)
}

View File

@@ -13,14 +13,11 @@ func Pause(ps *common.PauseSub, isPause bool, play func(c context.Context) error
run := true
if isPause {
p := make(chan int8)
defer close(p)
zap.S().Infoln("待机暂停控制器")
defer zap.S().Infoln("待机暂停控制器结束")
ps.Add(p)
defer ps.Remove(p)
zap.S().Infoln("待机控制器")
defer zap.S().Infoln("待机控制器结束")
p := ps.GetNew()
defer ps.Close(p)
// 等待组
var wait sync.WaitGroup

View File

@@ -25,6 +25,9 @@ func Time(rootRules []cronrange.Rule, cron string, play func(c context.Context)
a := make(chan bool)
defer close(a)
zap.S().Infoln("待机时间控制器")
defer zap.S().Infoln("待机时间控制器结束")
// 等待组
var waitGroup sync.WaitGroup
defer waitGroup.Wait()

View File

@@ -38,7 +38,7 @@ func WaitAction(ctrl *common.CtrlWait) leaf.HandlerFunc {
waitGroup.Add(1)
go func() {
defer waitGroup.Done()
ps.Run()
ps.Run(c)
}()
// 处理每个待机控制

View File

@@ -40,6 +40,7 @@ func buildMqtt(c config.MqttConfig, r *leaf.Engine, subTopics ...string) autopah
mqttConfig := autopaho.ClientConfig{
ServerUrls: []*url.URL{u},
KeepAlive: 20,
ConnectPassword: []byte(c.Password),
CleanStartOnInitialConnection: false,
SessionExpiryInterval: 60,
OnConnectionUp: func(cm *autopaho.ConnectionManager, _ *paho.Connack) {
@@ -56,7 +57,7 @@ func buildMqtt(c config.MqttConfig, r *leaf.Engine, subTopics ...string) autopah
zap.S().Infof("MQTT 连接异常: %s\n", err)
},
ClientConfig: paho.ClientConfig{
ClientID: fmt.Sprintf("game-driver-%s-%v", config.C.Location, config.C.Point),
ClientID: c.ClientID,
OnPublishReceived: []func(paho.PublishReceived) (bool, error){
func(pr paho.PublishReceived) (bool, error) {
r.Route(pr.Packet.Packet())
@@ -109,8 +110,8 @@ func Run() {
router := leaf.Default(ctx)
log, _ := zap.NewStdLogAt(zap.L(), zap.DebugLevel)
router.SetDebugLogger(log)
logAt, _ := zap.NewStdLogAt(zap.L(), zap.DebugLevel)
router.SetDebugLogger(logAt)
router.DefaultHandler(func(c *leaf.Context) {
zap.S().Infof("未处理消息topic: %s\n payload: %s\n", c.Topic, c.Payload)