www.pudn.com > acdx.rar > WQManager.cpp


  /*============================================================= 
 
  
 Function: 
		 
 
 
 Author: Leon Wang  
==============================================================*/ 
// WQManager.cpp: implementation of the WQManager class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "WQManager.h" 
#include "acdconfig.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
//##ModelId=424BB63F0162 
int WQManager::KILL_SLEEP = 3;// sleep 3 sec after killing WQs, before unregister 
//##ModelId=424BB63F0163 
int WQManager::DEFAULT_PORTRANGE = 1730;// default for portrange start 
 
//##ModelId=424BB63F015F 
WQManager::WQManager() 
{ 
 
} 
 
//##ModelId=424BB63F0160 
WQManager::~WQManager() 
{ 
 
} 
 
//##ModelId=424BB63F0150 
unsigned __stdcall  WQManager::_RUN(void *p) 
{ 
	WQManager * pThis = (WQManager*)p; 
	pThis->RUN(); 
	delete pThis; 
	return 0;	 
} 
 
 
/* 
 clear waiting queue threads 
*/ 
//##ModelId=424BB63F0153 
void WQManager::RUN() 
{ 
	// if have thread 
        if (!processList.empty()) { 
			Logger::log("Stopping talking wait queues"); 
			// find all thread and destroy it 
            for(int i = 0; i < processList.size(); i++ ) { 
                //WQProcess wq = (WQProcess) processList[i]; 
                //wq.p.destroy();    // terminates the process 
            } 
			//Thread.sleep(KILL_SLEEP * 1000);     // wait 3 sec 
            // unregister alias from GK 
		 
            for(int j = 0; j < processList.size(); j++ ) { 
                //WQProcess wq = (WQProcess) processList[i]; 
                // send UnregisterAlias to GnuGk 
                //gk->unregisterAlias(wq.alias); 
            } 
 
			// clear all threads 
            processList.clear(); 
 
		} 
 
} 
 
 
//##ModelId=424BB63F0141 
void WQManager::startWaitQueues(GkClient _gk) 
{ 
	ACDConfig* config = ACDConfig::getInstance(); 
    // maybe here is waiting queue parameter 
    CString startCmd = config->getConfigKey("Main","wq_start_cmd", ""); 
	//int port = config->getConfigKey("wq_portrange_start", DEFAULT_PORTRANGE); 
 
	int port = config->getConfigKey("Main","wq_portrange_start", 1730); 
 
    gk = _gk; 
 
    if (startCmd.GetLength() <= 0) 
         return;     // don't start talking agents 
	 
    //????????????? need startwaitqueues function ? 
 
 
     // register a hook so we can clean up on shutdown 
     //Runtime.getRuntime().addShutdownHook(this); 
/* 
        String[] queues = config.getQueues(); 
        for (int q=0; q < queues.length; q++) { 
            String queue = queues[q]; 
            int mode = config.getQueueingMode(queue); 
            if ((mode == ACDConfig.QUEUEING_MODE_TALKING) || (mode == ACDConfig.QUEUEING_MODE_RINGANDTALK)) { 
                int numAgents = config.getMaxSize(queue); 
                Logger.log("Starting " + numAgents + " talking wait queues for " + queue); 
                String messageFile = config.getConfigKey(queue + "_wq_message", ""); 
                for (int i=1; i <= numAgents; i++) { 
                    String alias = queue + "_wq_" + i; 
                    String execCmd = startCmd; 
                    execCmd = execCmd.replaceAll("%P", new Integer(port).toString()); 
                    execCmd = execCmd.replaceAll("%A", alias); 
                    execCmd = execCmd.replaceAll("%W", messageFile); 
                    try { 
                        Logger.debug("Forking " + execCmd); 
                        Process p = Runtime.getRuntime().exec(execCmd); 
                        processList.add(new WQProcess(alias, p)); 
//                        // DEBUG: catch STDOUT from new process 
//                        BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream())); 
//                        String line; 
//                        while ((line = is.readLine()) != null) 
//                            System.out.println(line); 
                    } catch (IOException e) { 
                        Logger.log("Start of " + alias + " failed."); 
                    } 
                    // increment listenport 
                    port++; 
                } 
            } 
        } 
		*/ 
 
}