SSF.Util.Streams
Class BasicRecorder

java.lang.Object
  |
  +--SSF.Util.Streams.BasicRecorder
All Implemented Interfaces:
StreamInterface
Direct Known Subclasses:
WormRecorder

public class BasicRecorder
extends java.lang.Object
implements StreamInterface

BasicRecorder demonstrates how to build a simple implementation of a StreamInterface for portably emitting a stream of records.


Constructor Summary
BasicRecorder(java.lang.String streamID)
           
 
Method Summary
 void addSession()
           
 void connectRead(java.lang.String url)
          Connect this stream to a data source at the given URL.
 void connectWrite(java.lang.String url)
          Connect this stream to a data sink at the given URL.
 void connectWrite(java.lang.String url, boolean append)
          open files in append mode.
 void disconnect()
          Signal that no more records are to be received (if reading) or sent (if writing).
 int getRecordSourceCode(java.lang.String name)
          Return the integer code associated with the user-defined record source string in this record stream.
 java.lang.String getRecordSourceString(int id)
          Return the arbitrary-length String identifying the user-defined source (writer) ID associated with a given code in this record stream.
 int getRecordTypeCode(java.lang.String name)
          Return the integer code associated with the user-defined record type string in this record stream.
 java.lang.String getRecordTypeString(int id)
          Return the arbitrary-length String identifying the user-defined record type associated with a given code in this record stream.
 boolean isConnected()
          Return true if this stream has been successfully connected to a data source or sink, and not disconnected.
 int receive(int service, int source, double time, byte[] bytes, int off, int len)
          Process a single record in the data stream.
 int send(int service, int source, double time)
          Return the same value (zero for success, nonzero for failure) that would be returned by a send with the given header information and actual payload data, assuming no IOExceptions etc.
 int send(int service, int source, double time, byte[] bytes, int off, int len)
          Send a single record on the data stream.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BasicRecorder

public BasicRecorder(java.lang.String streamID)
Method Detail

addSession

public void addSession()

isConnected

public boolean isConnected()
Description copied from interface: StreamInterface
Return true if this stream has been successfully connected to a data source or sink, and not disconnected.

Specified by:
isConnected in interface StreamInterface

connectRead

public void connectRead(java.lang.String url)
                 throws streamException
Description copied from interface: StreamInterface
Connect this stream to a data source at the given URL. Your receive() method will be called back each time a record is received. Call disconnect() to signal that you wish to receive no more records.

Specified by:
connectRead in interface StreamInterface
streamException

connectWrite

public void connectWrite(java.lang.String url,
                         boolean append)
                  throws streamException
open files in append mode.

streamException

connectWrite

public void connectWrite(java.lang.String url)
                  throws streamException
Description copied from interface: StreamInterface
Connect this stream to a data sink at the given URL. Then call send() several times to inject records into the stream. Call disconnect() to signal that no more records will be written.

Specified by:
connectWrite in interface StreamInterface
streamException

disconnect

public void disconnect()
Description copied from interface: StreamInterface
Signal that no more records are to be received (if reading) or sent (if writing). A stream may automatically disconnect under certain conditions.

Specified by:
disconnect in interface StreamInterface

receive

public int receive(int service,
                   int source,
                   double time,
                   byte[] bytes,
                   int off,
                   int len)
Description copied from interface: StreamInterface
Process a single record in the data stream. The type_code and source_code identify the record type and source (writer) uniquely; they may be resolved to string IDs using the lookupRecordTypeString and lookupRecordSourceString methods.

These codes are not portable across implementations, or even across runs within the same implementation; they are used for efficiency purposes to minimize the overhead associated with constructing, sending, receiving, and interpreting Strings. Returns zero for successful receipt, non-zero for failure.

Specified by:
receive in interface StreamInterface

send

public int send(int service,
                int source,
                double time)
Description copied from interface: StreamInterface
Return the same value (zero for success, nonzero for failure) that would be returned by a send with the given header information and actual payload data, assuming no IOExceptions etc.

Many source-side filtering schemes will suppress sends of records that match given profiles for record types, points of origin, or intervals of time. This standard inquiry method allows a savvy sender to avoid the overhead of preparing a bufferful of bytes that will simply be ignored anyway. First test the waters with a no-payload send(), and if it returns success (zero), prepare the bytes and call the full version of send().

Specified by:
send in interface StreamInterface

send

public int send(int service,
                int source,
                double time,
                byte[] bytes,
                int off,
                int len)
Description copied from interface: StreamInterface
Send a single record on the data stream. The type_code and source_code identify the record type and source (writer) uniquely. Obtain their values by calling lookupRecordTypeCode and lookupRecordSourceCode, respectively.

These codes are not portable across implementations, or even across runs within the same implementation; they are used for efficiency purposes to minimize the overhead associated with constructing, sending, receiving, and interpreting Strings. Returns zero if a record was sent, nonzero if no record was sent (due to error, suppression due to filtering, or any other cause).

Specified by:
send in interface StreamInterface

getRecordTypeString

public java.lang.String getRecordTypeString(int id)
Description copied from interface: StreamInterface
Return the arbitrary-length String identifying the user-defined record type associated with a given code in this record stream. Returns null if no String has been associated with the given code.

Specified by:
getRecordTypeString in interface StreamInterface

getRecordTypeCode

public int getRecordTypeCode(java.lang.String name)
Description copied from interface: StreamInterface
Return the integer code associated with the user-defined record type string in this record stream.

The code returned for an unknown name depends on the state of the stream. In a stream connected for writing, a new code is returned which henceforth will refer to that string; in a stream which is unconnected or connected for reading, the error code -1 is returned, signifying that the code is not yet known (i.e., because the stream record that might identify the code has not yet been processed).

Specified by:
getRecordTypeCode in interface StreamInterface

getRecordSourceString

public java.lang.String getRecordSourceString(int id)
Description copied from interface: StreamInterface
Return the arbitrary-length String identifying the user-defined source (writer) ID associated with a given code in this record stream. These strings have meaning only to the user. Typically, in SSFNet they will be NHI addresses; in 'real' internet environments they may be DNS names or IP addresses, etc.

Specified by:
getRecordSourceString in interface StreamInterface

getRecordSourceCode

public int getRecordSourceCode(java.lang.String name)
Description copied from interface: StreamInterface
Return the integer code associated with the user-defined record source string in this record stream. The code returned for an unknown name depends on the state of the stream. In a stream connected for writing, a new code is returned which henceforth will refer to that string; in a stream which is unconnected or connected for reading, the error code -1 is returned, signifying that the code is not yet known (i.e., because the stream record that might identify the code has not yet been processed).

Specified by:
getRecordSourceCode in interface StreamInterface