Thomas Vachuska | 24c849c | 2014-10-27 09:53:05 -0700 | [diff] [blame] | 1 | /* |
Brian O'Connor | a09fe5b | 2017-08-03 21:12:30 -0700 | [diff] [blame] | 2 | * Copyright 2017-present Open Networking Foundation |
Thomas Vachuska | 24c849c | 2014-10-27 09:53:05 -0700 | [diff] [blame] | 3 | * |
Thomas Vachuska | 4f1a60c | 2014-10-28 13:39:07 -0700 | [diff] [blame] | 4 | * 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 Vachuska | 24c849c | 2014-10-27 09:53:05 -0700 | [diff] [blame] | 7 | * |
Thomas Vachuska | 4f1a60c | 2014-10-28 13:39:07 -0700 | [diff] [blame] | 8 | * 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 Vachuska | 24c849c | 2014-10-27 09:53:05 -0700 | [diff] [blame] | 15 | */ |
Aaron Kruglikov | 1b72738 | 2016-02-09 16:17:47 -0800 | [diff] [blame] | 16 | package org.onosproject.store.cluster.messaging.impl; |
Yuta HIGUCHI | 0a0b9e4 | 2015-02-11 16:57:12 -0800 | [diff] [blame] | 17 | |
Madan Jampani | 0583387 | 2016-07-12 23:01:39 -0700 | [diff] [blame] | 18 | import org.onosproject.core.HybridLogicalTime; |
Yuta HIGUCHI | 0a0b9e4 | 2015-02-11 16:57:12 -0800 | [diff] [blame] | 19 | |
Madan Jampani | ab6d311 | 2014-10-02 16:30:14 -0700 | [diff] [blame] | 20 | /** |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 21 | * Base class for internal messages. |
Madan Jampani | ab6d311 | 2014-10-02 16:30:14 -0700 | [diff] [blame] | 22 | */ |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 23 | public abstract class InternalMessage { |
Madan Jampani | ab6d311 | 2014-10-02 16:30:14 -0700 | [diff] [blame] | 24 | |
Madan Jampani | a9e70a6 | 2016-03-02 16:28:18 -0800 | [diff] [blame] | 25 | /** |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 26 | * Internal message type. |
Madan Jampani | a9e70a6 | 2016-03-02 16:28:18 -0800 | [diff] [blame] | 27 | */ |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 28 | public enum Type { |
29 | REQUEST(1), | ||||
30 | REPLY(2); | ||||
Madan Jampani | a9e70a6 | 2016-03-02 16:28:18 -0800 | [diff] [blame] | 31 | |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 32 | private final int id; |
33 | |||||
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 34 | Type(int id) { |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 35 | this.id = id; |
36 | } | ||||
37 | |||||
38 | /** | ||||
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 39 | * Returns the unique message type ID. |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 40 | * |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 41 | * @return the unique message type ID. |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 42 | */ |
43 | public int id() { | ||||
44 | return id; | ||||
45 | } | ||||
46 | |||||
47 | /** | ||||
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 48 | * Returns the message type enum associated with the given ID. |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 49 | * |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 50 | * @param id the type ID. |
51 | * @return the type enum for the given ID. | ||||
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 52 | */ |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 53 | public static Type forId(int id) { |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 54 | switch (id) { |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 55 | case 1: |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 56 | return REQUEST; |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 57 | case 2: |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 58 | return REPLY; |
Jordan Halterman | 742bd09 | 2017-02-28 01:01:49 -0800 | [diff] [blame] | 59 | default: |
60 | throw new IllegalArgumentException("Unknown status ID " + id); | ||||
61 | } | ||||
62 | } | ||||
Madan Jampani | a9e70a6 | 2016-03-02 16:28:18 -0800 | [diff] [blame] | 63 | } |
64 | |||||
Madan Jampani | b825aeb | 2016-04-01 15:18:25 -0700 | [diff] [blame] | 65 | private final int preamble; |
Madan Jampani | 0583387 | 2016-07-12 23:01:39 -0700 | [diff] [blame] | 66 | private final HybridLogicalTime time; |
Madan Jampani | c26eede | 2015-04-16 11:42:16 -0700 | [diff] [blame] | 67 | private final long id; |
Madan Jampani | c26eede | 2015-04-16 11:42:16 -0700 | [diff] [blame] | 68 | private final byte[] payload; |
Yuta HIGUCHI | c65f512 | 2014-10-07 10:05:59 -0700 | [diff] [blame] | 69 | |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 70 | protected InternalMessage(int preamble, |
Jordan Halterman | f7c7f6f | 2017-05-05 03:02:34 -0700 | [diff] [blame] | 71 | HybridLogicalTime time, |
72 | long id, | ||||
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 73 | byte[] payload) { |
Madan Jampani | b825aeb | 2016-04-01 15:18:25 -0700 | [diff] [blame] | 74 | this.preamble = preamble; |
Madan Jampani | 0583387 | 2016-07-12 23:01:39 -0700 | [diff] [blame] | 75 | this.time = time; |
Yuta HIGUCHI | 91768e3 | 2014-11-22 05:06:35 -0800 | [diff] [blame] | 76 | this.id = id; |
Yuta HIGUCHI | 91768e3 | 2014-11-22 05:06:35 -0800 | [diff] [blame] | 77 | this.payload = payload; |
78 | } | ||||
79 | |||||
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 80 | public abstract Type type(); |
81 | |||||
Jordan Halterman | f7c7f6f | 2017-05-05 03:02:34 -0700 | [diff] [blame] | 82 | public boolean isRequest() { |
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 83 | return type() == Type.REQUEST; |
Jordan Halterman | f7c7f6f | 2017-05-05 03:02:34 -0700 | [diff] [blame] | 84 | } |
85 | |||||
86 | public boolean isReply() { | ||||
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 87 | return type() == Type.REPLY; |
Jordan Halterman | f7c7f6f | 2017-05-05 03:02:34 -0700 | [diff] [blame] | 88 | } |
89 | |||||
Madan Jampani | 0583387 | 2016-07-12 23:01:39 -0700 | [diff] [blame] | 90 | public HybridLogicalTime time() { |
91 | return time; | ||||
92 | } | ||||
93 | |||||
Madan Jampani | b825aeb | 2016-04-01 15:18:25 -0700 | [diff] [blame] | 94 | public int preamble() { |
95 | return preamble; | ||||
96 | } | ||||
97 | |||||
Madan Jampani | ab6d311 | 2014-10-02 16:30:14 -0700 | [diff] [blame] | 98 | public long id() { |
99 | return id; | ||||
100 | } | ||||
101 | |||||
Madan Jampani | 53e44e6 | 2014-10-07 12:39:51 -0700 | [diff] [blame] | 102 | public byte[] payload() { |
Madan Jampani | ab6d311 | 2014-10-02 16:30:14 -0700 | [diff] [blame] | 103 | return payload; |
104 | } | ||||
Jordan Halterman | e3813a9 | 2017-07-29 14:10:31 -0700 | [diff] [blame] | 105 | } |