Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package estonlabs.cxtl.common.stream.managed;
import estonlabs.cxtl.common.DateFormatUtils;
import estonlabs.cxtl.common.codec.Codec;
import estonlabs.cxtl.common.stream.pojo.PojoWsSession;
import lombok.SneakyThrows;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.Disposable;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
/**
* This is a Managed WsSession. A managed session handles:
* - pings/pongs
* - auto authentication
* - auto resubscribe on disconnect
* - can be configured to check for a stale feed and reconnect if no data has been sent within a window
* @param
* @param
*/
public class ManagedWsSession extends PojoWsSession {
private static final Logger LOGGER = LoggerFactory.getLogger(ManagedWsSession.class);
// Create a SimpleDateFormat object to format the date as a string
private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final AtomicInteger pingsSinceLastPong = new AtomicInteger(0);
private final AtomicInteger failedReconnects = new AtomicInteger(0);
private final AtomicBoolean isReconnecting = new AtomicBoolean(false);
private final AtomicBoolean isOpen = new AtomicBoolean(true);
private Runnable ping;
private Supplier createPong;
private Supplier createLogin;
private final List recoveryMessages = new CopyOnWriteArrayList<>();
private long nextReconnectMs = 0;
private final String id;
private long pingWindow;
private boolean expectPingResponse;
private long staleWindow =-1;
private long nextPing =0;
private long lastReceived=0;
private final Map timerDisposables = new ConcurrentHashMap<>();
public ManagedWsSession(String id, Codec