blob: 40b529e0458ee352c5bb3f78591c939c416d85f1 [file] [log] [blame]
Thomas Vachuska24c849c2014-10-27 09:53:05 -07001/*
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07002 * Copyright 2014 Open Networking Laboratory
Thomas Vachuska24c849c2014-10-27 09:53:05 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Thomas Vachuska24c849c2014-10-27 09:53:05 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska24c849c2014-10-27 09:53:05 -070015 */
Madan Jampaniab6d3112014-10-02 16:30:14 -070016package org.onlab.netty;
17
18import java.io.IOException;
19
20/**
21 * Internal message representation with additional attributes
22 * for supporting, synchronous request/reply behavior.
23 */
24public final class InternalMessage implements Message {
25
Madan Jampani15cd0b82014-10-28 08:40:23 -070026 public static final String REPLY_MESSAGE_TYPE = "NETTY_MESSAGING_REQUEST_REPLY";
Yuta HIGUCHIc65f5122014-10-07 10:05:59 -070027
Madan Jampaniab6d3112014-10-02 16:30:14 -070028 private long id;
29 private Endpoint sender;
30 private String type;
Madan Jampani53e44e62014-10-07 12:39:51 -070031 private byte[] payload;
Madan Jampaniab6d3112014-10-02 16:30:14 -070032 private transient NettyMessagingService messagingService;
Madan Jampaniab6d3112014-10-02 16:30:14 -070033
34 // Must be created using the Builder.
35 private InternalMessage() {}
36
Yuta HIGUCHI91768e32014-11-22 05:06:35 -080037 InternalMessage(long id, Endpoint sender, String type, byte[] payload) {
38 this.id = id;
39 this.sender = sender;
40 this.type = type;
41 this.payload = payload;
42 }
43
Madan Jampaniab6d3112014-10-02 16:30:14 -070044 public long id() {
45 return id;
46 }
47
48 public String type() {
49 return type;
50 }
51
52 public Endpoint sender() {
53 return sender;
54 }
55
56 @Override
Madan Jampani53e44e62014-10-07 12:39:51 -070057 public byte[] payload() {
Madan Jampaniab6d3112014-10-02 16:30:14 -070058 return payload;
59 }
60
Madan Jampani86ed0552014-10-03 16:45:42 -070061 protected void setMessagingService(NettyMessagingService messagingService) {
62 this.messagingService = messagingService;
63 }
64
Madan Jampaniab6d3112014-10-02 16:30:14 -070065 @Override
Madan Jampani53e44e62014-10-07 12:39:51 -070066 public void respond(byte[] data) throws IOException {
Madan Jampaniab6d3112014-10-02 16:30:14 -070067 Builder builder = new Builder(messagingService);
68 InternalMessage message = builder.withId(this.id)
Madan Jampani87100932014-10-21 16:46:12 -070069 .withSender(messagingService.localEp())
Madan Jampaniab6d3112014-10-02 16:30:14 -070070 .withPayload(data)
71 .withType(REPLY_MESSAGE_TYPE)
72 .build();
73 messagingService.sendAsync(sender, message);
74 }
75
76
77 /**
78 * Builder for InternalMessages.
79 */
Yuta HIGUCHI24fb2992014-10-06 22:51:45 -070080 public static final class Builder {
Madan Jampaniab6d3112014-10-02 16:30:14 -070081 private InternalMessage message;
82
83 public Builder(NettyMessagingService messagingService) {
84 message = new InternalMessage();
85 message.messagingService = messagingService;
86 }
87
88 public Builder withId(long id) {
89 message.id = id;
90 return this;
91 }
92
93 public Builder withType(String type) {
94 message.type = type;
95 return this;
96 }
97
98 public Builder withSender(Endpoint sender) {
99 message.sender = sender;
100 return this;
101 }
Madan Jampani53e44e62014-10-07 12:39:51 -0700102 public Builder withPayload(byte[] payload) {
Madan Jampaniab6d3112014-10-02 16:30:14 -0700103 message.payload = payload;
104 return this;
105 }
106
107 public InternalMessage build() {
108 return message;
109 }
110 }
Yuta HIGUCHI92626c02014-10-06 15:46:18 -0700111}