use of com.swiftmq.amqp.v100.client.po.POOpen 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.amqp.v100.client.po.POOpen in project swiftmq-client by iitsoftware.
the class ConnectionDispatcher method visit.
public void visit(POOpen po) {
if (pTracer.isEnabled())
pTracer.trace(toString(), ", visit, po=" + po + " ...");
openPO = po;
try {
OpenFrame openFrame = new OpenFrame(0);
openFrame.setContainerId(new AMQPString(po.getContainerId()));
openFrame.setChannelMax(new AMQPUnsignedShort(po.getMaxChannel()));
if (myConnection.getOpenHostname() == null)
openFrame.setHostname(new AMQPString(remoteHostname));
else
openFrame.setHostname(new AMQPString(myConnection.getOpenHostname()));
maxLocalFrameSize = po.getMaxFrameSize() > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) po.getMaxFrameSize();
openFrame.setMaxFrameSize(new AMQPUnsignedInt(maxLocalFrameSize));
myIdleTimeout = po.getIdleTimeout();
if (myIdleTimeout > 0) {
openFrame.setIdleTimeOut(new Milliseconds(myIdleTimeout));
idleTimeoutDelay = po.getIdleTimeout() / 2;
idleTimeoutChecker = new TimerListener() {
public void performTimeAction(TimerEvent evt) {
dispatch(new POCheckIdleTimeout(null));
}
};
TimerRegistry.Singleton().addTimerListener(idleTimeoutDelay, idleTimeoutChecker);
}
outboundHandler.send(openFrame);
} catch (Exception e) {
e.printStackTrace();
}
checkBothSidesOpen();
if (pTracer.isEnabled())
pTracer.trace(toString(), ", visit, po=" + po + " done");
}
Aggregations