blob: 501b70cc15bd11b5df205c6246ebb8be5ffc4bab [file] [log] [blame]
Madan Jampani890bc352014-10-01 22:35:29 -07001package org.onlab.onos.store.messaging.impl;
2
Madan Jampani890bc352014-10-01 22:35:29 -07003import io.netty.buffer.ByteBuf;
4import io.netty.channel.ChannelHandlerContext;
5import io.netty.handler.codec.MessageToByteEncoder;
6
7/**
8 * Encode InternalMessage out into a byte buffer.
9 */
10public class MessageEncoder extends MessageToByteEncoder<InternalMessage> {
11
12 // onosiscool in ascii
13 public static final byte[] PREAMBLE = "onosiscool".getBytes();
14
Madan Jampanie4ff21b2014-10-02 15:17:32 -070015 private final Serializer serializer;
Madan Jampani890bc352014-10-01 22:35:29 -070016
Madan Jampanie4ff21b2014-10-02 15:17:32 -070017 public MessageEncoder(Serializer serializer) {
18 this.serializer = serializer;
Madan Jampani890bc352014-10-01 22:35:29 -070019 }
20
21 @Override
22 protected void encode(ChannelHandlerContext context, InternalMessage message,
23 ByteBuf out) throws Exception {
24
25 // write preamble
26 out.writeBytes(PREAMBLE);
27
28 // write id
29 out.writeLong(message.id());
30
31 // write type length
32 out.writeInt(message.type().length());
33
34 // write type
35 out.writeBytes(message.type().getBytes());
36
37 // write sender host name size
38 out.writeInt(message.sender().host().length());
39
40 // write sender host name.
41 out.writeBytes(message.sender().host().getBytes());
42
43 // write port
44 out.writeInt(message.sender().port());
45
46 try {
Madan Jampanie4ff21b2014-10-02 15:17:32 -070047 serializer.encode(message.payload());
Madan Jampani890bc352014-10-01 22:35:29 -070048 } catch (Exception e) {
49 e.printStackTrace();
50 }
51
Madan Jampanie4ff21b2014-10-02 15:17:32 -070052 byte[] payload = serializer.encode(message.payload());
Madan Jampani890bc352014-10-01 22:35:29 -070053
54 // write payload length.
55 out.writeInt(payload.length);
56
57 // write payload bytes
58 out.writeBytes(payload);
59 }
60}