application/webapp-service/src/main/java/webapp/tier/service/socket/ServiceSocket.java
package webapp.tier.service.socket;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.ApplicationScoped;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
@ApplicationScoped
public class ServiceSocket {
private final Logger logger = Logger.getLogger(this.getClass().getSimpleName());
private static final Map<String, Session> sessions = new ConcurrentHashMap<>();
public Map<String, Session> getSessions() {
return sessions;
}
@OnOpen
public void onOpen(Session session) {
sessions.put(session.getId(), session);
logger.log(Level.INFO, "open : {0}", session.getId());
}
@OnClose
public void onClose(Session session) {
sessions.remove(session.getId());
logger.log(Level.INFO, "close : {0}", session.getId());
}
@OnError
public void onError(Session session, Throwable throwable) {
sessions.remove(session.getId());
logger.logp(Level.SEVERE, "error : {0}{1}", session.getId(),
throwable.getMessage());
}
@OnMessage
public void onMessage(String message) {
if (sessions.isEmpty()) {
logger.log(Level.INFO, "No Subscribe Browser");
} else {
sessions.values().forEach(s -> {
logger.log(Level.INFO, "Send : {0}", s.getId());
s.getAsyncRemote().sendObject(message);
});
}
}
}