package es.tid.pce.server;
import java.io.DataOutputStream;
import java.net.Inet4Address;
import java.util.Iterator;
import java.util.concurrent.LinkedBlockingQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import es.tid.pce.computingEngine.IniProcessorThread;
import es.tid.pce.computingEngine.InitiationRequest;
import es.tid.pce.computingEngine.SingleDomainIniProcessorThread;
import es.tid.pce.parentPCE.ChildPCERequestManager;
import es.tid.pce.parentPCE.MDLSPDB.MultiDomainLSPDB;
import es.tid.pce.pcep.constructs.PCEPIntiatedLSP;
import es.tid.pce.pcep.messages.PCEPInitiate;
import es.tid.pce.server.lspdb.SingleDomainLSPDB;
import es.tid.tedb.ReachabilityManager;
public class SingleDomainInitiateDispatcher {
/**
* Queue to add Initiate.
* This queue is read by the request processor threads.
*/
private LinkedBlockingQueue<InitiationRequest> lspIniRequestQueue;
private Thread singleDomainIniProcessorThread;
private IniPCCManager iniManager;
/**
* The logger
*/
private Logger log;
public SingleDomainInitiateDispatcher(SingleDomainLSPDB singleDomainLSPDB, IniPCCManager iniManager) {
log=LoggerFactory.getLogger("PCEServer");
lspIniRequestQueue = new LinkedBlockingQueue<InitiationRequest>();
singleDomainIniProcessorThread= new SingleDomainIniProcessorThread(lspIniRequestQueue,singleDomainLSPDB,iniManager);
singleDomainIniProcessorThread.start();
this.iniManager=iniManager;
}
public void dispathInitiate(PCEPInitiate iniMessage, DataOutputStream out, Inet4Address remotePeerIP)
{
log.info("Dispatching Initiate message from "+remotePeerIP);
log.info("XXX iniMessage: "+iniMessage);
Iterator<PCEPIntiatedLSP> it=iniMessage.getPcepIntiatedLSPList().iterator();
while (it.hasNext()){
log.info("Dispaaaatch");
InitiationRequest ir=new InitiationRequest();
ir.setOut(out);
ir.setRemotePeerIP(remotePeerIP);
ir.setLspIniRequest(it.next());
lspIniRequestQueue.add(ir);
}
}
public IniPCCManager getIniManager() {
return iniManager;
}
public void setIniManager(IniPCCManager iniManager) {
this.iniManager = iniManager;
}
}