完成发卡关卡全部功能

This commit is contained in:
2024-12-23 14:18:16 +08:00
parent c6b8106c2d
commit 73571c923a
5 changed files with 46 additions and 36 deletions

View File

@@ -30,45 +30,53 @@ type ResponseBody struct {
func PushCard(ctx context.Context) leaf.HandlerFunc {
g := (game.G).(game.ConfigPush)
// 开始初始化读卡器
reader, err := card_reader.NewReader(g.ReadAddr)
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
zap.S().Errorf("读卡器串口文件不存在: %s", g.ReadAddr)
os.Exit(1)
}
zap.S().Panicf("读卡器串口连接失败 [%T]: %q", err, err)
}
go func() {
<-ctx.Done()
_ = reader.Close()
}()
// 开始初始化发卡器
devices := make([]*card_pusher.Device, 0)
readers := make([]card_reader.Reader, len(g.PushGroups))
devices := make([]*card_pusher.Device, len(g.PushGroups))
for i, group := range g.PushGroups {
// 对读卡器初始化配置
reader.SetSlave(byte(i + 1))
err = reader.Init()
if err != nil {
zap.S().Panicln("读卡器初始配置失败", err)
// 解析配置
gv, _ := json.Marshal(group)
zap.S().Info("关卡配置:", string(gv))
// 开始连接读卡器
if group.Read != "" {
reader, err := card_reader.NewReader(group.Read)
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
zap.S().Errorf("读卡器串口文件不存在: %s", group.Read)
os.Exit(1)
}
zap.S().Panicf("读卡器串口 %q 连接失败 [%T]: %q", group.Read, err, err)
}
// 初始化读卡器
err = reader.Init()
if err != nil {
reader.Close()
zap.S().Panicf("读卡器 %q 初始配置失败: %s", group.Read, err)
}
// 保存读卡器
readers[i] = reader
}
// 解析发卡器配置
gv, _ := json.Marshal(group)
zap.S().Info("发卡器指针:", string(gv))
// 初始化发卡器
// 开始连接发卡器
device, err := card_pusher.New(group)
if err != nil {
zap.S().Panicln("初始化发卡器失败: ", err)
}
devices = append(devices, device)
// 保存读卡器和发卡器
devices[i] = device
}
go func() {
<-ctx.Done()
for _, reader := range readers {
if reader != nil {
_ = reader.Close()
}
}
for _, device := range devices {
device.Close()
if device != nil {
_ = device.Close()
}
}
}()
@@ -113,12 +121,12 @@ func PushCard(ctx context.Context) leaf.HandlerFunc {
time.AfterFunc(time.Second, func() {
if body.num != 0 {
// 若卡片就位,读取卡片信息
if devices[body.num-1].GetOutOk() == 1 {
reader.SetSlave(byte(body.num))
if info := reader.GetCardInfo(); info != nil {
if devices[body.num-1].GetOutOk() == 1 && readers[body.num-1] != nil {
if info := readers[body.num-1].GetCardInfo(); info != nil {
body.CardId = info.ID
}
}
body.OutOk += devices[body.num-1].GetOutOk()
}
publishBody(ctx, c.Properties.ResponseTopic, body)