package memory import ( "fmt" "unsafe" "joylink.club/bj-rtsts-server/dto/data_proto" "joylink.club/bj-rtsts-server/dto/request_proto" "joylink.club/ecs" "joylink.club/rtsssimulation/component" "joylink.club/rtsssimulation/component/component_data" "joylink.club/rtsssimulation/fi" ) // 处理继电器操作 func HandleRelayOperation(simulation *VerifySimulation, req *request_proto.RelayOperationReq) error { uid := QueryUidByMidAndComId(req.MapId, req.DeviceId, &data_proto.Relay{}) var err error switch req.Operation { case request_proto.Relay_ForceQw: err = fi.SetRelayFaultForce(simulation.World, uid, true) case request_proto.Relay_ForceHw: err = fi.SetRelayFaultForce(simulation.World, uid, false) case request_proto.Relay_CancelForce: err = fi.CancelRelayFaultForce(simulation.World, uid) default: panic(fmt.Sprintf("未知的继电器操作:%s", req.Operation)) } return err } func newRelayForceComp(q bool) unsafe.Pointer { return unsafe.Pointer(&component_data.RelayFaultForce{Q: q}) } func setRelayForce(e *ecs.Entry, q bool) { e.AddComponent(component.RelayFaultForceType, newRelayForceComp(q)) } func cancelRelayForce(e *ecs.Entry) { e.RemoveComponent(component.RelayFaultForceType) }