package org.infinispan.client.hotrod.impl.transport;
import java.net.SocketAddress;
/**
* Transport abstraction.
*
* @author Mircea.Markus@jboss.com
* @since 4.1
*/
public interface Transport {
TransportFactory getTransportFactory();
void writeArray(byte[] toAppend);
void writeArray(byte[] toAppend, int offset, int count);
void writeOptionalArray(byte[] toAppend);
void writeByte(short toWrite);
void writeVInt(int vint);
void writeSignedVInt(int toWrite);
void writeVLong(long l);
long readVLong();
int readVInt();
void flush();
short readByte();
void release();
/**
* reads an vint which is size; then an array having that size.
*/
byte[] readArray();
String readString();
void readByteArray(byte[] buffer, int size);
byte[] readByteArray(int size);
long readLong();
void writeLong(long longValue);
int readUnsignedShort();
int read4ByteInt();
void writeString(String string);
void writeOptionalString(String string);
byte[] dumpStream();
/**
* Returns the address of the endpoint this transport is connected to, or
* <code>null</code> if it is unconnected.
*
* @return a <code>SocketAddress</code> reprensenting the remote endpoint
* of this transport, or <code>null</code> if it is not connected
* yet.
*/
SocketAddress getRemoteSocketAddress();
/**
* Invalidates transport instance.
*/
void invalidate();
boolean isValid();
void setBusy(boolean busy);
boolean isBusy();
}