feat: rtksrv v1 test
This commit is contained in:
parent
1ddfb78c41
commit
0698640b26
@ -9,6 +9,7 @@ import com.imdroid.sideslope.bd.Gga;
|
||||
import com.imdroid.sideslope.bd.Rtcm1005;
|
||||
import com.imdroid.sideslope.message.D331RtcmMessage;
|
||||
import com.imdroid.sideslope.ntrip.UdpNtripServer;
|
||||
import com.imdroid.sideslope.ntrip.RtcmUdpForwarder;
|
||||
import com.imdroid.sideslope.service.Device;
|
||||
import com.imdroid.sideslope.service.DeviceService;
|
||||
import com.imdroid.sideslope.server.DeviceChannel;
|
||||
@ -45,6 +46,8 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
|
||||
private DataPersistService dataPersistService;
|
||||
@Autowired
|
||||
UdpNtripServer ntripServer;
|
||||
@Autowired
|
||||
RtcmUdpForwarder rtcmUdpForwarder;
|
||||
|
||||
// 添加一个成员变量用于追踪每个测站最后一次转发D300数据的时间
|
||||
private final Map<String, Long> lastD300ForwardTimeMap = new ConcurrentHashMap<>();
|
||||
@ -288,6 +291,9 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
|
||||
//System.out.println("挂载点: " + mountpoint);
|
||||
//System.out.println("RTCM数据: " + rtcm);
|
||||
ntripServer.send(mountpoint, rtcm);
|
||||
|
||||
// 同时转发到12001端口
|
||||
rtcmUdpForwarder.forward(mountpoint, rtcm);
|
||||
});
|
||||
} catch (Exception e) {
|
||||
logger.error("处理NTRIP数据失败, 挂载点: {}, 错误: {}", mountpoint, e.getMessage());
|
||||
|
||||
@ -0,0 +1,65 @@
|
||||
package com.imdroid.sideslope.ntrip;
|
||||
|
||||
import com.imdroid.common.util.ByteUtil;
|
||||
import com.imdroid.common.util.ThreadManager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 将RTCM数据转发到指定UDP端口
|
||||
*/
|
||||
@Service
|
||||
public class RtcmUdpForwarder {
|
||||
private final Logger logger = LoggerFactory.getLogger(RtcmUdpForwarder.class);
|
||||
|
||||
@Value("${rtcm.forward.port:12001}")
|
||||
private Integer forwardPort;
|
||||
|
||||
private DatagramSocket socket;
|
||||
private DatagramPacket outPacket;
|
||||
|
||||
/**
|
||||
* 转发RTCM数据到UDP端口
|
||||
* @param mount 挂载点名称
|
||||
* @param hexRtcm 差分信息16进制字符串
|
||||
*/
|
||||
public void forward(String mount, String hexRtcm) {
|
||||
ThreadManager.getSingleThreadPool(RtcmUdpForwarder.class.getName()).execute(() -> {
|
||||
try {
|
||||
if (socket == null) socket = new DatagramSocket();
|
||||
if (outPacket == null) outPacket = new DatagramPacket(new byte[0], 0, InetAddress.getByName("localhost"), forwardPort);
|
||||
|
||||
// 转发原始RTCM数据,不添加挂载点信息
|
||||
byte[] rtcmData = ByteUtil.hexStringTobyte(hexRtcm);
|
||||
outPacket.setData(rtcmData);
|
||||
socket.send(outPacket);
|
||||
|
||||
logger.debug("Forwarded RTCM data from mountpoint {} to UDP port {}, data length: {}",
|
||||
mount, forwardPort, rtcmData.length);
|
||||
} catch (Exception e) {
|
||||
socket = null;
|
||||
outPacket = null;
|
||||
logger.error("Failed to forward RTCM data: {}", e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 转发多条RTCM数据到UDP端口
|
||||
* @param mount 挂载点名称
|
||||
* @param hexRtcmList 差分信息16进制字符串列表
|
||||
*/
|
||||
public void forward(String mount, List<String> hexRtcmList) {
|
||||
logger.debug("Forwarding {} RTCM messages from mountpoint {}", hexRtcmList.size(), mount);
|
||||
for (String hexRtcm : hexRtcmList) {
|
||||
forward(mount, hexRtcm);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user