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

org.xnio.XnioIoFactory Maven / Gradle / Ivy

There is a newer version: 62
Show newest version
package org.xnio;

import java.io.IOException;
import java.net.SocketAddress;
import org.xnio.channels.BoundChannel;
import org.xnio.channels.StreamChannel;
import org.xnio.channels.StreamSinkChannel;
import org.xnio.channels.StreamSourceChannel;

/**
 * An XNIO I/O factory which can be used to create channels.
 *
 * @author David M. Lloyd
 */
public interface XnioIoFactory {

    /**
     * Connect to a remote stream server.  The protocol family is determined by the type of the socket address given.
     * If an open listener is used, the channel should not be accessed via the returned
     * {@code IoFuture}, and vice-versa.
     *
     * @param destination the destination address
     * @param openListener the listener which will be notified when the channel is open, or {@code null} for none
     * @param optionMap the option map
     * @return the future result of this operation
     */
    IoFuture openStreamConnection(SocketAddress destination, ChannelListener openListener, OptionMap optionMap);

    /**
     * Connect to a remote stream server.  The protocol family is determined by the type of the socket address given.
     * If an open listener is used, the channel should not be accessed via the returned
     * {@code IoFuture}, and vice-versa.
     *
     * @param destination the destination address
     * @param openListener the listener which will be notified when the channel is open, or {@code null} for none
     * @param bindListener the listener which will be notified when the channel is bound, or {@code null} for none
     * @param optionMap the option map
     * @return the future result of this operation
     */
    IoFuture openStreamConnection(SocketAddress destination, ChannelListener openListener, ChannelListener bindListener, OptionMap optionMap);

    /**
     * Connect to a remote stream server.  The protocol family is determined by the type of the socket addresses given
     * (which must match).  If an open listener is used, the channel should not be accessed via the returned
     * {@code IoFuture}, and vice-versa.
     *
     * @param bindAddress the local address to bind to
     * @param destination the destination address
     * @param openListener the listener which will be notified when the channel is open, or {@code null} for none
     * @param bindListener the listener which will be notified when the channel is bound, or {@code null} for none
     * @param optionMap the option map
     * @return the future result of this operation
     */
    IoFuture openStreamConnection(SocketAddress bindAddress, SocketAddress destination, ChannelListener openListener, ChannelListener bindListener, OptionMap optionMap);

    /**
     * Accept a stream connection at a destination address.  If a wildcard address is specified, then a destination address
     * is chosen in a manner specific to the OS and/or channel type.
     *
     * @param destination the destination (bind) address
     * @param openListener the listener which will be notified when the channel is open, or {@code null} for none
     * @param bindListener the listener which will be notified when the acceptor is bound, or {@code null} for none
     * @param optionMap the option map
     * @return the future connection
     */
    IoFuture acceptStreamConnection(SocketAddress destination, ChannelListener openListener, ChannelListener bindListener, OptionMap optionMap);

    /**
     * Connect to a remote message server.  The protocol family is determined by the type of the socket address given.
     * If an open listener is used, the channel should not be accessed via the returned
     * {@code IoFuture}, and vice-versa.
     *
     * @param destination the destination address
     * @param openListener the listener which will be notified when the channel is open, or {@code null} for none
     * @param optionMap the option map
     * @return the future result of this operation
     */
    IoFuture openMessageConnection(SocketAddress destination, ChannelListener openListener, OptionMap optionMap);

    /**
     * Accept a message connection at a destination address.  If a wildcard address is specified, then a destination address
     * is chosen in a manner specific to the OS and/or channel type.  If an open listener is used, the channel should
     * not be accessed via the returned {@code IoFuture}, and vice-versa.
     *
     * @param destination the destination (bind) address
     * @param openListener the listener which will be notified when the channel is open, or {@code null} for none
     * @param bindListener the listener which will be notified when the acceptor is bound, or {@code null} for none
     * @param optionMap the option map
     * @return the future connection
     */
    IoFuture acceptMessageConnection(SocketAddress destination, ChannelListener openListener, ChannelListener bindListener, OptionMap optionMap);

    /**
     * Create a two-way stream pipe.
     *
     * @return the created pipe
     * @throws java.io.IOException if the pipe could not be created
     */
    ChannelPipe createFullDuplexPipe() throws IOException;

    /**
     * Create a two-way stream pipe.
     *
     * @return the created pipe
     * @throws java.io.IOException if the pipe could not be created
     */
    ChannelPipe createFullDuplexPipeConnection() throws IOException;

    /**
     * Create a one-way stream pipe.
     *
     * @return the created pipe
     * @throws java.io.IOException if the pipe could not be created
     */
    ChannelPipe createHalfDuplexPipe() throws IOException;

    /**
     * Create a two-way stream pipe.  The left side will be associated with this factory, and the right
     * side will be associated with the given peer.
     *
     * @param peer the peer to use for controlling the remote (right) side
     * @return the created pipe
     * @throws java.io.IOException if the pipe could not be created
     */
    ChannelPipe createFullDuplexPipeConnection(XnioIoFactory peer) throws IOException;

    /**
     * Create a one-way stream pipe.  The left (source) side will be associated with this factory, and the right
     * (sink) side will be associated with the given peer.
     *
     * @param peer the peer to use for the sink (right) side
     * @return the created pipe
     * @throws java.io.IOException if the pipe could not be created
     */
    ChannelPipe createHalfDuplexPipe(XnioIoFactory peer) throws IOException;
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy