blob: c535f7bc6d387177cc9454bf26aa48cd045ba7ff [file] [log] [blame]
Madan Jampaniab6d3112014-10-02 16:30:14 -07001package org.onlab.netty;
2
3import java.io.IOException;
4
5/**
6 * Internal message representation with additional attributes
7 * for supporting, synchronous request/reply behavior.
8 */
9public final class InternalMessage implements Message {
10
Yuta HIGUCHIc65f5122014-10-07 10:05:59 -070011 public static final String REPLY_MESSAGE_TYPE = "NETTY_MESSAGIG_REQUEST_REPLY";
12
Madan Jampaniab6d3112014-10-02 16:30:14 -070013 private long id;
14 private Endpoint sender;
15 private String type;
Madan Jampani53e44e62014-10-07 12:39:51 -070016 private byte[] payload;
Madan Jampaniab6d3112014-10-02 16:30:14 -070017 private transient NettyMessagingService messagingService;
Madan Jampani53e44e62014-10-07 12:39:51 -070018 public static final String REPLY_MESSAGE_TYPE = "NETTY_MESSAGIG_REQUEST_REPLY";
Madan Jampaniab6d3112014-10-02 16:30:14 -070019
20 // Must be created using the Builder.
21 private InternalMessage() {}
22
23 public long id() {
24 return id;
25 }
26
27 public String type() {
28 return type;
29 }
30
31 public Endpoint sender() {
32 return sender;
33 }
34
35 @Override
Madan Jampani53e44e62014-10-07 12:39:51 -070036 public byte[] payload() {
Madan Jampaniab6d3112014-10-02 16:30:14 -070037 return payload;
38 }
39
Madan Jampani86ed0552014-10-03 16:45:42 -070040 protected void setMessagingService(NettyMessagingService messagingService) {
41 this.messagingService = messagingService;
42 }
43
Madan Jampaniab6d3112014-10-02 16:30:14 -070044 @Override
Madan Jampani53e44e62014-10-07 12:39:51 -070045 public void respond(byte[] data) throws IOException {
Madan Jampaniab6d3112014-10-02 16:30:14 -070046 Builder builder = new Builder(messagingService);
47 InternalMessage message = builder.withId(this.id)
48 // FIXME: Sender should be messagingService.localEp.
49 .withSender(this.sender)
50 .withPayload(data)
51 .withType(REPLY_MESSAGE_TYPE)
52 .build();
53 messagingService.sendAsync(sender, message);
54 }
55
56
57 /**
58 * Builder for InternalMessages.
59 */
Yuta HIGUCHI24fb2992014-10-06 22:51:45 -070060 public static final class Builder {
Madan Jampaniab6d3112014-10-02 16:30:14 -070061 private InternalMessage message;
62
63 public Builder(NettyMessagingService messagingService) {
64 message = new InternalMessage();
65 message.messagingService = messagingService;
66 }
67
68 public Builder withId(long id) {
69 message.id = id;
70 return this;
71 }
72
73 public Builder withType(String type) {
74 message.type = type;
75 return this;
76 }
77
78 public Builder withSender(Endpoint sender) {
79 message.sender = sender;
80 return this;
81 }
Madan Jampani53e44e62014-10-07 12:39:51 -070082 public Builder withPayload(byte[] payload) {
Madan Jampaniab6d3112014-10-02 16:30:14 -070083 message.payload = payload;
84 return this;
85 }
86
87 public InternalMessage build() {
88 return message;
89 }
90 }
Yuta HIGUCHI92626c02014-10-06 15:46:18 -070091}