rts-sim-testing-service/third_party/train_pc_sim/train_pc_receive_handler.go

103 lines
3.2 KiB
Go
Raw Normal View History

package train_pc_sim
import (
2024-09-10 15:37:40 +08:00
"fmt"
"joylink.club/bj-rtsts-server/dto/state_proto"
"joylink.club/bj-rtsts-server/third_party/message"
"joylink.club/bj-rtsts-server/third_party/tcp"
"joylink.club/bj-rtsts-server/third_party/tpapi"
2024-07-11 14:58:34 +08:00
"log/slog"
)
type TrainPcReciverData struct {
tpapi.ThirdPartyApiService
clientKey string
tcpClient *tcp.TcpClient
pcSimManage TrainPcSimManage
2024-09-10 15:37:40 +08:00
state tpapi.ThirdPartyApiServiceState
speedPlace *message.TrainSpeedPlaceReportMsg
train *state_proto.TrainState
success bool
2024-09-11 21:19:42 +08:00
//aPort bool //列车钥匙激活端口 true = 1端 false = 2端
RealTrainPort state_proto.TrainState_TrainPort
LineInitTimeStamp int64
TrainConnInitComplate bool
ConnErr bool
}
func (rd *TrainPcReciverData) ConnError() bool {
connState := tpapi.ThirdPartyState_Normal
if rd.ConnErr {
connState = tpapi.ThirdPartyState_Broken
}
rd.updateState(connState)
return rd.ConnErr
}
func (rd *TrainPcReciverData) Type() state_proto.SimulationThirdPartyApiService_Type {
return state_proto.SimulationThirdPartyApiService_Train_pc_sim
}
// 服务状态
func (rd *TrainPcReciverData) State() tpapi.ThirdPartyApiServiceState {
return rd.state
}
func (d *TrainPcReciverData) updateState(state tpapi.ThirdPartyApiServiceState) {
d.state = state
}
func (d *TrainPcReciverData) readError(err error) {
slog.Error("连接车载pc仿真tcp服务断开", err)
d.updateState(tpapi.ThirdPartyState_Broken)
d.tcpClient = nil
}
2024-09-10 15:37:40 +08:00
func (d *TrainPcReciverData) ServiceDesc() string {
2024-09-11 21:19:42 +08:00
if d.RealTrainPort == state_proto.TrainState_PORT_A {
2024-09-10 15:37:40 +08:00
return fmt.Sprintf("%v-A端", d.clientKey)
2024-09-11 21:19:42 +08:00
} else if d.RealTrainPort == state_proto.TrainState_PORT_B {
2024-09-10 15:37:40 +08:00
return fmt.Sprintf("%v-B端", d.clientKey)
2024-09-11 21:19:42 +08:00
} else {
return fmt.Sprintf("%v-位置服务端口", d.clientKey)
2024-09-10 15:37:40 +08:00
}
}
2024-09-10 15:37:40 +08:00
func (rd *TrainPcReciverData) receiverDataHandle(n int, data []byte) {
train := rd.train
2024-09-10 15:37:40 +08:00
//vs := train.VobcState
if train == nil {
slog.Error("车载输出数字量未找到连接车载pc仿真的列车")
return
}
if !train.ConnState.Conn {
slog.Error("车载输出数字量,,列车未连接车载pc仿真")
return
}
2024-09-10 15:37:40 +08:00
//a := rd.tcpClient.RemoteInfo()
//slog.Info(fmt.Sprintf("nw:%v ,add:%v", a.Network(), a.String()), rd.aPort)
//slog.Info(fmt.Sprintf("接受atp信息 列车:%v 列车端口:%v ,钥匙1:%v,钥匙2:%v", train.Id, rd.aPort, train.VobcState.Tc1Active, train.VobcState.Tc2Active))
receiveData := data[:n]
trainPcMsgs := message.TrainPcSimDecode(receiveData)
for _, baseMsg := range trainPcMsgs {
2024-09-10 15:37:40 +08:00
switch baseMsg.Type {
//case RECIVE_TRAIN_CREATE_REMOVE:
// pc.trainPcSimManage.TrainPcSimConnOrRemoveHandle(baseMsg.Data[0])
2024-07-11 14:58:34 +08:00
case message.RECIVE_TRAIN_INTERFACE_CABINET_OUTR:
2024-09-11 21:19:42 +08:00
rd.pcSimManage.TrainPcSimDigitalOutInfoHandle(rd, train, baseMsg.Data)
case message.RECIVE_TRAIN_INTERFACE_CABINET_OUTR_BACK:
rd.pcSimManage.TrainPcSimDigitalReportHandle(train, baseMsg.Data)
case message.RECIVE_TRAIN_QUERY_STATUS:
2024-09-11 21:19:42 +08:00
rd.pcSimManage.TrainBtmQuery2(train, baseMsg.Data, rd.RealTrainPort)
2024-09-11 13:28:56 +08:00
//case message.RECIVE_TRAIN_MOCK_DATA:
// rd.pcSimManage.TrainPcSimMockInfo(train, baseMsg.Data)
//case RECIVE_TRAIN_DOOR_MODE:
// pc.trainPcSimManage.TrainDoorModeHandle(baseMsg.Data[0])
}
}
}