blob: a981c34adf833d351e88257aadecb83abc3919d8 [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
37 public long id() {
38 return id;
39 }
40
41 public String type() {
42 return type;
43 }
44
45 public Endpoint sender() {
46 return sender;
47 }
48
49 @Override
Madan Jampani53e44e62014-10-07 12:39:51 -070050 public byte[] payload() {
Madan Jampaniab6d3112014-10-02 16:30:14 -070051 return payload;
52 }
53
Madan Jampani86ed0552014-10-03 16:45:42 -070054 protected void setMessagingService(NettyMessagingService messagingService) {
55 this.messagingService = messagingService;
56 }
57
Madan Jampaniab6d3112014-10-02 16:30:14 -070058 @Override
Madan Jampani53e44e62014-10-07 12:39:51 -070059 public void respond(byte[] data) throws IOException {
Madan Jampaniab6d3112014-10-02 16:30:14 -070060 Builder builder = new Builder(messagingService);
61 InternalMessage message = builder.withId(this.id)
Madan Jampani87100932014-10-21 16:46:12 -070062 .withSender(messagingService.localEp())
Madan Jampaniab6d3112014-10-02 16:30:14 -070063 .withPayload(data)
64 .withType(REPLY_MESSAGE_TYPE)
65 .build();
66 messagingService.sendAsync(sender, message);
67 }
68
69
70 /**
71 * Builder for InternalMessages.
72 */
Yuta HIGUCHI24fb2992014-10-06 22:51:45 -070073 public static final class Builder {
Madan Jampaniab6d3112014-10-02 16:30:14 -070074 private InternalMessage message;
75
76 public Builder(NettyMessagingService messagingService) {
77 message = new InternalMessage();
78 message.messagingService = messagingService;
79 }
80
81 public Builder withId(long id) {
82 message.id = id;
83 return this;
84 }
85
86 public Builder withType(String type) {
87 message.type = type;
88 return this;
89 }
90
91 public Builder withSender(Endpoint sender) {
92 message.sender = sender;
93 return this;
94 }
Madan Jampani53e44e62014-10-07 12:39:51 -070095 public Builder withPayload(byte[] payload) {
Madan Jampaniab6d3112014-10-02 16:30:14 -070096 message.payload = payload;
97 return this;
98 }
99
100 public InternalMessage build() {
101 return message;
102 }
103 }
Yuta HIGUCHI92626c02014-10-06 15:46:18 -0700104}