This commit is contained in:
tiger_zhou 2024-01-12 11:09:10 +08:00
parent c561e51a17
commit 3cfde83eef
8 changed files with 26 additions and 59 deletions

View File

@ -60,7 +60,9 @@ public class FrameSchemaParse {
private static void messageDecode(ByteBuf buf, List<MessageData> messages) throws Exception { private static void messageDecode(ByteBuf buf, List<MessageData> messages) throws Exception {
int len = buf.getUnsignedShort(0); int len = buf.getUnsignedShort(0);
byte[] msgData = new byte[len + 2]; byte[] msgData = new byte[len + 2];
// ByteBuf msgBuf =
buf.readBytes(msgData); buf.readBytes(msgData);
ByteBuf msgBuf = Unpooled.wrappedBuffer(msgData); ByteBuf msgBuf = Unpooled.wrappedBuffer(msgData);
int msgId = msgBuf.getUnsignedShort(8); int msgId = msgBuf.getUnsignedShort(8);
@ -86,7 +88,7 @@ public class FrameSchemaParse {
inByteBuf.markReaderIndex(); inByteBuf.markReaderIndex();
int totalReadables = inByteBuf.readableBytes(); int totalReadables = inByteBuf.readableBytes();
if (totalReadables < 4) { if (totalReadables < 4) {
// inByteBuf.resetReaderIndex(); inByteBuf.resetReaderIndex();
log.error("数据不全,当前可读[{}]", totalReadables); log.error("数据不全,当前可读[{}]", totalReadables);
return false; return false;
} }
@ -100,9 +102,10 @@ public class FrameSchemaParse {
log.error("可读内容不足 sysId[{}] totalLen[{}] flag[{}] contentLen[{}] readableBytes[{}]", sysId, totalLength, flag, contentLen, readables); log.error("可读内容不足 sysId[{}] totalLen[{}] flag[{}] contentLen[{}] readableBytes[{}]", sysId, totalLength, flag, contentLen, readables);
return false; return false;
} }
// byte[] bb = new byte[contentLen]; byte[] bb = new byte[contentLen];
// inByteBuf.readBytes(bb); inByteBuf.readBytes(bb);
packageData.writeBytes(inByteBuf, contentLen); packageData.writeBytes(inByteBuf);
// packageData.writeBytes(inByteBuf, contentLen);
return flag != Flag_Multi; return flag != Flag_Multi;
} }
} }

View File

@ -74,8 +74,10 @@ public abstract class MessageData {
this.version = buf.readUnsignedShort(); this.version = buf.readUnsignedShort();
this.msgId = MessageId.of(buf.readShort()); this.msgId = MessageId.of(buf.readShort());
this.decode2(buf); this.decode2(buf);
// buf.clear();
buf.release(); buf.release();
} else { } else {
// buf.clear();
buf.release(); buf.release();
throw new Exception( throw new Exception(
String.format("OCC消息可读字节数小于%sreadableBytes=%s", headerBytes, readableBytes)); String.format("OCC消息可读字节数小于%sreadableBytes=%s", headerBytes, readableBytes));

View File

@ -36,7 +36,6 @@ public class OccMessageHandler extends SimpleChannelInboundHandler<List<MessageD
static { static {
DeviceStatusConvertorManager.addStatusConvertor(new DeviceInitConvertor()); DeviceStatusConvertorManager.addStatusConvertor(new DeviceInitConvertor());
// DeviceStatusConvertorManager.addStatusConvertor(new AlterBlueDisplayConvertor());
DeviceStatusConvertorManager.addStatusConvertor(new DeviceChangeStatusConvertor()); DeviceStatusConvertorManager.addStatusConvertor(new DeviceChangeStatusConvertor());
DeviceStatusConvertorManager.addStatusConvertor(new TrainInitConvertor()); DeviceStatusConvertorManager.addStatusConvertor(new TrainInitConvertor());
DeviceStatusConvertorManager.addStatusConvertor(new TrainRecordConvertor()); DeviceStatusConvertorManager.addStatusConvertor(new TrainRecordConvertor());

View File

@ -4,19 +4,13 @@ import club.joylink.xiannccda.ats.message.line3.req.LoadHistoryTGDataRequest;
import club.joylink.xiannccda.ats.message.line3.req.LoadHistoryTGDataRequest.ApplyTypeEnum; import club.joylink.xiannccda.ats.message.line3.req.LoadHistoryTGDataRequest.ApplyTypeEnum;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;
@Slf4j @Slf4j
public class XianOccMessagingClient { public class XianOccMessagingClient {
@ -98,7 +92,6 @@ public class XianOccMessagingClient {
* 连接OCC服务 * 连接OCC服务
*/ */
public void connect(boolean monitorHandwareChange) { public void connect(boolean monitorHandwareChange) {
this.timeOutHandler.monitorHandwareChange = monitorHandwareChange;
this.timeOutHandler.start(); this.timeOutHandler.start();
} }
@ -126,18 +119,15 @@ public class XianOccMessagingClient {
static ScheduledExecutorService Executor = Executors.newSingleThreadScheduledExecutor(); static ScheduledExecutorService Executor = Executors.newSingleThreadScheduledExecutor();
private final LinkedList<OccTcpClientConnection> clientConnections = new LinkedList<>(); private final LinkedList<OccTcpClientConnection> clientConnections = new LinkedList<>();
private final SystemInfo systemInfo;
private boolean monitorHandwareChange; // private long[] ticks;
private long[] ticks;
public void shutdown() { public void shutdown() {
Executor.shutdownNow(); Executor.shutdownNow();
} }
public ConnectionTimeOutHandler() { public ConnectionTimeOutHandler() {
this.systemInfo = new SystemInfo(); // this.systemInfo = new SystemInfo();
if (Executor.isShutdown()) { if (Executor.isShutdown()) {
Executor = Executors.newSingleThreadScheduledExecutor(); Executor = Executors.newSingleThreadScheduledExecutor();
} }
@ -147,47 +137,15 @@ public class XianOccMessagingClient {
this.clientConnections.add(conn); this.clientConnections.add(conn);
} }
private String hardWareUserInfo() {
CentralProcessor cpu = systemInfo.getHardware().getProcessor();
GlobalMemory memory = systemInfo.getHardware().getMemory();
if (Objects.isNull(ticks)) {
ticks = cpu.getSystemCpuLoadTicks();
} else {
double d2 = cpu.getSystemCpuLoadBetweenTicks(ticks);
ticks = cpu.getSystemCpuLoadTicks();
long totalMemory = memory.getTotal();
long availableMemory = memory.getAvailable();
long usedMemory = totalMemory - availableMemory;
return String.format("当前CPU使用:%d%% 内存总内存:%s(MB) 使用:%s(MB) 可用:%s(MB)", Math.round(d2 * 100), (totalMemory / 1024 / 1024), (usedMemory / 1024 / 1024),
(availableMemory / 1024 / 1024));
}
return null;
/* GlobalMemory memory = systemInfo.getHardware().getMemory();
long totalMemory = memory.getTotal();
long availableMemory = memory.getAvailable();
long usedMemory = totalMemory - availableMemory;
if (Objects.isNull(this.osProcess)) {
return String.format("内存总内存:%s(MB) 使用:%s(MB) 可用:%s(MB)", (totalMemory / 1024 / 1024), (usedMemory / 1024 / 1024),
(availableMemory / 1024 / 1024));
} else {
OSProcess osp = this.systemInfo.getOperatingSystem().getProcess(this.processId);
double d2 = this.osProcess.getProcessCpuLoadBetweenTicks(osp);
return String.format("当前CPU使用:%d%% 内存总内存:%s(MB) 使用:%s(MB) 可用:%s(MB)", Math.round(d2 * 100), (totalMemory / 1024 / 1024), (usedMemory / 1024 / 1024),
(availableMemory / 1024 / 1024));
}*/
}
public void start() { public void start() {
Executor.scheduleWithFixedDelay(() -> { Executor.scheduleWithFixedDelay(() -> {
if (this.monitorHandwareChange) { /* if (this.monitorHandwareChange) {
String moitorContent = this.hardWareUserInfo(); String moitorContent = this.hardWareUserInfo();
if (StringUtils.isNotEmpty(moitorContent)) { if (StringUtils.isNotEmpty(moitorContent)) {
log.info(moitorContent); log.info(moitorContent);
} }
} }*/
for (OccTcpClientConnection cc : this.clientConnections) { for (OccTcpClientConnection cc : this.clientConnections) {
if (cc.connected) { if (cc.connected) {
long ctm = System.currentTimeMillis(); long ctm = System.currentTimeMillis();

View File

@ -78,7 +78,7 @@ public abstract class DeviceStatusDataOperate {
})); }));
// 对比结果 // 对比结果
Map<String, Message> compareMap = compare(deviceStatusMap, newDeviceMap); Map<String, Message> compareMap = compare(deviceStatusMap, newDeviceMap);
if (!CollectionUtils.isEmpty(compareMap)) { if (!CollectionUtils.isEmpty(compareMap) && (!(data instanceof DeviceStatusData))) {
statusVOMap.put(k, compareMap); statusVOMap.put(k, compareMap);
} }
}); });

View File

@ -65,7 +65,8 @@ public class DateTimeUtil {
public static LocalDateTime convert(ByteBuf buf) { public static LocalDateTime convert(ByteBuf buf) {
byte[] data = new byte[7]; byte[] data = new byte[7];
buf.readBytes(data); ByteBuf bb = buf.readBytes(data);
// bb.clear();
return convert(data); return convert(data);
} }

View File

@ -28,9 +28,11 @@ public class EntityParseUtil {
public static String convertStr(ByteBuf buf, int len) { public static String convertStr(ByteBuf buf, int len) {
byte[] data = new byte[len]; ByteBuf bb = buf.readBytes(len);
buf.readBytes(data); String str = new String(bb.array(), MessageCons.STRING_CHARSET).trim();
return new String(data, MessageCons.STRING_CHARSET).trim(); bb.clear();
bb.release();
return str;
} }
public interface ReadData<T> { public interface ReadData<T> {

View File

@ -16,6 +16,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
@ -27,6 +28,7 @@ import org.springframework.stereotype.Component;
@Component @Component
@Order(1) @Order(1)
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j
public class MockLoadData implements ApplicationRunner { public class MockLoadData implements ApplicationRunner {
static final ScheduledExecutorService CIRCLE_QUERY_THREAD = Executors.newSingleThreadScheduledExecutor(); static final ScheduledExecutorService CIRCLE_QUERY_THREAD = Executors.newSingleThreadScheduledExecutor();
@ -40,13 +42,13 @@ public class MockLoadData implements ApplicationRunner {
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
this.nccMockDataService.reset(10); this.nccMockDataService.reset(10);
AtomicInteger ai = new AtomicInteger(0); AtomicInteger ai = new AtomicInteger(0);
CIRCLE_QUERY_THREAD.scheduleAtFixedRate(() -> { CIRCLE_QUERY_THREAD.scheduleWithFixedDelay(() -> {
// this.nccMockDataService.skip(170L, 1100L, 1180L); // this.nccMockDataService.skip(170L, 1100L, 1180L);
// if (ai.incrementAndGet() > 1) { // if (ai.incrementAndGet() > 1) {
// return; // return;
// } // }
loadData(); loadData();
}, 1500, 1500, TimeUnit.MILLISECONDS); }, 500, 500, TimeUnit.MILLISECONDS);
} }
private void loadData() { private void loadData() {
@ -65,7 +67,7 @@ public class MockLoadData implements ApplicationRunner {
DeviceStatusConvertorManager.doConvertor(dataList.stream().map(d -> (MessageData) d).collect(Collectors.toList())); DeviceStatusConvertorManager.doConvertor(dataList.stream().map(d -> (MessageData) d).collect(Collectors.toList()));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(e.getMessage(), e);
} }
} }