Added encode/decode for PubAck message

This commit is contained in:
andrea
2013-09-12 14:45:04 +02:00
parent facec04ac2
commit 1b1cc715be
10 changed files with 169 additions and 3 deletions
@@ -70,7 +70,7 @@ public class ConnectDecoder extends DemuxDecoder {
//Keep Alive timer 2 bytes
//int keepAlive = Utils.readWord(in);
int keepAlive = in.readShort();
int keepAlive = in.readUnsignedShort();
message.setKeepAlive(keepAlive);
if (remainingLength == 12) {
@@ -21,6 +21,7 @@ public class MQTTDecoder extends ByteToMessageDecoder {
m_decoderMap.put(AbstractMessage.CONNECT, new ConnectDecoder());
m_decoderMap.put(AbstractMessage.CONNACK, new ConnAckDecoder());
m_decoderMap.put(AbstractMessage.PUBLISH, new PublishDecoder());
m_decoderMap.put(AbstractMessage.PUBACK, new PubAckDecoder());
}
@Override
@@ -20,6 +20,7 @@ public class MQTTEncoder extends MessageToByteEncoder<AbstractMessage> {
m_encoderMap.put(AbstractMessage.CONNECT, new ConnectEncoder());
m_encoderMap.put(AbstractMessage.CONNACK, new ConnAckEncoder());
m_encoderMap.put(AbstractMessage.PUBLISH, new PublishEncoder());
m_encoderMap.put(AbstractMessage.PUBACK, new PubAckEncoder());
}
@Override
@@ -0,0 +1,31 @@
package org.dna.mqtt.moquette.parser.netty;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import java.util.List;
import org.dna.mqtt.moquette.proto.messages.MessageIDMessage;
/**
*
* @author andrea
*/
abstract class MessageIDDecoder extends DemuxDecoder {
protected abstract MessageIDMessage createMessage();
@Override
void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
in.resetReaderIndex();
//Common decoding part
MessageIDMessage message = createMessage();
if (!decodeCommonHeader(message, in)) {
in.resetReaderIndex();
return;
}
//read messageIDs
message.setMessageID(in.readUnsignedShort());
out.add(message);
}
}
@@ -0,0 +1,17 @@
package org.dna.mqtt.moquette.parser.netty;
import org.dna.mqtt.moquette.proto.messages.MessageIDMessage;
import org.dna.mqtt.moquette.proto.messages.PubAckMessage;
/**
*
* @author andrea
*/
class PubAckDecoder extends MessageIDDecoder {
@Override
protected MessageIDMessage createMessage() {
return new PubAckMessage();
}
}
@@ -0,0 +1,23 @@
package org.dna.mqtt.moquette.parser.netty;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
import org.dna.mqtt.moquette.proto.messages.PubAckMessage;
/**
*
* @author andrea
*/
class PubAckEncoder extends DemuxEncoder<PubAckMessage> {
@Override
protected void encode(ChannelHandlerContext chc, PubAckMessage msg, ByteBuf out) {
ByteBuf buff = chc.alloc().buffer(4);
buff.writeByte(AbstractMessage.PUBACK << 4);
buff.writeBytes(Utils.encodeRemainingLength(2));
buff.writeShort(msg.getMessageID());
out.writeBytes(buff);
}
}
@@ -41,7 +41,7 @@ class PublishDecoder extends DemuxDecoder {
if (message.getQos() == AbstractMessage.QOSType.LEAST_ONE ||
message.getQos() == AbstractMessage.QOSType.EXACTLY_ONCE) {
message.setMessageID((int)in.readShort());
message.setMessageID(in.readUnsignedShort());
}
int stopPos = in.readerIndex();
@@ -101,7 +101,7 @@ public class Utils {
return null;
}
//int strLen = Utils.readWord(in);
int strLen = in.readShort();
int strLen = in.readUnsignedShort();
if (in.readableBytes() < strLen) {
return null;
}