发卡关卡的读卡流程完成
This commit is contained in:
@@ -3,14 +3,18 @@ package play
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"game-driver/config/game"
|
||||
"game-driver/internal/middleware"
|
||||
"game-driver/internal/routes/play/card_pusher"
|
||||
"game-driver/internal/schema"
|
||||
"game-driver/leaf"
|
||||
"game-driver/pkg/card_reader"
|
||||
"game-driver/pkg/utils"
|
||||
"github.com/eclipse/paho.golang/paho"
|
||||
"go.uber.org/zap"
|
||||
"io/fs"
|
||||
"os"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
@@ -26,11 +30,35 @@ type ResponseBody struct {
|
||||
func PushCard(ctx context.Context) leaf.HandlerFunc {
|
||||
g := (game.G).(game.ConfigPush)
|
||||
|
||||
// 开始初始化读卡器
|
||||
reader, err := card_reader.NewReader(g.ReadURL)
|
||||
if err != nil {
|
||||
if errors.Is(err, fs.ErrNotExist) {
|
||||
zap.S().Errorf("读卡器串口文件不存在: %s", g.ReadURL)
|
||||
os.Exit(1)
|
||||
}
|
||||
zap.S().Panicf("读卡器串口连接失败 [%T]: %q", err, err)
|
||||
}
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
_ = reader.Close()
|
||||
}()
|
||||
|
||||
// 开始初始化发卡器
|
||||
devices := make([]*card_pusher.Device, 0)
|
||||
for _, group := range g.CardGroups {
|
||||
for i, group := range g.PushGroups {
|
||||
// 对读卡器初始化配置
|
||||
reader.SetUnitID(uint8(i + 1))
|
||||
err = reader.Init()
|
||||
if err != nil {
|
||||
zap.S().Panicln("读卡器初始配置失败", err)
|
||||
}
|
||||
|
||||
// 解析发卡器配置
|
||||
gv, _ := json.Marshal(group)
|
||||
zap.S().Info("发卡器指针:", string(gv))
|
||||
|
||||
// 初始化发卡器
|
||||
device, err := card_pusher.New(group)
|
||||
if err != nil {
|
||||
zap.S().Panicln("初始化发卡器失败: ", err)
|
||||
@@ -84,6 +112,13 @@ func PushCard(ctx context.Context) leaf.HandlerFunc {
|
||||
// 延迟1秒获取结果并发送消息
|
||||
time.AfterFunc(time.Second, func() {
|
||||
if body.num != 0 {
|
||||
// 若卡片就位,读取卡片信息
|
||||
if devices[body.num-1].GetOutOk() == 1 {
|
||||
reader.SetUnitID(uint8(body.num))
|
||||
if info := reader.GetCardInfo(); info != nil {
|
||||
body.CardId = info.ID
|
||||
}
|
||||
}
|
||||
body.OutOk += devices[body.num-1].GetOutOk()
|
||||
}
|
||||
publishBody(ctx, c.Properties.ResponseTopic, body)
|
||||
|
||||
@@ -85,7 +85,7 @@ func WaitCard(ctx context.Context) leaf.HandlerFunc {
|
||||
wait.Add(1)
|
||||
go func() {
|
||||
defer wait.Done()
|
||||
reader.OnCardInfo(cc, func(info card_reader.CardInfo) {
|
||||
reader.OnCardInfo(cc, func(info *card_reader.CardInfo) {
|
||||
cardInfo.Send(info.ID)
|
||||
})
|
||||
}()
|
||||
|
||||
Reference in New Issue
Block a user