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.bd.Rtcm1005;
|
||||||
import com.imdroid.sideslope.message.D331RtcmMessage;
|
import com.imdroid.sideslope.message.D331RtcmMessage;
|
||||||
import com.imdroid.sideslope.ntrip.UdpNtripServer;
|
import com.imdroid.sideslope.ntrip.UdpNtripServer;
|
||||||
|
import com.imdroid.sideslope.ntrip.RtcmUdpForwarder;
|
||||||
import com.imdroid.sideslope.service.Device;
|
import com.imdroid.sideslope.service.Device;
|
||||||
import com.imdroid.sideslope.service.DeviceService;
|
import com.imdroid.sideslope.service.DeviceService;
|
||||||
import com.imdroid.sideslope.server.DeviceChannel;
|
import com.imdroid.sideslope.server.DeviceChannel;
|
||||||
@ -45,6 +46,8 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
|
|||||||
private DataPersistService dataPersistService;
|
private DataPersistService dataPersistService;
|
||||||
@Autowired
|
@Autowired
|
||||||
UdpNtripServer ntripServer;
|
UdpNtripServer ntripServer;
|
||||||
|
@Autowired
|
||||||
|
RtcmUdpForwarder rtcmUdpForwarder;
|
||||||
|
|
||||||
// 添加一个成员变量用于追踪每个测站最后一次转发D300数据的时间
|
// 添加一个成员变量用于追踪每个测站最后一次转发D300数据的时间
|
||||||
private final Map<String, Long> lastD300ForwardTimeMap = new ConcurrentHashMap<>();
|
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("挂载点: " + mountpoint);
|
||||||
//System.out.println("RTCM数据: " + rtcm);
|
//System.out.println("RTCM数据: " + rtcm);
|
||||||
ntripServer.send(mountpoint, rtcm);
|
ntripServer.send(mountpoint, rtcm);
|
||||||
|
|
||||||
|
// 同时转发到12001端口
|
||||||
|
rtcmUdpForwarder.forward(mountpoint, rtcm);
|
||||||
});
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("处理NTRIP数据失败, 挂载点: {}, 错误: {}", mountpoint, e.getMessage());
|
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