package org.jdiameter.common.impl.app.auth;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.jdiameter.api.NetworkReqListener;
import org.jdiameter.api.app.StateChangeListener;
import org.jdiameter.common.impl.app.AppSessionImpl;
public abstract class AppAuthSessionImpl extends AppSessionImpl implements NetworkReqListener, org.jdiameter.api.app.StateMachine {
private static final long serialVersionUID = 1L;
protected Lock sendAndStateLock = new ReentrantLock();
protected ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(4);
protected List<StateChangeListener> stateListeners = new CopyOnWriteArrayList<StateChangeListener>();
public void addStateChangeNotification(StateChangeListener listener) {
if (!stateListeners.contains(listener)) {
stateListeners.add(listener);
}
}
public void removeStateChangeNotification(StateChangeListener listener) {
stateListeners.remove(listener);
}
public void release() {
scheduler.shutdownNow();
super.release();
}
}