package org.jdiameter.common.impl.app.cca;
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.api.app.StateMachine;
import org.jdiameter.common.impl.app.AppSessionImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* AppCCASessionImpl.java
*
* <br>Super project: mobicents
* <br>5:00:55 PM Dec 2, 2008
* <br>
* @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
* @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
*/
public abstract class AppCCASessionImpl extends AppSessionImpl implements NetworkReqListener, StateMachine {
private static final long serialVersionUID = 1L;
protected Lock sendAndStateLock = new ReentrantLock();
protected static final ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(4);
protected List<StateChangeListener> stateListeners = new CopyOnWriteArrayList<StateChangeListener>();
protected Logger logger = LoggerFactory.getLogger(AppCCASessionImpl.class);
public void addStateChangeNotification(StateChangeListener listener) {
if (!stateListeners.contains(listener)) {
stateListeners.add(listener);
}
}
public void removeStateChangeNotification(StateChangeListener listener) {
stateListeners.remove(listener);
}
public void release() {
//scheduler.shutdown();
super.release();
}
}