package com.techq.available.quorum.handler; import java.io.IOException; import java.nio.ByteBuffer; import java.util.concurrent.LinkedBlockingQueue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.forest.ape.mq.impl.SendWorkerMQ; import com.techq.available.AvailableConfig; import com.techq.available.data.BasicPacket; public class DataHandler extends Thread { private static final Logger LOG = LoggerFactory .getLogger(DataHandler.class); LinkedBlockingQueue<BasicPacket> mqQueue = new LinkedBlockingQueue<BasicPacket>(); boolean isRunning = true; SendWorkerMQ mq; Leader leader; public DataHandler(Leader leader) throws Exception { super("DataHandler"); this.leader = leader; mq = SendWorkerMQ.createMQWorker(); } public void run() { while (isRunning) { BasicPacket n = null; try { n = mqQueue.poll(AvailableConfig.pollTimeout, AvailableConfig.pollTimeUnit); if (n == null) { n = mqQueue.take(); } mq.publish(ByteBuffer.wrap(n.getData())); } catch (InterruptedException e) { LOG.error( "sending data to mq, ", e); } catch (IOException e) { LOG.error( "sending data to mq, ", e); } } } public void halt() { if (!isRunning) return; isRunning = false; this.interrupt(); } }