diff options
| author | Chris Cleeland <chris.cleeland@gmail.com> | 1997-01-30 04:39:40 +0000 |
|---|---|---|
| committer | Chris Cleeland <chris.cleeland@gmail.com> | 1997-01-30 04:39:40 +0000 |
| commit | 5ab2976b8f0f0d6546a4457c2f4d57d485a2a619 (patch) | |
| tree | 67b72bd5a78351cd30b5979e2baf46cac6d082ef /java/examples/Logger/simple-server/LoggingHandler.java | |
| parent | 0025c62efcf3f7e3a3afbee16b677fb701aec394 (diff) | |
| download | ATCD-5ab2976b8f0f0d6546a4457c2f4d57d485a2a619.tar.gz | |
*** empty log message ***
Diffstat (limited to 'java/examples/Logger/simple-server/LoggingHandler.java')
| -rw-r--r-- | java/examples/Logger/simple-server/LoggingHandler.java | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/java/examples/Logger/simple-server/LoggingHandler.java b/java/examples/Logger/simple-server/LoggingHandler.java new file mode 100644 index 00000000000..3861af246c5 --- /dev/null +++ b/java/examples/Logger/simple-server/LoggingHandler.java @@ -0,0 +1,121 @@ +/************************************************* + * + *@author Chris Cleeland + * + * What we really need to define is a run() (or whatever + * the Thread class has as its method to execute code), and + * have that do the usual delegated work of handle_input. + * We also need to figure out the best place to close the + * the socket, which probably ISN'T the finalizer. + * + *************************************************/ + +//package ACE.SimpleLogger; + +import ACE.SOCK_SAP.*; +import java.util.*; +import java.io.*; + +// Should this extend or simply be handed to a Thread instance to +// be run? +public class LoggingHandler extends Thread +{ + private SOCKStream cliStream_; + + /** + * Create a default Logging Handler + */ + public LoggingHandler() + { + this(new SOCKStream()); + } + + /** + * Create a LoggingHandler with an existing stream + */ + public LoggingHandler(SOCKStream aStream) + { + cliStream_ = aStream; + setName(); + } + + private void setName() + { + int portnum = ((cliStream_.socket() == null) + ? 0 + : cliStream_.socket().getLocalPort()); + this.setName("LoggingHandler#" + portnum); + } + + /** + * Start + */ + public void open() + { + this.start(); + } + + /** + */ + public SOCKStream stream() + { + return cliStream_; + } + + /** + * Handle logging events + */ + public void run() + { + DataInputStream dis = (DataInputStream) cliStream_.inputStream(); + + for (;;) + { + // Messages arrive in the following format: + // o 4 byte length (network format) + // o message, in ACE.LogRecord format + // + // Hey! We need exception catching in here too! + try + { + // Reconstitute a log message from the wire + LogRecord rec = new LogRecord(); + + // We don't really need this, because + // the object already knows how to + // extract itself properly. However, + // in order to interoperate with the + // C++ version, this must be extracted. + // Plus, it makes a convenient way to + // check everything. + int length = dis.readInt(); + + rec.streamInFrom(dis); + + if (rec.length() == length) + { + rec.print(cliStream_.socket().getInetAddress().getHostName(), + true, System.out); + System.out.flush(); + } + else + { + System.err.println("Logging_Handler: Length error receiving logging message\n"); + } + } + catch (EOFException eof) + { + System.err.println(Thread.currentThread().getName() + + ": end-of-file condition found; terminating."); + try { cliStream_.close(); } catch (IOException n) { } + this.stop(); + } + catch (IOException ioe) + { + System.err.println(Thread.currentThread().getName() + + ": IOException received -- " + + ioe.getMessage()); + } + } + } +}; |
