blob: 5581747a6e58c037c48fb0159153d034174deebe [file] [log] [blame]
Madan Jampaniab6d3112014-10-02 16:30:14 -07001package org.onlab.netty;
2
3import io.netty.buffer.ByteBuf;
Madan Jampaniddf76222014-10-04 23:48:44 -07004import io.netty.channel.ChannelHandler.Sharable;
Madan Jampaniab6d3112014-10-02 16:30:14 -07005import io.netty.channel.ChannelHandlerContext;
6import io.netty.handler.codec.MessageToByteEncoder;
7
8/**
9 * Encode InternalMessage out into a byte buffer.
10 */
Madan Jampaniddf76222014-10-04 23:48:44 -070011@Sharable
Madan Jampaniab6d3112014-10-02 16:30:14 -070012public class MessageEncoder extends MessageToByteEncoder<InternalMessage> {
13
14 // onosiscool in ascii
15 public static final byte[] PREAMBLE = "onosiscool".getBytes();
Madan Jampani938aa432014-10-04 17:37:23 -070016 public static final int HEADER_VERSION = 1;
17 public static final int SERIALIZER_VERSION = 1;
18
Madan Jampaniab6d3112014-10-02 16:30:14 -070019
20 private final Serializer serializer;
21
22 public MessageEncoder(Serializer serializer) {
23 this.serializer = serializer;
24 }
25
26 @Override
Madan Jampani86ed0552014-10-03 16:45:42 -070027 protected void encode(
28 ChannelHandlerContext context,
29 InternalMessage message,
Madan Jampaniab6d3112014-10-02 16:30:14 -070030 ByteBuf out) throws Exception {
31
Madan Jampani938aa432014-10-04 17:37:23 -070032 // write version
33 out.writeInt(HEADER_VERSION);
34
Madan Jampaniab6d3112014-10-02 16:30:14 -070035 // write preamble
36 out.writeBytes(PREAMBLE);
37
Madan Jampani86ed0552014-10-03 16:45:42 -070038 byte[] payload = serializer.encode(message);
Madan Jampaniab6d3112014-10-02 16:30:14 -070039
Madan Jampani86ed0552014-10-03 16:45:42 -070040 // write payload length
Madan Jampaniab6d3112014-10-02 16:30:14 -070041 out.writeInt(payload.length);
42
Madan Jampani938aa432014-10-04 17:37:23 -070043 // write serializer version
44 out.writeInt(SERIALIZER_VERSION);
45
Madan Jampani86ed0552014-10-03 16:45:42 -070046 // write payload.
Madan Jampaniab6d3112014-10-02 16:30:14 -070047 out.writeBytes(payload);
48 }
49}