Search in sources :

Example 1 with POObject

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());
    }
}
Also used : POObject(com.swiftmq.tools.pipeline.POObject) Semaphore(com.swiftmq.tools.concurrent.Semaphore)

Example 2 with POObject

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;
}
Also used : ProtocolInputHandler(com.swiftmq.net.protocol.ProtocolInputHandler) ProtocolOutputHandler(com.swiftmq.net.protocol.ProtocolOutputHandler) POProtocolRequest(com.swiftmq.amqp.v100.client.po.POProtocolRequest) SocketFactory2(com.swiftmq.net.SocketFactory2) DataStreamOutputStream(com.swiftmq.tools.util.DataStreamOutputStream) RawOutputHandler(com.swiftmq.net.protocol.raw.RawOutputHandler) IOException(java.io.IOException) Semaphore(com.swiftmq.tools.concurrent.Semaphore) POAuthenticate(com.swiftmq.amqp.v100.client.po.POAuthenticate) POOpen(com.swiftmq.amqp.v100.client.po.POOpen) BlockingConnection(com.swiftmq.net.client.BlockingConnection) POObject(com.swiftmq.tools.pipeline.POObject)

Example 3 with POObject

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();
        }
    }
}
Also used : POObject(com.swiftmq.tools.pipeline.POObject) AddressString(com.swiftmq.amqp.v100.generated.messaging.message_format.AddressString)

Aggregations

POObject (com.swiftmq.tools.pipeline.POObject)3 Semaphore (com.swiftmq.tools.concurrent.Semaphore)2 POAuthenticate (com.swiftmq.amqp.v100.client.po.POAuthenticate)1 POOpen (com.swiftmq.amqp.v100.client.po.POOpen)1 POProtocolRequest (com.swiftmq.amqp.v100.client.po.POProtocolRequest)1 AddressString (com.swiftmq.amqp.v100.generated.messaging.message_format.AddressString)1 SocketFactory2 (com.swiftmq.net.SocketFactory2)1 BlockingConnection (com.swiftmq.net.client.BlockingConnection)1 ProtocolInputHandler (com.swiftmq.net.protocol.ProtocolInputHandler)1 ProtocolOutputHandler (com.swiftmq.net.protocol.ProtocolOutputHandler)1 RawOutputHandler (com.swiftmq.net.protocol.raw.RawOutputHandler)1 DataStreamOutputStream (com.swiftmq.tools.util.DataStreamOutputStream)1 IOException (java.io.IOException)1