blob: bcf6f52c84f98362c2ea8e86c12dd46dc9a29bd0 [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
11 private long id;
12 private Endpoint sender;
13 private String type;
14 private Object payload;
15 private transient NettyMessagingService messagingService;
16 public static final String REPLY_MESSAGE_TYPE = "NETTY_MESSAGIG_REQUEST_REPLY";
17
18 // Must be created using the Builder.
19 private InternalMessage() {}
20
21 public long id() {
22 return id;
23 }
24
25 public String type() {
26 return type;
27 }
28
29 public Endpoint sender() {
30 return sender;
31 }
32
33 @Override
34 public Object payload() {
35 return payload;
36 }
37
38 @Override
39 public void respond(Object data) throws IOException {
40 Builder builder = new Builder(messagingService);
41 InternalMessage message = builder.withId(this.id)
42 // FIXME: Sender should be messagingService.localEp.
43 .withSender(this.sender)
44 .withPayload(data)
45 .withType(REPLY_MESSAGE_TYPE)
46 .build();
47 messagingService.sendAsync(sender, message);
48 }
49
50
51 /**
52 * Builder for InternalMessages.
53 */
54 public static class Builder {
55 private InternalMessage message;
56
57 public Builder(NettyMessagingService messagingService) {
58 message = new InternalMessage();
59 message.messagingService = messagingService;
60 }
61
62 public Builder withId(long id) {
63 message.id = id;
64 return this;
65 }
66
67 public Builder withType(String type) {
68 message.type = type;
69 return this;
70 }
71
72 public Builder withSender(Endpoint sender) {
73 message.sender = sender;
74 return this;
75 }
76 public Builder withPayload(Object payload) {
77 message.payload = payload;
78 return this;
79 }
80
81 public InternalMessage build() {
82 return message;
83 }
84 }
85}