blob: 07c71cdafabe426ee7549fa43e05a63f3867bab0 [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.network.serialization;
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.lang.IgniteUuid;
import org.apache.ignite.network.NetworkMessage;
import org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
/**
* Stateful message reader.
*/
public interface MessageReader {
/**
* Sets the byte buffer to read from.
*
* @param buf Byte buffer.
*/
public void setBuffer(ByteBuffer buf);
/**
* Sets the type of the message that is currently being read.
*
* @param msgCls Message type.
*/
public void setCurrentReadClass(Class<? extends NetworkMessage> msgCls);
/**
* Callback that must be invoked by implementations of message serializers before they start decoding the message body.
*
* @return {@code True} if a read operation is allowed to proceed, {@code false} otherwise.
*/
public boolean beforeMessageRead();
/**
* Callback that must be invoked by implementations of message serializers after they finished decoding the message body.
*
* @param msgCls Class of the message that is finishing read stage.
* @return {@code True} if a read operation can be proceeded, {@code false} otherwise.
*/
public boolean afterMessageRead(Class<? extends NetworkMessage> msgCls);
/**
* Reads a {@code byte} value.
*
* @param name Field name.
* @return {@code byte} value.
*/
public byte readByte(String name);
/**
* Reads a {@code short} value.
*
* @param name Field name.
* @return {@code short} value.
*/
public short readShort(String name);
/**
* Reads an {@code int} value.
*
* @param name Field name.
* @return {@code int} value.
*/
public int readInt(String name);
/**
* Reads an {@code int} value.
*
* @param name Field name.
* @param dflt A default value if the field is not found.
* @return {@code int} value.
*/
public int readInt(String name, int dflt);
/**
* Reads a {@code long} value.
*
* @param name Field name.
* @return {@code long} value.
*/
public long readLong(String name);
/**
* Reads a {@code float} value.
*
* @param name Field name.
* @return {@code float} value.
*/
public float readFloat(String name);
/**
* Reads a {@code double} value.
*
* @param name Field name.
* @return {@code double} value.
*/
public double readDouble(String name);
/**
* Reads a {@code char} value.
*
* @param name Field name.
* @return {@code char} value.
*/
public char readChar(String name);
/**
* Reads a {@code boolean} value.
*
* @param name Field name.
* @return {@code boolean} value.
*/
public boolean readBoolean(String name);
/**
* Reads a {@code byte} array.
*
* @param name Field name.
* @return {@code byte} array.
*/
public byte[] readByteArray(String name);
/**
* Reads a {@code short} array.
*
* @param name Field name.
* @return {@code short} array.
*/
public short[] readShortArray(String name);
/**
* Reads an {@code int} array.
*
* @param name Field name.
* @return {@code int} array.
*/
public int[] readIntArray(String name);
/**
* Reads a {@code long} array.
*
* @param name Field name.
* @return {@code long} array.
*/
public long[] readLongArray(String name);
/**
* Reads a {@code float} array.
*
* @param name Field name.
* @return {@code float} array.
*/
public float[] readFloatArray(String name);
/**
* Reads a {@code double} array.
*
* @param name Field name.
* @return {@code double} array.
*/
public double[] readDoubleArray(String name);
/**
* Reads a {@code char} array.
*
* @param name Field name.
* @return {@code char} array.
*/
public char[] readCharArray(String name);
/**
* Reads a {@code boolean} array.
*
* @param name Field name.
* @return {@code boolean} array.
*/
public boolean[] readBooleanArray(String name);
/**
* Reads a {@link String}.
*
* @param name Field name.
* @return {@link String}.
*/
public String readString(String name);
/**
* Reads a {@link BitSet}.
*
* @param name Field name.
* @return {@link BitSet}.
*/
public BitSet readBitSet(String name);
/**
* Reads an {@link UUID}.
*
* @param name Field name.
* @return {@link UUID}.
*/
public UUID readUuid(String name);
/**
* Reads an {@link IgniteUuid}.
*
* @param name Field name.
* @return {@link IgniteUuid}.
*/
public IgniteUuid readIgniteUuid(String name);
/**
* Reads a nested message.
*
* @param <T> Type of a message;
* @param name Field name.
* @return Message.
*/
public <T extends NetworkMessage> T readMessage(String name);
/**
* Reads an array of objects.
*
* @param <T> Type of an array.
* @param name Field name.
* @param itemType A component type of the array.
* @param itemCls A component class of the array.
* @return Array of objects.
*/
public <T> T[] readObjectArray(String name, MessageCollectionItemType itemType, Class<T> itemCls);
/**
* Reads a collection.
*
* @param <C> Type of a collection.
* @param name Field name.
* @param itemType An item type of the Collection.
* @return Collection.
*/
public <C extends Collection<?>> C readCollection(String name, MessageCollectionItemType itemType);
/**
* Reads a map.
*
* @param <M> Type of a map.
* @param name Field name.
* @param keyType The type of the map's key.
* @param valType The type of the map's value.
* @param linked Whether a {@link LinkedHashMap} should be created.
* @return Map.
*/
public <M extends Map<?, ?>> M readMap(String name, MessageCollectionItemType keyType,
MessageCollectionItemType valType, boolean linked);
/**
* Tells whether the last invocation of any of the {@code readXXX(...)}
* methods has fully written the value. {@code False} is returned
* if there were not enough remaining bytes in a byte buffer.
*
* @return Whether the last value was fully read.
*/
public boolean isLastRead();
/**
* Gets a current read state.
*
* @return Read state.
*/
public int state();
/**
* Increments a read state.
*/
public void incrementState();
/**
* Callback called before an inner message is read.
*/
public void beforeInnerMessageRead();
/**
* Callback called after an inner message is read.
*
* @param finished Whether a message was fully read.
*/
public void afterInnerMessageRead(boolean finished);
/**
* Resets this reader.
*/
public void reset();
}