43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
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)
|
|
}
|