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
Realizzare una chat con un'implementazione Comet per GWT (3/5)
Scritto da Francesco Carotenuto il 08-11-2010 ore 09:17
In questo contributo sarà illustrato come creare e gestire la comunicazione con il server, tramite un'apposita classe della libreria che implementa la metodologia Comet, denominata CometClient, che rende invisibile al programmatore la scelta (decisione che viene presa in base al browser su cui viene eseguita la classe) della tecnica utilizzata per realizzare una comunicazione full duplex tra browser e web server.

Iniziamo dal metodo login, che richiama l'omonimo servizio; in caso di avvenuta connessione passiamo a richiamare il metodo loggedOn, che racchiude un po' il cuore di tutta la comunicazione, dato che ci consente di inizializzare e avviare una istanza di CometClient e iniziare così l'effettiva comunicazione con il server.
  1. ...
  2. private void login(final String username) {
  3.                 chatService.login(username, new AsyncCallback<Void>() {
  4.  
  5.          public void onSuccess(Void result) {
  6.                      loggedOn(username);
  7.                     }
  8.  
  9.  
  10.          public void onFailure(Throwable caught) {
  11.                      output(caught.toString(), "red");
  12.          }
  13.   });
  14. }
  15. ...
In particolare, il metodo loggedOn, riportato qui sotto, crea una istanza CometSerializer utilizzando la classe astratta descritta in precedenza, e successivamente crea il CometClient passandogli l'indirizzo del server, il serializzatore appena creato e un CometListener, che gestisce tutti gli eventi possibili che possono avvenire durante la comunicazione.
  1. private void loggedOn(String username) {
  2.        this.username = username;
  3.        output("logged in as " + username, "silver");
  4.        CometSerializer serializer = GWT.create(ChatCometSerializer.class);
  5.                 cometClient = new CometClient(GWT.getModuleBaseURL() + "comet", serializer, new CometListener() {
  6.                         public void onConnected(int heartbeat) {
  7.                                 output("connected " + heartbeat, "silver");
  8.                         }
  9.  
  10.                         public void onDisconnected() {
  11.                                 output("disconnected", "silver");
  12.                         }
  13.  
  14.                         public void onError(Throwable exception, boolean connected) {
  15.                                 output("error " + connected + " " + exception, "red");
  16.                         }
  17.  
  18.                         public void onHeartbeat() {
  19.                                 output("heartbeat", "silver");
  20.                         }
  21.  
  22.                         public void onRefresh() {
  23.                                 output("refresh", "silver");
  24.                         }
  25.  
  26.                         public void onMessage(List<? extends Serializable> messages) {
  27.                                 for (Serializable message : messages) {
  28.                                         if (message instanceof ChatMessage) {
  29.                                                 ChatMessage chatMessage = (ChatMessage) message;
  30.                                                 output(chatMessage.getUsername() + ": " + chatMessage.getMessage(), "black");
  31.                                         }                                    
  32.                                         else {
  33.                                                 output("unrecognised message " + message, "red");
  34.                                         }
  35.                                 }
  36.                         }
  37.                 });
  38.                 cometClient.start();
  39.         }
Concludiamo questa parte riportando qui sotto, il codice del metodo logout, che si occupa essenzialmente di gestire la chiusura dell'istanza di CometClient.
  1. ...
  2. private void logout() {
  3.          chatService.logout(username, new AsyncCallback<Void>() {
  4.  
  5.             public void onSuccess(Void result) {
  6.                   cometClient.stop();
  7.                   showLogonDialog();
  8.             }
  9.  
  10.             public void onFailure(Throwable caught) {
  11.                   output(caught.toString(), "red");
  12.             }
  13.           });
  14.  }
  15. }
Precedente: OrCAD, un software per l'elettronica: introduzione (2/3)
Successiva: Luigi Sacco e la crittografia italiana
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.364 secondi.