Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Realizzare una chat con un'implementazione Comet per GWT (5/5)
Scritto da Francesco Carotenuto il 01-12-2010 ore 07:53
Intel Cluster Studio XE
Concludiamo l'analisi del codice di ChatServiceImpl mostrando come send rappresenti il cuore del nostro sistema di chat. Nel dettaglio, in send andiamo a effettuare gli stessi controlli iniziali che abbiamo illustrato in logout, ma con una differenza: dalla stringa costuiamo un messaggio rappresentato come istanza di un bean denominato ChatMessage, e lo inoltriamo a tutti i client connessi, utilizzando le loro sessioni Comet, così come illustrato nel codice seguente.
  1. ...
  2.         public void send(String message) throws ChatException {
  3.  
  4.                 HttpSession httpSession = getThreadLocalRequest().getSession(false);
  5.                 if (httpSession == null) {
  6.                         throw new ChatException("not logged in: no http session");
  7.                 }
  8.  
  9.                 String username = (String) httpSession.getAttribute("username");
  10.                 if (username == null) {
  11.                         throw new ChatException("not logged in: no http session username");
  12.                 }
  13.  
  14.                 ChatMessage chatMessage = new ChatMessage();
  15.                 chatMessage.setUsername(username);
  16.                 chatMessage.setMessage(message);
  17.  
  18.                 for (Map.Entry<String, CometSession> entry : users.entrySet()) {
  19.                         entry.getValue().enqueue(chatMessage);
  20.                 }
  21.         }
  22.  
  23. }
Concludiamo questo mini tutorial, mostrando il file web.xml in cui andiamo a definire tutti i listener e le servlet necessarie per eseguire la chat. I listener in questione sono CometServletContexListener e CometHttpSessionListener, necessari rispettivamente per effettuare lo shutdown del processore Comet quando il ServletContex viene distrutto e per invalidare la sessione Comet quando la sessione HTTP viene invalidata.

Le servlet da definire invece sono: ChatServiceImpl e CometServlet. Di seguito il codice del file web.xml:
  1. <web-app>
  2.   <listener>
  3.     <listener-class>net.zschech.gwt.comet.server.CometServletContextListener</listener-class>
  4.   </listener>
  5.  
  6.  
  7.   <listener>
  8.     <listener-class>net.zschech.gwt.comet.server.CometHttpSessionListener</listener-class>
  9.   </listener>
  10.  
  11.   <servlet>
  12.     <servlet-name>chatService</servlet-name>
  13.     <servlet-class>org.mychat.server.ChatServiceImpl</servlet-class>
  14.   </servlet>
  15.  
  16.   <servlet>
  17.     <servlet-name>chatComet</servlet-name>
  18.     <servlet-class>net.zschech.gwt.comet.server.CometServlet</servlet-class>
  19.   </servlet>
  20.  
  21.   <servlet-mapping>
  22.     <servlet-name>chatService</servlet-name>
  23.     <url-pattern>/net.zschech.gwt.chat.Chat/chat</url-pattern>
  24.   </servlet-mapping>
  25.   <servlet-mapping>
  26.     <servlet-name>chatComet</servlet-name>
  27.     <url-pattern>/net.zschech.gwt.chat.Chat/comet</url-pattern>
  28.   </servlet-mapping>
  29. </web-app>
Precedente: Anniversari illustri: i Principia Mathematica
Successiva: OrCAD, un software per l'elettronica: creare gli schemi con Capture (6/6)
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.261 secondi.