blob: 716efb92c0b2e1bfca992dd59a7c30056270f0c5 [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
Madan Jampani53e44e62014-10-07 12:39:51 -070020 private static final KryoSerializer SERIALIZER = new KryoSerializer();
Madan Jampaniab6d3112014-10-02 16:30:14 -070021
22 @Override
Madan Jampani86ed0552014-10-03 16:45:42 -070023 protected void encode(
24 ChannelHandlerContext context,
25 InternalMessage message,
Madan Jampaniab6d3112014-10-02 16:30:14 -070026 ByteBuf out) throws Exception {
27
Madan Jampani938aa432014-10-04 17:37:23 -070028 // write version
29 out.writeInt(HEADER_VERSION);
30
Madan Jampaniab6d3112014-10-02 16:30:14 -070031 // write preamble
32 out.writeBytes(PREAMBLE);
33
Madan Jampani53e44e62014-10-07 12:39:51 -070034 try {
35 SERIALIZER.encode(message);
36 } catch (Exception e) {
37 e.printStackTrace();
38 }
39 byte[] payload = SERIALIZER.encode(message);
Madan Jampaniab6d3112014-10-02 16:30:14 -070040
Madan Jampani86ed0552014-10-03 16:45:42 -070041 // write payload length
Madan Jampaniab6d3112014-10-02 16:30:14 -070042 out.writeInt(payload.length);
43
Yuta HIGUCHI993d7aa2014-10-06 22:54:38 -070044 // write payloadSerializer version
Madan Jampani938aa432014-10-04 17:37:23 -070045 out.writeInt(SERIALIZER_VERSION);
46
Madan Jampani86ed0552014-10-03 16:45:42 -070047 // write payload.
Madan Jampaniab6d3112014-10-02 16:30:14 -070048 out.writeBytes(payload);
49 }
50}