/* * Copyright (C) 2015 SoftIndex LLC. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.datakernel.rpc.protocol; import io.datakernel.serializer.annotations.Deserialize; import io.datakernel.serializer.annotations.Serialize; import io.datakernel.serializer.annotations.SerializeNullable; import io.datakernel.serializer.annotations.SerializeSubclasses; public final class RpcMessage { public static final String MESSAGE_TYPES = "messageTypes"; private final int cookie; private final Object data; private RpcMessage(int cookie, Object data) { this.cookie = cookie; this.data = data; } public static RpcMessage of(@Deserialize("cookie") int cookie, @Deserialize("data") Object data) { return new RpcMessage(cookie, data); } @Serialize(order = 1) public int getCookie() { return cookie; } @Serialize(order = 2) @SerializeSubclasses( startIndex = -1, value = {RpcControlMessage.class, RpcRemoteException.class}, extraSubclassesId = MESSAGE_TYPES ) @SerializeNullable public Object getData() { return data; } @Override public String toString() { return "RpcMessage{" + "cookie=" + cookie + ", data=" + data + '}'; } }