rts-sim-testing-service/message_server/simulation_state_ms.go

67 lines
2.0 KiB
Go

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)
}