mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 02:55:04 +08:00
update 电单车协议
This commit is contained in:
@@ -45,7 +45,7 @@ public class StartAndLengthFieldFrameDecoder extends ByteToMessageDecoder {
|
||||
byte[] headerBytes = new byte[HEADER_LENGTH_DNY];
|
||||
buffer.getBytes(beginReader, headerBytes, 0, HEADER_LENGTH_DNY);
|
||||
String header = new String(headerBytes, StandardCharsets.UTF_8);
|
||||
|
||||
// log.info("检查包头是否是DNY, header:{}", header);
|
||||
if ("DNY".equals(header)) {
|
||||
// 处理 DNY 协议
|
||||
decodeDnyMessage(buffer, out, beginReader);
|
||||
@@ -117,6 +117,7 @@ public class StartAndLengthFieldFrameDecoder extends ByteToMessageDecoder {
|
||||
|
||||
// 获取消息长度
|
||||
int length = buffer.getUnsignedByte(beginReader + HEADER_LENGTH_DNY);
|
||||
// log.info("获取消息长度, length:{}", length);
|
||||
// 检查剩余数据是否足够
|
||||
if (buffer.readableBytes() < HEADER_LENGTH_DNY + 1 + length) {
|
||||
buffer.readerIndex(beginReader);
|
||||
@@ -124,8 +125,8 @@ public class StartAndLengthFieldFrameDecoder extends ByteToMessageDecoder {
|
||||
}
|
||||
|
||||
// 读取 data 数据
|
||||
ByteBuf frame = buffer.retainedSlice(beginReader, HEADER_LENGTH_DNY + 1 + length);
|
||||
buffer.readerIndex(beginReader + HEADER_LENGTH_DNY + 1 + length);
|
||||
ByteBuf frame = buffer.retainedSlice(beginReader, HEADER_LENGTH_DNY + length + 2);
|
||||
buffer.readerIndex(beginReader + HEADER_LENGTH_DNY + length + 2);
|
||||
out.add(frame);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import io.netty.handler.codec.ByteToMessageDecoder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Deprecated
|
||||
@Slf4j
|
||||
public class StartAndLengthFieldFrameDecoder2 extends ByteToMessageDecoder {
|
||||
private static final int HEADER_LENGTH_DNY = 3; // "DNY" 包头的长度
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.jsowell.netty.server.electricbicycles;
|
||||
|
||||
import com.jsowell.common.util.BytesUtil;
|
||||
import com.jsowell.netty.domain.ChargingPileMessage;
|
||||
import io.netty.channel.ChannelHandler;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
@@ -8,10 +9,12 @@ import io.netty.channel.ChannelInboundHandlerAdapter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.time.Instant;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@ChannelHandler.Sharable
|
||||
@@ -47,48 +50,48 @@ public class ChargingPileHandler extends ChannelInboundHandlerAdapter {
|
||||
|
||||
@Override
|
||||
public void channelRead(ChannelHandlerContext ctx, Object msg) {
|
||||
log.info("加载客户端报文=== channelId:{}, mag:{}", ctx.channel().id(), msg.toString());
|
||||
log.info("加载客户端报文=== channelId:{}, mag:{}", ctx.channel().id(), BytesUtil.binary((byte[]) msg, 16));
|
||||
// if (!(msg instanceof ChargingPileMessage)) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
ChargingPileMessage message = (ChargingPileMessage) msg;
|
||||
byte command = message.getCommand();
|
||||
|
||||
switch (command) {
|
||||
case 0x11:
|
||||
handleHeartbeat(ctx, message);
|
||||
break;
|
||||
case 0x12:
|
||||
handleTimeRequest(ctx, message);
|
||||
break;
|
||||
case 0x15:
|
||||
handleFirmwareUpgradeRequest(ctx, message);
|
||||
break;
|
||||
case (byte) 0xFA:
|
||||
handleFirmwareUpgradeResponse(ctx, message);
|
||||
break;
|
||||
case 0x31:
|
||||
handleReboot(ctx, message);
|
||||
break;
|
||||
case 0x32:
|
||||
handleCommunicationModuleReboot(ctx, message);
|
||||
break;
|
||||
case 0x33:
|
||||
handleClearUpgradeData(ctx, message);
|
||||
break;
|
||||
case 0x34:
|
||||
handleChangeIPAddress(ctx, message);
|
||||
break;
|
||||
case 0x35:
|
||||
handleSubdeviceVersionUpload(ctx, message);
|
||||
break;
|
||||
case 0x3B:
|
||||
handleFSKParameterRequest(ctx, message);
|
||||
break;
|
||||
default:
|
||||
log.info("Unknown command: " + String.format("0x%02X", command));
|
||||
}
|
||||
// ChargingPileMessage message = (ChargingPileMessage) msg;
|
||||
// byte command = message.getCommand();
|
||||
//
|
||||
// switch (command) {
|
||||
// case 0x11:
|
||||
// handleHeartbeat(ctx, message);
|
||||
// break;
|
||||
// case 0x12:
|
||||
// handleTimeRequest(ctx, message);
|
||||
// break;
|
||||
// case 0x15:
|
||||
// handleFirmwareUpgradeRequest(ctx, message);
|
||||
// break;
|
||||
// case (byte) 0xFA:
|
||||
// handleFirmwareUpgradeResponse(ctx, message);
|
||||
// break;
|
||||
// case 0x31:
|
||||
// handleReboot(ctx, message);
|
||||
// break;
|
||||
// case 0x32:
|
||||
// handleCommunicationModuleReboot(ctx, message);
|
||||
// break;
|
||||
// case 0x33:
|
||||
// handleClearUpgradeData(ctx, message);
|
||||
// break;
|
||||
// case 0x34:
|
||||
// handleChangeIPAddress(ctx, message);
|
||||
// break;
|
||||
// case 0x35:
|
||||
// handleSubdeviceVersionUpload(ctx, message);
|
||||
// break;
|
||||
// case 0x3B:
|
||||
// handleFSKParameterRequest(ctx, message);
|
||||
// break;
|
||||
// default:
|
||||
// log.info("Unknown command: " + String.format("0x%02X", command));
|
||||
// }
|
||||
}
|
||||
|
||||
private void handleHeartbeat(ChannelHandlerContext ctx, ChargingPileMessage message) {
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package com.jsowell.netty.server.electricbicycles;
|
||||
|
||||
import com.jsowell.netty.decoder.ChargingPileDecoder;
|
||||
import com.jsowell.netty.decoder.ProtocolDnyDecoder;
|
||||
import com.jsowell.netty.decoder.StartAndLengthFieldFrameDecoder;
|
||||
import com.jsowell.netty.decoder.StartAndLengthFieldFrameDecoder2;
|
||||
import io.netty.channel.ChannelInitializer;
|
||||
import io.netty.channel.ChannelPipeline;
|
||||
import io.netty.channel.socket.SocketChannel;
|
||||
@@ -26,7 +24,7 @@ public class ElectricBicyclesServerChannelInitializer extends ChannelInitializer
|
||||
@Override
|
||||
protected void initChannel(SocketChannel channel) throws Exception {
|
||||
ChannelPipeline pipeline = channel.pipeline();
|
||||
pipeline.addLast("frameDecoder", new ChargingPileDecoder());
|
||||
pipeline.addLast("frameDecoder", new StartAndLengthFieldFrameDecoder());
|
||||
pipeline.addLast("decoder", new ByteArrayDecoder());
|
||||
pipeline.addLast("encoder", new ByteArrayDecoder());
|
||||
//读超时时间设置为10s,0表示不监控
|
||||
|
||||
Reference in New Issue
Block a user