package message_server import ( "fmt" "joylink.club/bj-rtsts-server/dto/state_proto" "joylink.club/bj-rtsts-server/message_server/ms_api" "joylink.club/bj-rtsts-server/mqtt" "joylink.club/bj-rtsts-server/ts/simulation/wayside/memory" "log/slog" "time" ) // 综合后备盘IBP消息服务 func NewTrainControlMs(vs *memory.VerifySimulation, mapId int32) ms_api.MsgTask { return ms_api.NewScheduleTask(fmt.Sprintf("地图[%d]列车控制", mapId), func() error { allTrainMap := &vs.Memory.Status.TrainStateMap allTrainMap.Range(func(key, value any) bool { trainId := fmt.Sprintf("%v", key) ts := value.(*state_proto.TrainState) ttcc := ts.Tcc lights := make([]*state_proto.TrainControlState_ControlLight, 0) for _, light := range ttcc.LightMaps { lights = append(lights, &state_proto.TrainControlState_ControlLight{Id: light.Id, Val: light.Val}) } tcc := &state_proto.TrainControlStateMsg{Buttons: ttcc.Buttons, DriverKey: ttcc.DriverKey, DirKey: ttcc.DirKey, PushHandler: ttcc.PushHandler, Lights: lights} err := mqtt.GetMsgClient().PubTrainControlState(vs.SimulationId, trainId, tcc) if err != nil { slog.Error("发送列车控制mqtt失败", err) } return true }) return nil }, 200*time.Millisecond) }