package com.megatim.fdxconsultation.service.impl.sockets.helpers;
|
|
import com.fdx.messaging.common.ConnexionStatut;
|
import com.megatim.fdxconsultation.core.ifaces.supervision.StandaloneServerStateEntityManager;
|
import com.megatim.fdxconsultation.model.supervision.StandaloneServerStateEntity;
|
import java.io.IOException;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Timer;
|
import java.util.TimerTask;
|
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.logging.Level;
|
import java.util.logging.Logger;
|
import java.util.stream.Collectors;
|
import javax.enterprise.context.ApplicationScoped;
|
import javax.inject.Inject;
|
import javax.websocket.EncodeException;
|
import javax.websocket.Session;
|
|
/**
|
*
|
* @author Gabuntu
|
*/
|
@ApplicationScoped
|
public class ConnexionStatutSessionHandler {
|
|
@Inject
|
StandaloneServerStateEntityManager serverStateManager;
|
|
private final Map<String, Session> idToSessions = new ConcurrentHashMap<>();
|
|
private Timer timer = new Timer();
|
|
public void publishMessage(List<ConnexionStatut> connectedStatuts) {
|
getSessions().forEach(s -> {
|
try {
|
s.getBasicRemote().sendObject(connectedStatuts);
|
} catch (IOException | EncodeException ex) {
|
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
|
}
|
});
|
|
scheduleTask();
|
|
}
|
|
public void addSession(Session session) {
|
idToSessions.put(session.getId(), session);
|
}
|
|
public void removeSession(Session session) {
|
idToSessions.remove(session.getId());
|
}
|
|
private List<Session> getSessions() {
|
return idToSessions
|
.entrySet()
|
.stream()
|
.map(e -> e.getValue())
|
.collect(Collectors.toList());
|
}
|
|
private void scheduleTask() {
|
|
timer.cancel();
|
|
final long lastPublishTime = System.nanoTime();
|
timer = new Timer();
|
timer.schedule(new TimerTask() {
|
@Override
|
public void run() {
|
if (System.nanoTime() - lastPublishTime >= 10_000_000_000L) {
|
StandaloneServerStateEntity stateEntity = serverStateManager.getCurrentStandaloneServerStateEntity();
|
if (stateEntity != null) {
|
List<ConnexionStatut> connectedStatuts = stateEntity.getAgentConfigurations().stream().map(a -> {
|
ConnexionStatut connexionStatut = new ConnexionStatut();
|
connexionStatut.setAgentCode(a.getAgentCode());
|
connexionStatut.setConnected(false);
|
return connexionStatut;
|
}).collect(Collectors.toList());
|
|
publishMessage(connectedStatuts);
|
}
|
}
|
}
|
}, 0, 5000);
|
|
}
|
}
|