package message_server import ( "fmt" "time" "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" "joylink.club/ecs" ) func NewStateMs(vs *memory.VerifySimulation) ms_api.MsgTask { return ms_api.NewScheduleTask(fmt.Sprintf("仿真[%s]状态", vs.SimulationId), func() error { s := &state_proto.SimulationStatus{ SimulationId: vs.SimulationId, State: convertWorldState(vs.World.State()), } mqtt.GetMsgClient().PubSimulationState(vs.SimulationId, s) return nil }, 1000*time.Millisecond) // return ms_api.NewMonitorTask(fmt.Sprintf("仿真[%s]状态", vs.SimulationId), func() { // ecs.WorldStateChangeEvent.Subscribe(vs.World, func(_ ecs.World, e ecs.WorldStateChange) { // s := &state_proto.SimulationStatus{SimulationId: vs.SimulationId} // switch e.NewState { // case ecs.WorldClosed: // s.State = state_proto.SimulationStatus_DESTROY // case ecs.WorldError: // s.State = state_proto.SimulationStatus_ERROR // case ecs.WorldPause: // s.State = state_proto.SimulationStatus_PAUSE // default: // return // } // mqtt.GetMsgClient().PubSimulationState(vs.SimulationId, s) // }) // }) } func convertWorldState(state ecs.WorldState) state_proto.SimulationStatus_SimulationState { switch state { case ecs.WorldInit: return state_proto.SimulationStatus_Init case ecs.WorldRunning: return state_proto.SimulationStatus_Running case ecs.WorldPause: return state_proto.SimulationStatus_Pause case ecs.WorldError: return state_proto.SimulationStatus_Error case ecs.WorldClosed: return state_proto.SimulationStatus_Destroy default: panic("unknown world state") } } // 发布仿真销毁消息 func PubSimulationDestroyMsg(simulationId string) { s := &state_proto.SimulationStatus{ SimulationId: simulationId, State: state_proto.SimulationStatus_Destroy, } mqtt.GetMsgClient().PubSimulationState(simulationId, s) }