blob: 8a87a3ef3c8ba24c7d20853a372824e4f9df56af [file] [log] [blame]
Madan Jampani890bc352014-10-01 22:35:29 -07001package org.onlab.onos.store.messaging.impl;
2
3import java.io.IOException;
4
5import org.onlab.onos.store.messaging.Endpoint;
6import org.onlab.onos.store.messaging.Message;
7
8/**
9 * Internal message representation with additional attributes
10 * for supporting, synchronous request/reply behavior.
11 */
12public final class InternalMessage implements Message {
13
14 private long id;
15 private Endpoint sender;
16 private String type;
17 private Object payload;
18 private transient NettyMessagingService messagingService;
19 public static final String REPLY_MESSAGE_TYPE = "NETTY_MESSAGIG_REQUEST_REPLY";
20
21 // Must be created using the Builder.
22 private InternalMessage() {}
23
24 public long id() {
25 return id;
26 }
27
28 public String type() {
29 return type;
30 }
31
32 public Endpoint sender() {
33 return sender;
34 }
35
36 @Override
37 public Object payload() {
38 return payload;
39 }
40
41 @Override
42 public void respond(Object data) throws IOException {
43 Builder builder = new Builder(messagingService);
44 InternalMessage message = builder.withId(this.id)
45 // FIXME: Sender should be messagingService.localEp.
46 .withSender(this.sender)
47 .withPayload(data)
48 .withType(REPLY_MESSAGE_TYPE)
49 .build();
50 messagingService.sendAsync(sender, message);
51 }
52
53
54 /**
55 * Builder for InternalMessages.
56 */
57 public static class Builder {
58 private InternalMessage message;
59
60 public Builder(NettyMessagingService messagingService) {
61 message = new InternalMessage();
62 message.messagingService = messagingService;
63 }
64
65 public Builder withId(long id) {
66 message.id = id;
67 return this;
68 }
69
70 public Builder withType(String type) {
71 message.type = type;
72 return this;
73 }
74
75 public Builder withSender(Endpoint sender) {
76 message.sender = sender;
77 return this;
78 }
79 public Builder withPayload(Object payload) {
80 message.payload = payload;
81 return this;
82 }
83
84 public InternalMessage build() {
85 return message;
86 }
87 }
88}