package example; import com.caucho.util.L10N; import java.util.logging.Logger; import java.util.logging.Level; import com.caucho.vfs.*; import com.caucho.server.port.ServerRequest; import com.caucho.server.connection.Connection; import java.io.IOException; /** * Protocol specific information for each request. An instance of this * object may be reused to reduce memory allocations. */ public class Magic8BallRequest implements ServerRequest { static protected final Logger log = Logger.getLogger(Magic8BallRequest.class.getName()); static final L10N L = new L10N(Magic8BallRequest.class); Connection _conn; Magic8BallProtocol _protocol; // the parser is reset for each request Parser _parser = new Parser(); Magic8Ball _magic8ball = new Magic8Ball(); /** * */ public Magic8BallRequest(Magic8BallProtocol protocol, Connection conn) { _protocol = protocol; _conn = conn; } /** * Initialize the connection. At this point, the current thread is the * connection thread. */ public void init() { } /** * Handle a new connection. The controlling Server may call * handleRequest again after the connection completes, so the * implementation must initialize any variables for each connection. */ public boolean handleRequest() throws IOException { ReadStream readStream = _conn.getReadStream(); WriteStream writeStream = _conn.getWriteStream(); try { _parser.init(readStream); AbstractCommand cmd = null; do { String result = null; String error = null; cmd = _parser.nextCommand(); if (_parser.isError()) { error = _parser.getError(); } else if (cmd != null) { result = cmd.act(_magic8ball); if (cmd.isError()) error = cmd.getError(); } if (error != null) { writeStream.print("ERROR: "); writeStream.println(_parser.getError()); break; } else if (result != null) { writeStream.print("RESULT: "); writeStream.println(result); } } while (cmd != null); } catch (Throwable e) { log.log(Level.WARNING, e.toString(), e); } return false; } }