package cz.cuni.mff.d3s.been.mq;
/**
* TCP-based message queue
*
* @author Martin Sixta
*/
public class TcpMessageQueue implements IMessageQueue<String> {
/**
* The context used to create sockets.
*/
private final ZMQContext context;
/**
* The singleton receiver.
*/
private final TcpMessageReceiver receiver;
/**
* Creates a tcp-based queue listening on a host and random port
*
* @param host Host to listen on
*/
public TcpMessageQueue(String host) {
this.context = Context.getReference();
this.receiver = new TcpMessageReceiver(context, host);
}
@Override
public TcpMessageReceiver getReceiver() throws MessagingException {
if (!receiver.isConnected()) {
receiver.bind();
}
return receiver;
}
@Override
public IMessageSender<String> createSender() throws MessagingException {
TcpMessageSender sender = getReceiver().createSender();
sender.connect();
return sender;
}
@Override
public void terminate() throws MessagingException {
receiver.close();
context.term();
}
}