document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. package com.apuntesdejava.websocket;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.List;
  7. import java.util.logging.Level;
  8. import java.util.logging.Logger;
  9. import javax.ejb.Schedule;
  10. import javax.ejb.Singleton;
  11. import javax.websocket.OnClose;
  12. import javax.websocket.OnMessage;
  13. import javax.websocket.OnOpen;
  14. import javax.websocket.RemoteEndpoint;
  15. import javax.websocket.Session;
  16. import javax.websocket.server.ServerEndpoint;
  17.  
  18. @ServerEndpoint("/broadcast")
  19. @Singleton //es - a la vez- nuestro EJB para programar eventos
  20. public class BroadcastUsuariosEndPoint {
  21.  
  22.     static final Logger LOGGER = Logger.getLogger(BroadcastUsuariosEndPoint.class.getName());
  23.     //la lista de conexiones realizadas
  24.     static final List<Session> conexiones = new ArrayList<>();
  25.  
  26.     /**
  27.      * Evento que se ejecuta cuando un cliente se conecta
  28.      *
  29.      * @param session La sesion del cliente
  30.      */
  31.     @OnOpen
  32.     public void iniciaSesion(Session session) {
  33.         LOGGER.log(Level.INFO, "Iniciando la conexion de {0}", session.getId());
  34.         conexiones.add(session); //Simplemente, lo agregamos a la lista
  35.  
  36.     }
  37.  
  38.     /**
  39.      * Evento que se ejecuta cuando se pierde una conexion.
  40.      *
  41.      * @param session La sesion del cliente
  42.      */
  43.     @OnClose
  44.     public void finConexion(Session session) {
  45.         LOGGER.info("Terminando la conexion");
  46.         if (conexiones.contains(session)) { // se averigua si está en la colección
  47.             try {
  48.                 LOGGER.log(Level.INFO, "Terminando la conexion de {0}", session.getId());
  49.                 session.close(); //se cierra la conexión
  50.                 conexiones.remove(session); // se retira de la lista
  51.             } catch (IOException ex) {
  52.                 LOGGER.log(Level.SEVERE, null, ex);
  53.             }
  54.         }
  55.     }
  56.  
  57.     /**
  58.      * Enviaremos un mensaje a todos los conectados
  59.      */
  60.     @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
  61.     public void notificar() {
  62.         LOGGER.log(Level.INFO, "Enviando notificacion a {0} conectados", conexiones.size());
  63.         String mensaje = "Son las " + (new Date()) + " y hay " + conexiones.size() + " conectados ";  // el mensaje a enviar
  64.         for (Session sesion : conexiones) { //recorro toda la lista de conectados
  65.             RemoteEndpoint.Basic remote = sesion.getBasicRemote(); //tomo la conexion remota con el cliente...
  66.             try {
  67.                 remote.sendText(mensaje); //... y envío el mensajue
  68.             } catch (IOException ex) {
  69.                 LOGGER.log(Level.WARNING, null, ex);
  70.             }
  71.         }
  72.  
  73.     }
  74.  
  75.     /**
  76.      * Solo es un metodo que atiende las peticiones
  77.      *
  78.      * @param mensaje
  79.      * @param sesion
  80.      */
  81.     @OnMessage
  82.     public void onMessage(String mensaje, Session sesion) {
  83.         LOGGER.info("Se recibe un mensaje, aunque no se hace nada");
  84.     }
  85.  
  86. }
');