use of com.swiftmq.tools.pipeline.POObject in project swiftmq-client by iitsoftware.
the class Session method finishHandshake.
protected void finishHandshake() throws SessionHandshakeException {
Semaphore sem = new Semaphore();
POObject po = new POBegin(sem);
sessionDispatcher.dispatch(po);
sem.waitHere();
sem.reset();
if (!po.isSuccess()) {
cancel();
throw new SessionHandshakeException(po.getException());
}
}
use of com.swiftmq.tools.pipeline.POObject in project swiftmq-client by iitsoftware.
the class Connection method connect.
/**
* Performs the actual connect to the remote host, negotiates the protocol and authenticates the user
*
* @throws IOException if an IOExcption occurs
* @throws UnsupportedProtocolVersionException if the AMQP/SASL protocol version is not supported by the remote host
* @throws AuthenticationException if the user cannot be authenticated
* @throws ConnectionClosedException if the connection was closed
*/
public void connect() throws IOException, UnsupportedProtocolVersionException, AuthenticationException, ConnectionClosedException {
verifyState();
connectionDispatcher = new ConnectionDispatcher(ctx, hostname);
if (socketFactory instanceof SocketFactory2)
((SocketFactory2) socketFactory).setReceiveBufferSize(inputBufferSize);
networkConnection = new BlockingConnection(socketFactory.createSocket(hostname, port), connectionDispatcher, this) {
protected ProtocolOutputHandler createOutputHandler(int outputBufferSize, int outputExtendSize) {
return new RawOutputHandler(outputBufferSize, outputExtendSize) {
public void flush() throws IOException {
super.flush();
invokeOutputListener();
}
};
}
protected ProtocolInputHandler createInputHandler() {
return connectionDispatcher.getProtocolHandler();
}
};
connectionDispatcher.setMyConnection(this);
networkConnection.start();
dos = new DataStreamOutputStream(networkConnection.getOutputStream());
connectionPool = ctx.getConnectionPool();
connectionTask = new ConnectionTask();
connectionQueue = new ConnectionQueue();
connectionDispatcher.setOutboundHandler(connectionQueue);
connectionQueue.startQueue();
// SASL
if (doAuth) {
connectionDispatcher.setSaslActive(true);
Semaphore sem = new Semaphore();
POObject po = new POProtocolRequest(sem, Util.SASL_INIT);
connectionDispatcher.dispatch(po);
sem.waitHere();
sem.reset();
if (!po.isSuccess()) {
cancel();
throw new UnsupportedProtocolVersionException(po.getException());
}
po = new POAuthenticate(sem, mechanism, userName, password);
connectionDispatcher.dispatch(po);
sem.waitHere();
sem.reset();
if (!po.isSuccess()) {
cancel();
throw new AuthenticationException(po.getException());
}
}
// AMQP
Semaphore sem = new Semaphore();
POObject po = new POProtocolRequest(sem, Util.AMQP_INIT);
connectionDispatcher.dispatch(po);
sem.waitHere();
sem.reset();
if (!po.isSuccess()) {
cancel();
throw new UnsupportedProtocolVersionException(po.getException());
}
// Open
po = new POOpen(sem, containerId, maxFrameSize, 255, idleTimeout);
connectionDispatcher.dispatch(po);
sem.waitHere();
sem.reset();
if (!po.isSuccess()) {
cancel();
throw new IOException(po.getException());
}
connected = true;
}
use of com.swiftmq.tools.pipeline.POObject in project swiftmq-client by iitsoftware.
the class SessionDispatcher method notifyWaitingPOs.
private void notifyWaitingPOs(POObject[] po) {
String msg = "Session was asynchronously closed";
for (int i = 0; i < handles.size(); i++) {
Link link = (Link) handles.get(i);
if (link != null) {
if (link.getWaitingPO() != null && link.getWaitingPO().getSemaphore() != null) {
link.getWaitingPO().setSuccess(false);
link.getWaitingPO().setException(msg);
link.getWaitingPO().getSemaphore().notifySingleWaiter();
}
if (link.getWaitingClosePO() != null && link.getWaitingClosePO().getSemaphore() != null) {
link.getWaitingClosePO().setSuccess(false);
link.getWaitingClosePO().setException(msg);
link.getWaitingClosePO().getSemaphore().notifySingleWaiter();
}
}
}
for (Iterator iter = waitingPO.entrySet().iterator(); iter.hasNext(); ) {
POObject wpo = (POObject) ((Map.Entry) iter.next()).getValue();
if (wpo != null && wpo.getSemaphore() != null) {
wpo.setSuccess(false);
wpo.setException(msg);
wpo.getSemaphore().notifySingleWaiter();
}
}
for (int i = 0; i < po.length; i++) {
if (po[i] != null && po[i].getSemaphore() != null) {
po[i].setSuccess(false);
po[i].setException(msg);
po[i].getSemaphore().notifySingleWaiter();
}
}
}
Aggregations