blob: 04de356fe14fd3d633be9da4b9a2f7b06d094dc9 [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 Jampaniab6d3112014-10-02 16:30:14 -070018
19 // Must be created using the Builder.
20 private InternalMessage() {}
21
22 public long id() {
23 return id;
24 }
25
26 public String type() {
27 return type;
28 }
29
30 public Endpoint sender() {
31 return sender;
32 }
33
34 @Override
Madan Jampani53e44e62014-10-07 12:39:51 -070035 public byte[] payload() {
Madan Jampaniab6d3112014-10-02 16:30:14 -070036 return payload;
37 }
38
Madan Jampani86ed0552014-10-03 16:45:42 -070039 protected void setMessagingService(NettyMessagingService messagingService) {
40 this.messagingService = messagingService;
41 }
42
Madan Jampaniab6d3112014-10-02 16:30:14 -070043 @Override
Madan Jampani53e44e62014-10-07 12:39:51 -070044 public void respond(byte[] data) throws IOException {
Madan Jampaniab6d3112014-10-02 16:30:14 -070045 Builder builder = new Builder(messagingService);
46 InternalMessage message = builder.withId(this.id)
Madan Jampani87100932014-10-21 16:46:12 -070047 .withSender(messagingService.localEp())
Madan Jampaniab6d3112014-10-02 16:30:14 -070048 .withPayload(data)
49 .withType(REPLY_MESSAGE_TYPE)
50 .build();
51 messagingService.sendAsync(sender, message);
52 }
53
54
55 /**
56 * Builder for InternalMessages.
57 */
Yuta HIGUCHI24fb2992014-10-06 22:51:45 -070058 public static final class Builder {
Madan Jampaniab6d3112014-10-02 16:30:14 -070059 private InternalMessage message;
60
61 public Builder(NettyMessagingService messagingService) {
62 message = new InternalMessage();
63 message.messagingService = messagingService;
64 }
65
66 public Builder withId(long id) {
67 message.id = id;
68 return this;
69 }
70
71 public Builder withType(String type) {
72 message.type = type;
73 return this;
74 }
75
76 public Builder withSender(Endpoint sender) {
77 message.sender = sender;
78 return this;
79 }
Madan Jampani53e44e62014-10-07 12:39:51 -070080 public Builder withPayload(byte[] payload) {
Madan Jampaniab6d3112014-10-02 16:30:14 -070081 message.payload = payload;
82 return this;
83 }
84
85 public InternalMessage build() {
86 return message;
87 }
88 }
Yuta HIGUCHI92626c02014-10-06 15:46:18 -070089}