blob: 367ca91a82c69b4a7d413e2f3406e382f52496ce [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;
16 private Object payload;
Yuta HIGUCHIc65f5122014-10-07 10:05:59 -070017
Madan Jampaniab6d3112014-10-02 16:30:14 -070018 private transient NettyMessagingService messagingService;
Yuta HIGUCHIc65f5122014-10-07 10:05:59 -070019 // TODO: add transient payload serializer or change payload type to
20 // byte[], ByteBuffer, etc.
Madan Jampaniab6d3112014-10-02 16:30:14 -070021
22 // Must be created using the Builder.
23 private InternalMessage() {}
24
25 public long id() {
26 return id;
27 }
28
29 public String type() {
30 return type;
31 }
32
33 public Endpoint sender() {
34 return sender;
35 }
36
37 @Override
38 public Object payload() {
39 return payload;
40 }
41
Madan Jampani86ed0552014-10-03 16:45:42 -070042 protected void setMessagingService(NettyMessagingService messagingService) {
43 this.messagingService = messagingService;
44 }
45
Madan Jampaniab6d3112014-10-02 16:30:14 -070046 @Override
47 public void respond(Object data) throws IOException {
48 Builder builder = new Builder(messagingService);
49 InternalMessage message = builder.withId(this.id)
50 // FIXME: Sender should be messagingService.localEp.
51 .withSender(this.sender)
52 .withPayload(data)
53 .withType(REPLY_MESSAGE_TYPE)
54 .build();
55 messagingService.sendAsync(sender, message);
56 }
57
58
59 /**
60 * Builder for InternalMessages.
61 */
Yuta HIGUCHI24fb2992014-10-06 22:51:45 -070062 public static final class Builder {
Madan Jampaniab6d3112014-10-02 16:30:14 -070063 private InternalMessage message;
64
65 public Builder(NettyMessagingService messagingService) {
66 message = new InternalMessage();
67 message.messagingService = messagingService;
68 }
69
70 public Builder withId(long id) {
71 message.id = id;
72 return this;
73 }
74
75 public Builder withType(String type) {
76 message.type = type;
77 return this;
78 }
79
80 public Builder withSender(Endpoint sender) {
81 message.sender = sender;
82 return this;
83 }
84 public Builder withPayload(Object payload) {
85 message.payload = payload;
86 return this;
87 }
88
89 public InternalMessage build() {
90 return message;
91 }
92 }
Yuta HIGUCHI92626c02014-10-06 15:46:18 -070093}