Newer
Older
rain_receiver / src / main / java / com / casic / handler / ReceiverDecoder.java
chaizhuang on 27 Mar 2023 1 KB 西工大雨量计bug修改
package com.casic.handler;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.handler.codec.MessageToMessageDecoder;
import lombok.extern.slf4j.Slf4j;

import java.nio.charset.Charset;
import java.util.List;

/**
 * @description: 将从接口取到的数据编码
 * @author: Stone
 * @create: 2019-01-11 15:15
 **/
@Slf4j
public class ReceiverDecoder extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {
        if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
//            log.info(" String : " + msg.toString(Charset.defaultCharset()));
//            if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
            pareDeviceHex(msg);
//            out.add(msg);
//            }
        }
    }

    private static void pareDeviceHex(ByteBuf byteBuf) {
        //去掉补位
        log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
        String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
        log.info(" devcode : " +  devcode);
        byteBuf.resetReaderIndex();//重置位判断
        String  valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
        log.info(" valueStr : " + valueStr);
        long defaultValue = Long.valueOf(valueStr);
        log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
//        System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
    }

}