use of com.swiftmq.net.protocol.ProtocolOutputHandler 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;
}
Aggregations