/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.transport.jms.common;
import java.net.ProtocolException;
import javax.jms.JMSException;
import javax.jms.Session;
import de.rcenvironment.core.communication.transport.spi.MessageChannel;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Manages the (temporary) queues created as part of a JMS {@link MessageChannel}.
*
* @author Robert Mischke
*/
public class RequestResponseQueuesManager {
private String c2bRequestQueue;
private String c2bResponseQueue;
private String b2cRequestQueue;
private String b2cResponseQueue;
/**
* Creates two temporary queues for requests and responses consumed by the client.
*
* @param initialSession the client's initial JMS session
* @return the information string to send to the server
* @throws JMSException on errors creating the queues
*/
public String initClientSide(Session initialSession) throws JMSException {
c2bResponseQueue = initialSession.createTemporaryQueue().getQueueName();
b2cRequestQueue = initialSession.createTemporaryQueue().getQueueName();
return StringUtils.escapeAndConcat(c2bResponseQueue, b2cRequestQueue);
}
/**
* Creates two temporary queues for requests and responses consumed by the server.
*
* @param serverSession the server's JMS session
* @param clientInfo the information string sent by the client
* @return the information string to send back to the client
* @throws JMSException on errors creating the queues
* @throws ProtocolException on unexpected client data
*/
public String initServerSide(Session serverSession, String clientInfo) throws JMSException, ProtocolException {
if (clientInfo == null) {
throw new ProtocolException("The client side did not send the expected temporary queue information");
}
String[] clientTempQueues = StringUtils.splitAndUnescape(clientInfo);
c2bResponseQueue = clientTempQueues[0];
b2cRequestQueue = clientTempQueues[1];
c2bRequestQueue = JmsProtocolConstants.QUEUE_NAME_C2B_REQUEST_INBOX; // serverSession.createTemporaryQueue().getQueueName();
b2cResponseQueue = serverSession.createTemporaryQueue().getQueueName();
return StringUtils.escapeAndConcat(c2bRequestQueue, b2cResponseQueue);
}
/**
* Registers the server's temporary queues on the client side.
*
* @param serverInfo the information string sent by the server
* @throws ProtocolException on unexpected client data
*/
public void finishClientSide(String serverInfo) throws ProtocolException {
if (serverInfo == null) {
throw new ProtocolException("The server side did not send the expected temporary queue information");
}
String[] serverTempQueues = StringUtils.splitAndUnescape(serverInfo);
c2bRequestQueue = serverTempQueues[0];
b2cResponseQueue = serverTempQueues[1];
}
public String getC2BRequestQueue() {
return c2bRequestQueue;
}
public String getC2BResponseQueue() {
return c2bResponseQueue;
}
public String getB2CRequestQueue() {
return b2cRequestQueue;
}
public String getB2CResponseQueue() {
return b2cResponseQueue;
}
}