package es.tid.pce.computingEngine;
import java.util.concurrent.LinkedBlockingQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import es.tid.pce.pcep.messages.PCEPReport;
import es.tid.pce.server.PCEServerParameters;
import es.tid.pce.server.lspdb.ReportDB_Handler;
/**
* The ReportDispatcher receives PCEPReport messages and decides what to do with:
* Add information to the database, generate an error,...
* @author jaume, the farruk
*
*/
public class ReportDispatcher
{
/**
* Number of processing threads
*/
private final int nThreads;
/**
* Array of RequestProcessor Threads
*/
private final ReportProcessorThread[] threads;
/**
* Queue to add path computing requests.
* This queue is read by the request processor threads.
*/
private LinkedBlockingQueue<PCEPReport> reportMessageQueue;
/**
* The logger
*/
private Logger log;
public ReportDispatcher(ReportDB_Handler lspDB, int nThreads)
{
log=LoggerFactory.getLogger("PCEServer");
this.nThreads = nThreads;
reportMessageQueue = new LinkedBlockingQueue<PCEPReport>();
threads = new ReportProcessorThread[nThreads];
for (int i=0; i<this.nThreads; i++) {
log.info("Starting Request Processor Thread");
threads[i] = new ReportProcessorThread(reportMessageQueue, lspDB);
threads[i].setPriority(Thread.MAX_PRIORITY);
threads[i].start();
}
}
public void dispatchReport(PCEPReport pcepReport)
{
reportMessageQueue.add(pcepReport);
}
}