org.xnio.XnioIoFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xnio-api Show documentation
Show all versions of xnio-api Show documentation
The API JAR of the XNIO project
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 super StreamConnection> 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 super StreamConnection> openListener, ChannelListener super BoundChannel> 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 super StreamConnection> openListener, ChannelListener super BoundChannel> 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 super StreamConnection> openListener, ChannelListener super BoundChannel> 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 super MessageConnection> 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 super MessageConnection> openListener, ChannelListener super BoundChannel> 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;
}