blob: 505ed2c38277768ebe33b1b41b4332546031db27 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.ignite.plugin.extensions.communication;
import java.nio.ByteBuffer;
import java.util.BitSet;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.lang.IgniteUuid;
/**
* Communication message reader.
* <p>
* Allows to customize the binary format of communication messages.
*/
public interface MessageReader {
/**
* Sets but buffer to read from.
*
* @param buf Byte buffer.
*/
public void setBuffer(ByteBuffer buf);
/**
* Sets type of message currently read.
*
* @param msgCls Message type.
*/
public void setCurrentReadClass(Class<? extends Message> msgCls);
/**
* Callback that must be invoked by a message implementation before message body started decoding.
*
* @return {@code True} if reading can proceed, {@code false} otherwise.
*/
public boolean beforeMessageRead();
/**
* Callback that must be invoked by a message implementation after message body finished decoding.
*
* @param msgCls Message class finishing read stage.
* @return {@code True} if reading can proceed, {@code false} otherwise.
*/
public boolean afterMessageRead(Class<? extends Message> msgCls);
/**
* Reads {@code byte} value.
*
* @param name Field name.
* @return {@code byte} value.
*/
public byte readByte(String name);
/**
* Reads {@code short} value.
*
* @param name Field name.
* @return {@code short} value.
*/
public short readShort(String name);
/**
* Reads {@code int} value.
*
* @param name Field name.
* @return {@code int} value.
*/
public int readInt(String name);
/**
* Reads {@code int} value.
*
* @param name Field name.
* @param dflt Default value if field not found.
* @return {@code int} value.
*/
public int readInt(String name, int dflt);
/**
* Reads {@code long} value.
*
* @param name Field name.
* @return {@code long} value.
*/
public long readLong(String name);
/**
* Reads {@code float} value.
*
* @param name Field name.
* @return {@code float} value.
*/
public float readFloat(String name);
/**
* Reads {@code double} value.
*
* @param name Field name.
* @return {@code double} value.
*/
public double readDouble(String name);
/**
* Reads {@code char} value.
*
* @param name Field name.
* @return {@code char} value.
*/
public char readChar(String name);
/**
* Reads {@code boolean} value.
*
* @param name Field name.
* @return {@code boolean} value.
*/
public boolean readBoolean(String name);
/**
* Reads {@code byte} array.
*
* @param name Field name.
* @return {@code byte} array.
*/
public byte[] readByteArray(String name);
/**
* Reads {@code short} array.
*
* @param name Field name.
* @return {@code short} array.
*/
public short[] readShortArray(String name);
/**
* Reads {@code int} array.
*
* @param name Field name.
* @return {@code int} array.
*/
public int[] readIntArray(String name);
/**
* Reads {@code long} array.
*
* @param name Field name.
* @return {@code long} array.
*/
public long[] readLongArray(String name);
/**
* Reads {@code float} array.
*
* @param name Field name.
* @return {@code float} array.
*/
public float[] readFloatArray(String name);
/**
* Reads {@code double} array.
*
* @param name Field name.
* @return {@code double} array.
*/
public double[] readDoubleArray(String name);
/**
* Reads {@code char} array.
*
* @param name Field name.
* @return {@code char} array.
*/
public char[] readCharArray(String name);
/**
* Reads {@code boolean} array.
*
* @param name Field name.
* @return {@code boolean} array.
*/
public boolean[] readBooleanArray(String name);
/**
* Reads {@link String}.
*
* @param name Field name.
* @return {@link String}.
*/
public String readString(String name);
/**
* Reads {@link BitSet}.
*
* @param name Field name.
* @return {@link BitSet}.
*/
public BitSet readBitSet(String name);
/**
* Reads {@link UUID}.
*
* @param name Field name.
* @return {@link UUID}.
*/
public UUID readUuid(String name);
/**
* Reads {@link IgniteUuid}.
*
* @param name Field name.
* @return {@link IgniteUuid}.
*/
public IgniteUuid readIgniteUuid(String name);
/**
* Reads {@link AffinityTopologyVersion}.
*
* @param name Field name.
* @return {@link AffinityTopologyVersion}.
*/
public AffinityTopologyVersion readAffinityTopologyVersion(String name);
/**
* Reads nested message.
*
* @param name Field name.
* @param <T> Type of the message.
* @return Message.
*/
public <T extends Message> T readMessage(String name);
/**
* Reads array of objects.
*
* @param name Field name.
* @param itemType Array component type.
* @param itemCls Array component class.
* @param <T> Type of the red object .
* @return Array of objects.
*/
public <T> T[] readObjectArray(String name, MessageCollectionItemType itemType, Class<T> itemCls);
/**
* Reads collection.
*
* @param name Field name.
* @param itemType Collection item type.
* @param <C> Type of the red collection.
* @return Collection.
*/
public <C extends Collection<?>> C readCollection(String name, MessageCollectionItemType itemType);
/**
* Reads map.
*
* @param name Field name.
* @param keyType Map key type.
* @param valType Map value type.
* @param linked Whether {@link LinkedHashMap} should be created.
* @param <M> Type of the red map.
* @return Map.
*/
public <M extends Map<?, ?>> M readMap(String name, MessageCollectionItemType keyType,
MessageCollectionItemType valType, boolean linked);
/**
* Tells whether last invocation of any of {@code readXXX(...)}
* methods has fully written the value. {@code False} is returned
* if there were not enough remaining bytes in byte buffer.
*
* @return Whether las value was fully read.
*/
public boolean isLastRead();
/**
* Gets current read state.
*
* @return Read state.
*/
public int state();
/**
* Increments read state.
*/
public void incrementState();
/**
* Callback called before inner message is read.
*/
public void beforeInnerMessageRead();
/**
* Callback called after inner message is read.
*
* @param finished Whether message was fully read.
*/
public void afterInnerMessageRead(boolean finished);
/**
* Resets this reader.
*/
public void reset();
}