Hi Martin,

 I have the same implementation as a servlet please find the servlet code i
used blow.

 public class CometServlet extends HttpServlet implements CometProcessor {

    protected ArrayList<HttpServletResponse> connections = new
ArrayList<HttpServletResponse>();
    protected MessageSender messageSender = null;

    public void init() throws ServletException {
        messageSender = new MessageSender();
        Thread messageSenderThread = new Thread(messageSender,
"MessageSender["
                + getServletContext().getContextPath() + "]");
        messageSenderThread.setDaemon(true);
        messageSenderThread.start();
    }

    public void destroy() {
        connections.clear();
        messageSender.stop();
        messageSender = null;
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        System.out.println("Inside service method");
        super.service(arg0, arg1);
    }

    @Override
    public void event(CometEvent event) throws IOException, ServletException
{
        HttpServletRequest request = event.getHttpServletRequest();
        HttpServletResponse response = event.getHttpServletResponse();
        if (event.getEventType() == CometEvent.EventType.BEGIN) {
            log("Begin for session: " + request.getSession(true).getId());
            PrintWriter writer = response.getWriter();
            writer
                    .println("<!doctype html public \"-//w3c//dtd html 4.0
transitional//en\">");
            writer
                    .println("<head><title>JSP Chat</title></head><body
bgcolor=\"#FFFFFF\">");
            writer.flush();
            synchronized (connections) {
                connections.add(response);
            }
        } else if (event.getEventType() == CometEvent.EventType.ERROR) {
            log("Error for session: " + request.getSession(true).getId());
            synchronized (connections) {
                connections.remove(response);
            }
            event.close();
        } else if (event.getEventType() == CometEvent.EventType.END) {
            log("End for session: " + request.getSession(true).getId());
            synchronized (connections) {
                connections.remove(response);
            }
            PrintWriter writer = response.getWriter();
            writer.println("</body></html>");
            event.close();
        } else if (event.getEventType() == CometEvent.EventType.READ) {
            InputStream is = request.getInputStream();
            byte[] buf = new byte[512];
            do {
                int n = is.read(buf); // can throw an IOException
                if (n > 0) {
                    log("Read " + n + " bytes: " + new String(buf, 0, n)
                            + " for session: "
                            + request.getSession(true).getId());
                } else if (n < 0) {
                    // error(event, request, response);
                    return;
                }
            } while (is.available() > 0);
        }
    }

    public class MessageSender implements Runnable {

        protected boolean running = true;
        protected ArrayList<String> messages = new ArrayList<String>();

        public MessageSender() {
        }

        public void stop() {
            running = false;
        }

        /**
         * Add message for sending.
         */
        public void send(String user, String message) {
            synchronized (messages) {
                messages.add("[" + user + "]: " + message);
                messages.notify();
            }
        }

        public void run() {

            while (running) {

                if (messages.size() == 0) {
                    try {
                        synchronized (messages) {
                            messages.wait();
                        }
                    } catch (InterruptedException e) {
                        // Ignore
                    }
                }

                synchronized (connections) {
                    String[] pendingMessages = null;
                    synchronized (messages) {
                        pendingMessages = messages.toArray(new String[0]);
                        messages.clear();
                    }
                    // Send any pending message on all the open connections
                    for (int i = 0; i < connections.size(); i++) {
                        try {
                            PrintWriter writer =
connections.get(i).getWriter();
                            for (int j = 0; j < pendingMessages.length; j++)
{
                                writer.println(pendingMessages[j] + "<br>");
                            }
                            writer.flush();
                        } catch (IOException e) {
                            log("IOExeption sending message", e);
                        }
                    }
                }

            }

        }

    }

}

Please let me know if im doing anything wrong...

Thank you,
bala.

On Wed, May 6, 2009 at 7:05 PM, Martin Gainty <mgai...@hotmail.com> wrote:

>
> code Servlet to implement CometProcessor
> http://www.mbaworld.com/docs/aio.html
>
> Martin
> ______________________________________________
> Disclaimer and Confidentiality/Verzicht und Vertraulichkeitanmerkung/Note
> de déni et de confidentialité
> This message is confidential. If you should not be the intended receiver,
> then we ask politely to report. Each unauthorized forwarding or
> manufacturing of a copy is inadmissible. This message serves only for the
> exchange of information and has no legal binding effect. Due to the easy
> manipulation of emails we cannot take responsibility over the the contents.
> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene
> Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte
> Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht
> dient lediglich dem Austausch von Informationen und entfaltet keine
> rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von
> E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen.
> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le
> destinataire prévu, nous te demandons avec bonté que pour satisfaire
> informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie
> de ceci est interdite. Ce message sert à l'information seulement et n'aura
> pas n'importe quel effet légalement obligatoire. Étant donné que les email
> peuvent facilement être sujets à la manipulation, nous ne pouvons accepter
> aucune responsabilité pour le contenu fourni.
>
>
>
>
> > Date: Wed, 6 May 2009 18:37:23 +0530
> > Subject: comet with httpclient
> > From: chandu2...@gmail.com
> > To: users@tomcat.apache.org
> >
> > Hi All,
> >
> >  Is it possible to use HttpClient as a client to comet servlet when i
> tried
> > a simple HttpClient the response is never returned back. below is my
> comet
> > client code...
> >
> >       HttpClient httpclient = new DefaultHttpClient();
> >       HttpGet httpget = new HttpGet("
> http://localhost:8080/serverpush/comet";);
> >
> >       ResponseHandler<String> responseHandler = new
> BasicResponseHandler();
> >       String responseBody = httpclient.execute(httpget, responseHandler);
> >       httpclient.getConnectionManager().shutdown();
> >
> > if the above implementation is not preferred then what is the preferred
> > client for a comet servlet. could somebody point me to a link or doc on
> > comet client please. any help would be very much appreciated
> >
> > Thank you,
> > bala.
>
> _________________________________________________________________
> Hotmail® has a new way to see what's up with your friends.
>
> http://windowslive.com/Tutorial/Hotmail/WhatsNew?ocid=TXT_TAGLM_WL_HM_Tutorial_WhatsNew1_052009
>

Reply via email to