/**
*
*/
package com.taobao.top.analysis.node.connect;
import java.util.concurrent.TimeUnit;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.taobao.top.analysis.exception.AnalysisException;
import com.taobao.top.analysis.node.event.GetTaskResponseEvent;
import com.taobao.top.analysis.node.event.MasterEventCode;
import com.taobao.top.analysis.node.event.MasterNodeEvent;
import com.taobao.top.analysis.node.event.SendMonitorInfoResponseEvent;
import com.taobao.top.analysis.node.event.SendResultsResponseEvent;
/**
* 用于单机的分布式模拟,采用内存作为通信的服务端实现
* @author fangweng
* @Email fangweng@taobao.com
* 2011-11-29
*
*/
public class MemMasterConnector extends AbstractMasterConnector implements Runnable {
private static final Log logger = LogFactory.getLog(MemMasterConnector.class);
MemTunnel tunnel;
boolean running;
Thread innerThread;
@Override
public void init() throws AnalysisException {
running = true;
innerThread = new Thread(this);
innerThread.start();
}
@Override
public void releaseResource() {
running = false;
innerThread.interrupt();
}
public MemTunnel getTunnel() {
return tunnel;
}
public void setTunnel(MemTunnel tunnel) {
this.tunnel = tunnel;
}
@Override
public void run() {
while(running)
{
try
{
MasterNodeEvent nodeEvent = tunnel.getMasterSide().poll(1, TimeUnit.SECONDS);
if (nodeEvent != null)
{
if (nodeEvent.getEventCode().equals(MasterEventCode.GET_TASK) ||
nodeEvent.getEventCode().equals(MasterEventCode.SEND_RESULT))
{
masterNode.addEvent(nodeEvent);
}
}
}
catch (InterruptedException e)
{
//do nothing
}
catch(Exception ex)
{
logger.error(ex,ex);
}
}
}
@Override
public void echoGetJobTasks(GetTaskResponseEvent event) {
tunnel.getSlaveSide().offer(event);
}
@Override
public void echoSendJobTaskResults(SendResultsResponseEvent event) {
tunnel.getSlaveSide().offer(event);
}
@Override
public void echoSendMonitorInfo(SendMonitorInfoResponseEvent event) {
tunnel.getSlaveSide().offer(event);
}
/* (non-Javadoc)
* @see com.taobao.top.analysis.node.connect.IMasterConnector#openServer()
*/
@Override
public void openServer() {
}
}