package org.t4f.msc.pocsag;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Logger;
import javax.ws.rs.core.MediaType;
import org.t4f.msc.Config;
import org.t4f.msc.model.Node;
import org.t4f.msc.model.Node.Protocol;
import org.t4f.msc.network.mqtt.MqttService;
import org.t4f.msc.network.rest.consumer.NodeRestConsumer;
import org.t4f.msc.services.NodeServices;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.representation.Form;
public class MessageProcessor extends Thread{
private final static Logger LOGGER = Logger.getLogger("POCSAG-MSC");
private volatile boolean running = true;
private static LinkedBlockingQueue<PocsagMessage> pocsagMessagesQueue = new LinkedBlockingQueue<PocsagMessage>();
public MessageProcessor() {
super("MessageProcessor");
}
public synchronized void run() {
while (running) {
try {
PocsagMessage pocsagMessage = takeMessageQueue();
processPocsagMessage(pocsagMessage);
} catch (InterruptedException e) {
shutdown();
}
}
}
public void shutdown() {
running = false;
LOGGER.fine("Stopping MessageProcessor thread");
}
public synchronized boolean enqueuePocsagMessage(PocsagMessage pocsagMessage) {
try {
pocsagMessagesQueue.put(pocsagMessage);
} catch (InterruptedException e) {
e.printStackTrace();
}
return false;
}
public synchronized boolean isMessageQueueEmpty() {
return pocsagMessagesQueue.isEmpty();
}
private synchronized PocsagMessage takeMessageQueue() throws InterruptedException {
return pocsagMessagesQueue.take();
}
private boolean processPocsagMessage(PocsagMessage pocsagMessage) {
NodeServices nodeServices = new NodeServices();
NodeRestConsumer nodeRestConsumer = new NodeRestConsumer();
MqttService mqttService = new MqttService();
if (Config.commUseMqtt) {
mqttService.sendPocsagMessageToNode(pocsagMessage);
}
if (Config.commUseRest) {
List<Node> list = nodeServices.findAll();
for (Node node : list) {
if (node.getState() == Node.NodeState.ACTIVE && node.getProtocol() == Protocol.REST)
nodeRestConsumer.sendPocsagMessageToNode(pocsagMessage, node);
}
}
return false;
}
}