it could be because the data from the request already came in with the request. when the BEGIN happens, perform the actions as if there was a READ as well, ie, empty out the buffer.

Filip

Peter Warren wrote:
The following client code generates a comet BEGIN event on the server
but not a subsequent READ event, as I was expecting.  How come?  Is my
code wrong?  Are my expectations wrong?  See sequence of events
commented in code below.

    // client test method that sends messages to server and listens for
responses
    public void test() throws IOException {
        out.println("test 1");
        out.flush();

        // server receives client's message, generates a BEGIN event,
and sends response to client

        in = new BufferedReader(new
InputStreamReader(urlConn.getInputStream()));
        System.out.println(in.readLine());

        // client receives server's response and prints it

        out.println("test 2");
        out.flush();

        System.out.println(in.readLine());

        // client code blocks here waiting for server response.
        // server never generates a READ event.  How come?
        // Does the HttpURLConnection (see full code below) need to be
set up differently?
        // Am I using the PrintWriter incorrectly when sending to the
comet servlet?

        out.close();
        urlConn.disconnect();
    }

Thanks for any help,
Peter

-- system --

using:
tomcat 6.0.13 on windows xp sp 2
java 1.6.0_01

-- test client & comet servlet source below --

## begin test client ##

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class CometTestClient {

    private HttpURLConnection urlConn;

    private PrintWriter out;

    private BufferedReader in;

    public static void main(String[] args) throws Exception {
        CometTestClient test = new CometTestClient();
        test.test();
    }

    public CometTestClient() throws IOException {
        initConnection();
    }

    private void initConnection() throws IOException {
        URL url = new URL("http://127.0.0.1/CometTest";);
        urlConn = (HttpURLConnection) url.openConnection();
        urlConn.setDoInput(true);
        urlConn.setDoOutput(true);
        urlConn.connect();
        out = new PrintWriter(urlConn.getOutputStream());
    }

    public void test() throws IOException {
        out.println("test 1");
        out.flush();

        in = new BufferedReader(new
InputStreamReader(urlConn.getInputStream()));
        System.out.println(in.readLine());

        out.println("test 2");
        out.flush();

        System.out.println(in.readLine());

        out.close();
        urlConn.disconnect();
    }
}

## end test client ##

## begin comet servlet ##

import java.io.BufferedReader;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import org.apache.catalina.CometEvent;
import org.apache.catalina.CometProcessor;

public class CometTestServlet extends HttpServlet implements
CometProcessor {
    private static final long serialVersionUID = 5472498184127924791L;

    public void event(CometEvent cometEvent) throws IOException,
ServletException {
        HttpServletRequest request = cometEvent.getHttpServletRequest();
        // don't want timeout events
        cometEvent.setTimeout(1000000);
        if (cometEvent.getEventType() == CometEvent.EventType.BEGIN) {
            log("Begin for session: " + request.getSession(true).getId());
            BufferedReader reader =
cometEvent.getHttpServletRequest().getReader();
            String line = reader.readLine();
            if (line != null) {
                log("servlet received: " + line);
cometEvent.getHttpServletResponse().getWriter().println("servlet
received: " + line);
                cometEvent.getHttpServletResponse().getWriter().flush();
            } else {
                cometEvent.close();
            }
        } else if (cometEvent.getEventType() ==
CometEvent.EventType.ERROR) {
            log("Error for session: " + request.getSession(true).getId()
+ ", " + cometEvent.getEventSubType());
            cometEvent.close();
        } else if (cometEvent.getEventType() == CometEvent.EventType.END) {
            log("End for session: " + request.getSession(true).getId());
            cometEvent.close();
        } else if (cometEvent.getEventType() == CometEvent.EventType.READ) {
            log("Read for session: " + request.getSession(true).getId());
            BufferedReader reader =
cometEvent.getHttpServletRequest().getReader();
            String line = reader.readLine();
            if (line != null) {
cometEvent.getHttpServletResponse().getWriter().println("servlet
received: " + line);
            } else {
                cometEvent.close();
            }
        }
    }
}

## end comet servlet ##

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to