/
PacketEncoder.java
35 lines (32 loc) · 1.19 KB
/
PacketEncoder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.shinemo.mpush.connection.netty.codec;
import com.shinemo.mpush.api.Constants;
import com.shinemo.mpush.api.protocol.Command;
import com.shinemo.mpush.api.protocol.Packet;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
/**
* Created by ohun on 2015/12/19.
* length(4)+cmd(1)+cc(2)+flags(1)+sessionId(4)+lrc(1)+body(n)
*/
@ChannelHandler.Sharable
public class PacketEncoder extends MessageToByteEncoder<Packet> {
public static final PacketEncoder INSTANCE = new PacketEncoder();
@Override
protected void encode(ChannelHandlerContext ctx, Packet packet, ByteBuf out) throws Exception {
if (packet.cmd == Command.Heartbeat.cmd) {
out.writeByte(Constants.HB);
} else {
out.writeInt(packet.getBodyLength());
out.writeByte(packet.cmd);
out.writeShort(packet.cc);
out.writeByte(packet.flags);
out.writeInt(packet.sessionId);
out.writeByte(packet.lrc);
if (packet.getBodyLength() > 0) {
out.writeBytes(packet.body);
}
}
}
}