package cz.cuni.mff.d3s.been.mq;
/**
*
* Message queue for a task to communicate with it's Host Runtime.
*
* WARNING: it can only send messages, not receive! {@link #getReceiver()} will
* throw runtime exception. This is for tasks needs!
*
* @author Martin Sixta
*/
final class TaskMessageQueue implements IMessageQueue<String> {
private ZMQContext context;
private final String SINK_CONN;
private final String SINK_CONN_FORMAT = "tcp://%s:%d";
TaskMessageQueue(String url) {
SINK_CONN = url;
context = Context.getReference();
}
TaskMessageQueue(String host, int port) {
context = Context.getReference();
SINK_CONN = String.format(SINK_CONN_FORMAT, host, port);
}
@Override
public IMessageReceiver<String> getReceiver() throws MessagingException {
throw new UnsupportedOperationException("Cannot receive messages!");
}
@Override
public IMessageSender<String> createSender() throws MessagingException {
TaskMessageSender sender = new TaskMessageSender(context, SINK_CONN);
sender.connect();
return sender;
}
@Override
public void terminate() throws MessagingException {
context.term();
}
}