All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.qpid.proton.engine.Event Maven / Gradle / Ivy

/*
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.apache.qpid.proton.engine;

import org.apache.qpid.proton.reactor.Reactor;
import org.apache.qpid.proton.reactor.Selectable;
import org.apache.qpid.proton.reactor.Task;


/**
 * Event
 *
 */

public interface Event extends Extendable
{
    /**
     * Event types built into the library.
     */
    public enum Type implements EventType {
        REACTOR_INIT,
        REACTOR_QUIESCED,
        REACTOR_FINAL,

        TIMER_TASK,

        CONNECTION_INIT,
        CONNECTION_BOUND,
        CONNECTION_UNBOUND,
        CONNECTION_LOCAL_OPEN,
        CONNECTION_REMOTE_OPEN,
        CONNECTION_LOCAL_CLOSE,
        CONNECTION_REMOTE_CLOSE,
        CONNECTION_FINAL,

        SESSION_INIT,
        SESSION_LOCAL_OPEN,
        SESSION_REMOTE_OPEN,
        SESSION_LOCAL_CLOSE,
        SESSION_REMOTE_CLOSE,
        SESSION_FINAL,

        LINK_INIT,
        LINK_LOCAL_OPEN,
        LINK_REMOTE_OPEN,
        LINK_LOCAL_DETACH,
        LINK_REMOTE_DETACH,
        LINK_LOCAL_CLOSE,
        LINK_REMOTE_CLOSE,
        LINK_FLOW,
        LINK_FINAL,

        DELIVERY,

        TRANSPORT,
        TRANSPORT_ERROR,
        TRANSPORT_HEAD_CLOSED,
        TRANSPORT_TAIL_CLOSED,
        TRANSPORT_CLOSED,

        SELECTABLE_INIT,
        SELECTABLE_UPDATED,
        SELECTABLE_READABLE,
        SELECTABLE_WRITABLE,
        SELECTABLE_EXPIRED,
        SELECTABLE_ERROR,
        SELECTABLE_FINAL,
        
        /**
         * This value must never be used to generate an event, it's only used as
         * a guard when casting custom EventTypes to core {@link Type} via
         * {@link Event#getType()}.
         */
        NON_CORE_EVENT {
            @Override
            public boolean isValid() { return false; }
        };

        @Override
        public boolean isValid() {
            return true;
        }
    }

    /**
     * @return type of the event. The event type can be defined outside of the
     *         proton library.
     */
    EventType getEventType();

    /**
     * A concrete event type of core events.
     * 
     * @return type of the event for core events. For events generated by
     *         extensions a {@link Type#NON_CORE_EVENT} will be returned
     */
    Type getType();

    Object getContext();

    /**
     * The {@link Handler} at the root of the handler tree.
     * 

* Set by the {@link Reactor} before dispatching the event. *

* @see #redispatch(EventType, Handler) * @return The root handler */ Handler getRootHandler(); void dispatch(Handler handler) throws HandlerException; /** * Synchronously redispatch the current event as a new {@link EventType} on the provided handler and it's children. *

* Note: the redispatch() will complete before children of the current handler have had the current event dispatched, see {@link #delegate()}. * * * @param as_type Type of event to dispatch * @param handler The handler where to start the dispatch. Use {@link #getRootHandler()} to redispatch the new event to all handlers in the tree. * @throws HandlerException A wrapper exception of any unhandled exception thrown by handler */ void redispatch(EventType as_type, Handler handler) throws HandlerException; /** * dispatch the event to all children of the handler. A handler can call * this method explicitly to be able to do more processing after all child * handlers have already processed the event. If handler does not invoke * this method it is invoked implicitly by {@link #dispatch(Handler)} * * @throws HandlerException */ void delegate() throws HandlerException; Connection getConnection(); Session getSession(); Link getLink(); Sender getSender(); Receiver getReceiver(); Delivery getDelivery(); Transport getTransport(); Reactor getReactor(); Selectable getSelectable(); Task getTask(); Event copy(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy