blob: 9d40fe994e44c8a2ac99806921b374f93ab4a543 [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.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 writer.
*/
public interface MessageWriter {
/**
* Sets the byte buffer to write to.
*
* @param buf Byte buffer.
*/
public void setBuffer(ByteBuffer buf);
/**
* Sets the type of the message that is currently being written.
*
* @param msgCls Message type.
*/
public void setCurrentWriteClass(Class<? extends NetworkMessage> msgCls);
/**
* Writes the header of a message.
*
* @param groupType Message group type.
* @param messageType Message type.
* @param fieldCnt Fields count.
* @return {@code true} if successfully. Otherwise returns {@code false}.
*/
public boolean writeHeader(short groupType, short messageType, byte fieldCnt);
/**
* Writes a {@code byte} value.
*
* @param name Field name.
* @param val {@code byte} value.
* @return Whether a value was fully written.
*/
public boolean writeByte(String name, byte val);
/**
* Writes a {@code short} value.
*
* @param name Field name.
* @param val {@code short} value.
* @return Whether a value was fully written.
*/
public boolean writeShort(String name, short val);
/**
* Writes an {@code int} value.
*
* @param name Field name.
* @param val {@code int} value.
* @return Whether a value was fully written.
*/
public boolean writeInt(String name, int val);
/**
* Writes a {@code long} value.
*
* @param name Field name.
* @param val {@code long} value.
* @return Whether a value was fully written.
*/
public boolean writeLong(String name, long val);
/**
* Writes a {@code float} value.
*
* @param name Field name.
* @param val {@code float} value.
* @return Whether a value was fully written.
*/
public boolean writeFloat(String name, float val);
/**
* Writes a {@code double} value.
*
* @param name Field name.
* @param val {@code double} value.
* @return Whether a value was fully written.
*/
public boolean writeDouble(String name, double val);
/**
* Writes a {@code char} value.
*
* @param name Field name.
* @param val {@code char} value.
* @return Whether a value was fully written.
*/
public boolean writeChar(String name, char val);
/**
* Writes a {@code boolean} value.
*
* @param name Field name.
* @param val {@code boolean} value.
* @return Whether a value was fully written.
*/
public boolean writeBoolean(String name, boolean val);
/**
* Writes a {@code byte} array.
*
* @param name Field name.
* @param val {@code byte} array.
* @return Whether an array was fully written.
*/
public boolean writeByteArray(String name, byte[] val);
/**
* Writes a {@code byte} array.
*
* @param name Field name.
* @param val {@code byte} array.
* @param off Offset.
* @param len Length.
* @return Whether an array was fully written.
*/
public boolean writeByteArray(String name, byte[] val, long off, int len);
/**
* Writes a {@code short} array.
*
* @param name Field name.
* @param val {@code short} array.
* @return Whether an array was fully written.
*/
public boolean writeShortArray(String name, short[] val);
/**
* Writes an {@code int} array.
*
* @param name Field name.
* @param val {@code int} array.
* @return Whether an array was fully written.
*/
public boolean writeIntArray(String name, int[] val);
/**
* Writes a {@code long} array.
*
* @param name Field name.
* @param val {@code long} array.
* @return Whether an array was fully written.
*/
public boolean writeLongArray(String name, long[] val);
/**
* Writes a {@code long} array.
*
* @param name Field name.
* @param val {@code long} array.
* @param len Length.
* @return Whether an array was fully written.
*/
public boolean writeLongArray(String name, long[] val, int len);
/**
* Writes a {@code float} array.
*
* @param name Field name.
* @param val {@code float} array.
* @return Whether an array was fully written.
*/
public boolean writeFloatArray(String name, float[] val);
/**
* Writes a {@code double} array.
*
* @param name Field name.
* @param val {@code double} array.
* @return Whether an array was fully written.
*/
public boolean writeDoubleArray(String name, double[] val);
/**
* Writes a {@code char} array.
*
* @param name Field name.
* @param val {@code char} array.
* @return Whether an array was fully written.
*/
public boolean writeCharArray(String name, char[] val);
/**
* Writes a {@code boolean} array.
*
* @param name Field name.
* @param val {@code boolean} array.
* @return Whether an array was fully written.
*/
public boolean writeBooleanArray(String name, boolean[] val);
/**
* Writes a {@link String}.
*
* @param name Field name.
* @param val {@link String}.
* @return Whether a value was fully written.
*/
public boolean writeString(String name, String val);
/**
* Writes a {@link BitSet}.
*
* @param name Field name.
* @param val {@link BitSet}.
* @return Whether a value was fully written.
*/
public boolean writeBitSet(String name, BitSet val);
/**
* Writes an {@link UUID}.
*
* @param name Field name.
* @param val {@link UUID}.
* @return Whether a value was fully written.
*/
public boolean writeUuid(String name, UUID val);
/**
* Writes an {@link IgniteUuid}.
*
* @param name Field name.
* @param val {@link IgniteUuid}.
* @return Whether a value was fully written.
*/
public boolean writeIgniteUuid(String name, IgniteUuid val);
/**
* Writes a nested message.
*
* @param name Field name.
* @param val Message.
* @return Whether a value was fully written.
*/
public boolean writeMessage(String name, NetworkMessage val);
/**
* Writes an array of objects.
*
* @param <T> Type of an array.
* @param name Field name.
* @param arr Array of objects.
* @param itemType A component type of the array.
* @return Whether an array was fully written.
*/
public <T> boolean writeObjectArray(String name, T[] arr, MessageCollectionItemType itemType);
/**
* Writes collection.
*
* @param <T> Type of a collection.
* @param name Field name.
* @param col Collection.
* @param itemType An item type of the collection.
* @return Whether a value was fully written.
*/
public <T> boolean writeCollection(String name, Collection<T> col, MessageCollectionItemType itemType);
/**
* Writes a map.
*
* @param <K> Type of the map's keys.
* @param <V> Type of the map's values.
* @param name Field name.
* @param map Map.
* @param keyType The type of the map's key.
* @param valType The type of the map's value.
* @return Whether a value was fully written.
*/
public <K, V> boolean writeMap(String name, Map<K, V> map, MessageCollectionItemType keyType,
MessageCollectionItemType valType);
/**
* Returns {@code true} if the header of the current message has been written, {@code false} otherwise.
*
* @return Whether the message header has already been written.
*/
public boolean isHeaderWritten();
/**
* Callback called when the header of the message is written.
*/
public void onHeaderWritten();
/**
* Gets a current message state.
*
* @return State.
*/
public int state();
/**
* Increments a state.
*/
public void incrementState();
/**
* Callback called before an inner message is written.
*/
public void beforeInnerMessageWrite();
/**
* Callback called after an inner message is written.
*
* @param finished Whether the message was fully written.
*/
public void afterInnerMessageWrite(boolean finished);
/**
* Resets this writer.
*/
public void reset();
}