Package org.codehaus.activemq.transport.ember

Source Code of org.codehaus.activemq.transport.ember.EmberTransportServerChannel

/**
*
* Copyright 2004 Protique Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**/
package org.codehaus.activemq.transport.ember;

import EDU.oswego.cs.dl.util.concurrent.SynchronizedBoolean;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.activemq.message.WireFormat;
import org.codehaus.activemq.transport.TransportServerChannelSupport;
import org.codehaus.activemq.util.JMSExceptionHelper;
import pyrasun.eio.EIOGlobalContext;
import pyrasun.eio.services.EmberServiceController;
import pyrasun.eio.services.EmberServiceException;
import pyrasun.eio.services.bytearray.ByteArrayServerClient;
import pyrasun.eio.services.bytearray.ByteArrayServerClientListener;
import pyrasun.eio.services.bytearray.ByteArrayServerListener;

import javax.jms.JMSException;
import java.net.URI;

/**
* An EmberIO (using NIO) implementation of TransportServerChannel
*
* @version $Revision: 1.14 $
*/
public class EmberTransportServerChannel extends TransportServerChannelSupport implements ByteArrayServerListener, ByteArrayServerClientListener {

    private static final Log log = LogFactory.getLog(EmberTransportServerChannel.class);

    private WireFormat wireFormat;
    private EIOGlobalContext context;
    private EmberServiceController controller;
    private SynchronizedBoolean closed;
    private SynchronizedBoolean started;

    public EmberTransportServerChannel(WireFormat wireFormat, URI bindAddr, EIOGlobalContext context, EmberServiceController controller) {
        super(bindAddr);
        this.wireFormat = wireFormat;
        this.context = context;
        this.controller = controller;
        closed = new SynchronizedBoolean(false);
        started = new SynchronizedBoolean(false);
    }

    /**
     * start listeneing for events
     *
     * @throws JMSException if an error occurs
     */
    public void start() throws JMSException {
        super.start();
        if (started.commit(false, true)) {
            log.info("EmberTransportServerChannel at: " + getUrl());
            try {
                context.start();
                controller.startAll();
            }
            catch (EmberServiceException e) {
                JMSException jmsEx = new JMSException("Could not start EmberIOController: " + e);
                jmsEx.setLinkedException(e);
                throw jmsEx;
            }
        }
    }

    /**
     * close the ServerChannel
     */
    public void stop() throws JMSException {
        if (closed.commit(false, true)) {
            try {
                controller.stopAll();
                context.stop();
            }
            catch (EmberServiceException e) {
                throw JMSExceptionHelper.newJMSException("Failed to stop: " + e, e);
            }
        }
    }

    /**
     * @return pretty print of this
     */
    public String toString() {
        return "EmberTransportServerChannel@" + getUrl();
    }

    protected void handleException(ByteArrayServerClient client, JMSException e) {
        log.error("Could not create new TransportChannel for client: " + client, e);
    }

    public void newClient(ByteArrayServerClient client) {
        log.trace("New client received!");

        addClient(new EmberTransportChannel(wireFormat, null, null, client));
    }

    public void clientClosed(ByteArrayServerClient client) {
        log.info("Client has disconnected: " + client);
        /** TODO implement client closing! */
        // listener.removeClient(channel);
    }

    public void newMessage(ByteArrayServerClient byteArrayServerClient, Object msg) {
        log.warn("New message received!: " + msg);
    }

}
TOP

Related Classes of org.codehaus.activemq.transport.ember.EmberTransportServerChannel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.