package cgl.iotcloud.examples.chat;
import cgl.iotcloud.core.*;
import cgl.iotcloud.core.client.SensorClient;
import cgl.iotcloud.core.msg.MessageContext;
import cgl.iotcloud.core.sensorsite.SensorDeployDescriptor;
import cgl.iotcloud.core.sensorsite.SiteContext;
import cgl.iotcloud.core.transport.Channel;
import cgl.iotcloud.core.transport.Direction;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.BlockingQueue;
public class KafkaSensor extends AbstractSensor {
private static Logger LOG = LoggerFactory.getLogger(KafkaSensor.class);
@Override
public Configurator getConfigurator(Map conf) {
return new KafkaConfigurator();
}
@Override
public void open(SensorContext context) {
final Channel sendChannel = context.getChannel("kafka", "sender");
final Channel receiveChannel = context.getChannel("kafka", "receiver");
startSend(sendChannel, new MessageSender() {
@Override
public boolean loop(BlockingQueue<byte []> queue) {
try {
queue.put("Hello".getBytes());
} catch (InterruptedException e) {
e.printStackTrace();
}
return false;
}
}, 100);
startListen(receiveChannel, new MessageReceiver() {
@Override
public void onMessage(Object message) {
if (message instanceof MessageContext) {
System.out.println(new String(((MessageContext) message).getBody()));
}
}
});
}
@SuppressWarnings("unchecked")
private class KafkaConfigurator extends AbstractConfigurator {
@Override
public SensorContext configure(SiteContext siteContext, Map conf) {
SensorContext context = new SensorContext("KafkaChat");
Map sendProps = new HashMap();
sendProps.put("topic", "test");
sendProps.put("serializerClass", "kafka.serializer.DefaultEncoder");
// sendProps.put("routingKey", "test1");
// sendProps.put("queueName", "test");
Channel sendChannel = createChannel("sender", sendProps, Direction.OUT, 1024);
sendChannel.setGrouped(true);
Map receiveProps = new HashMap();
receiveProps.put("topic", "test");
receiveProps.put("partition", 0);
Channel receiveChannel = createChannel("receiver", receiveProps, Direction.IN, 1024);
receiveChannel.setGrouped(true);
context.addChannel("kafka", sendChannel);
context.addChannel("kafka", receiveChannel);
return context;
}
}
@Override
public void close() {
}
@Override
public void activate() {
}
@Override
public void deactivate() {
}
public static void main(String[] args) throws TTransportException {
// read the configuration file
Map conf = Utils.readConfig();
SensorClient client;
client = new SensorClient(conf);
List<String> sites = new ArrayList<String>();
sites.add("local");
SensorDeployDescriptor deployDescriptor = new SensorDeployDescriptor("iotcloud-examples-1.0-SNAPSHOT.jar", "cgl.iotcloud.examples.chat.KafkaSensor");
deployDescriptor.addDeploySites(sites);
client.deploySensor(deployDescriptor);
}
}