netty

public static void puback (Channel channel, MqttMessage mqttMessage) {
  MqttPublishMessage mqttPublishMessage = (MqttPublishMessage) mqttMessage;
  MqttFixedHeader mqttFixedHeaderInfo = mqttPublishMessage.fixedHeader();
  MqttQoS qos = (MqttQoS) mqttFixedHeaderInfo.qosLevel();
        byte[] headBytes = new byte[mqttPublishMessage.payload().readableBytes()];
        mqttPublishMessage.payload().readBytes(headBytes);
        String data = new String(headBytes);
        System.out.println("publish data--"+data);
 
        switch (qos) {
         case AT_MOST_ONCE: // 至多一次
             break;
         case AT_LEAST_ONCE: // 至少一次
       // 构建返回报文, 可变报头
       MqttMessageIdVariableHeader mqttMessageIdVariableHeaderBack = MqttMessageIdVariableHeader.from(mqttPublishMessage.variableHeader().packetId());
       // 构建返回报文, 固定报头
       MqttFixedHeader mqttFixedHeaderBack = new MqttFixedHeader(MqttMessageType.PUBACK,mqttFixedHeaderInfo.isDup(), MqttQoS.AT_MOST_ONCE, mqttFixedHeaderInfo.isRetain(), 0x02);
       // 构建PUBACK消息体
       MqttPubAckMessage pubAck = new MqttPubAckMessage(mqttFixedHeaderBack, mqttMessageIdVariableHeaderBack);
       log.info("back--"+pubAck.toString());
       channel.writeAndFlush(pubAck);
             break;
         case EXACTLY_ONCE: // 刚好一次
             // 构建返回报文, 固定报头
          MqttFixedHeader mqttFixedHeaderBack2 = new MqttFixedHeader(MqttMessageType.PUBREC,false, MqttQoS.AT_LEAST_ONCE,false,0x02);
             // 构建返回报文, 可变报头
             MqttMessageIdVariableHeader mqttMessageIdVariableHeaderBack2 = MqttMessageIdVariableHeader.from(mqttPublishMessage.variableHeader().packetId());
             MqttMessage mqttMessageBack = new MqttMessage(mqttFixedHeaderBack2,mqttMessageIdVariableHeaderBack2);
       log.info("back--"+mqttMessageBack.toString());
       channel.writeAndFlush(mqttMessageBack);
             break;
   default:
    break;
        }
 }
 
posted @ 2022-05-11 11:29  zhouleimfk  阅读(55)  评论(0)    收藏  举报