org.xsocket.stream
Class StreamUtils

Package class diagram package StreamUtils
java.lang.Object
  extended by org.xsocket.stream.StreamUtils

public final class StreamUtils
extends java.lang.Object

utility class for stream based communication


Field Summary
static java.lang.String SERVER_TRHREAD_PREFIX
           
 
Method Summary
static void start(IMultithreadedServer server)
          starts the given server within a dedicated thread.
static int validateSufficientDatasizeByIntLengthField(INonBlockingConnection connection)
          validate, based on a leading int length field, that enough data (getNumberOfAvailableBytes() >= length) is available.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SERVER_TRHREAD_PREFIX

public static final java.lang.String SERVER_TRHREAD_PREFIX
See Also:
Constant Field Values
Method Detail

validateSufficientDatasizeByIntLengthField

public static int validateSufficientDatasizeByIntLengthField(INonBlockingConnection connection)
                                                      throws java.io.IOException,
                                                             java.nio.BufferUnderflowException
validate, based on a leading int length field, that enough data (getNumberOfAvailableBytes() >= length) is available. If not, an BufferUnderflowException will been thrown. The 4 bytes of the length field will be ignore by getting the available data size. Example:
 //client
 connection.setAutoflush(false);  // avoid immediate write
 ...
 connection.markWritePosition();  // mark current position
 connection.write((int) 0);       // write "emtpy" length field
  
 // write and count written size
 int written = connection.write(CMD_PUT);
 written += ...
  
 connection.resetToWriteMark();  // return to length field position
 connection.write(written);      // and update it
 connection.flush(); // flush (marker will be removed implicit)
 ...
 
 
 // server
 class MyHandler implements IDataHandler {
    ...
    public boolean onData(INonBlockingConnection connection) throws IOException, BufferUnderflowException {
       int length = StreamUtils.validateSufficientDatasizeByIntLengthField(connection);
       
       // enough data (BufferUnderflowException hasn`t been thrown)
       byte cmd = connection.readByte();
       ...
    }
  }      
 

Parameters:
connection - the connection
Returns:
the length
Throws:
java.io.IOException - if an exception occurs
java.nio.BufferUnderflowException - if not enough data is available

start

public static void start(IMultithreadedServer server)
starts the given server within a dedicated thread. This method blocks until the server is open.

Parameters:
server - the server to start