001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: *
019: */
020: package org.apache.mina.common;
021:
022: import java.net.SocketAddress;
023:
024: /**
025: * Connects to endpoint, communicates with the server, and fires events to
026: * {@link IoHandler}s.
027: * <p>
028: * Please refer to
029: * <a href="../../../../../xref-examples/org/apache/mina/examples/netcat/Main.html">NetCat</a>
030: * example.
031: * <p>
032: * You should connect to the desired socket address to start communication,
033: * and then events for incoming connections will be sent to the specified
034: * default {@link IoHandler}.
035: * <p>
036: * Threads connect to endpoint start automatically when
037: * {@link #connect(SocketAddress)} is invoked, and stop when all
038: * connection attempts are finished.
039: *
040: * @author The Apache MINA Project (dev@mina.apache.org)
041: * @version $Rev: 607163 $, $Date: 2007-12-27 20:20:07 -0700 (Thu, 27 Dec 2007) $
042: */
043: public interface IoConnector extends IoService {
044: /**
045: * Returns the connect timeout in seconds. The default value is 1 minute.
046: */
047: int getConnectTimeout();
048:
049: /**
050: * Returns the connect timeout in milliseconds. The default value is 1 minute.
051: */
052: long getConnectTimeoutMillis();
053:
054: /**
055: * Sets the connect timeout in seconds. The default value is 1 minute.
056: */
057: void setConnectTimeout(int connectTimeout);
058:
059: /**
060: * Returns the default remote address to connect to when no argument
061: * is specified in {@link #connect()} method.
062: */
063: SocketAddress getDefaultRemoteAddress();
064:
065: /**
066: * Sets the default remote address to connect to when no argument is
067: * specified in {@link #connect()} method.
068: */
069: void setDefaultRemoteAddress(SocketAddress defaultRemoteAddress);
070:
071: /**
072: * Connects to the {@link #setDefaultRemoteAddress(SocketAddress) default remote address}.
073: *
074: * @throws IllegalStateException if no default remoted address is set.
075: */
076: ConnectFuture connect();
077:
078: /**
079: * Connects to the {@link #setDefaultRemoteAddress(SocketAddress) default
080: * remote address} and invokes the <code>ioSessionInitializer</code> when
081: * the IoSession is created but before {@link IoHandler#sessionCreated(IoSession)}
082: * is invoked. There is <em>no</em> guarantee that the <code>ioSessionInitializer</code>
083: * will be invoked before this method returns.
084: *
085: * @param sessionInitializer the callback to invoke when the {@link IoSession} object is created
086: *
087: * @throws IllegalStateException if no default remote address is set.
088: */
089: ConnectFuture connect(
090: IoSessionInitializer<? extends ConnectFuture> sessionInitializer);
091:
092: /**
093: * Connects to the specified remote address.
094: *
095: * @return the {@link ConnectFuture} instance which is completed when the
096: * connection attempt initiated by this call succeeds or fails.
097: */
098: ConnectFuture connect(SocketAddress remoteAddress);
099:
100: /**
101: * Connects to the specified remote address and invokes
102: * the <code>ioSessionInitializer</code> when the IoSession is created but before
103: * {@link IoHandler#sessionCreated(IoSession)} is invoked. There is <em>no</em>
104: * guarantee that the <code>ioSessionInitializer</code> will be invoked before
105: * this method returns.
106: *
107: * @param remoteAddress the remote address to connect to
108: * @param sessionInitializer the callback to invoke when the {@link IoSession} object is created
109: *
110: * @return the {@link ConnectFuture} instance which is completed when the
111: * connection attempt initiated by this call succeeds or fails.
112: */
113: ConnectFuture connect(
114: SocketAddress remoteAddress,
115: IoSessionInitializer<? extends ConnectFuture> sessionInitializer);
116:
117: /**
118: * Connects to the specified remote address binding to the specified local address.
119: *
120: * @return the {@link ConnectFuture} instance which is completed when the
121: * connection attempt initiated by this call succeeds or fails.
122: */
123: ConnectFuture connect(SocketAddress remoteAddress,
124: SocketAddress localAddress);
125:
126: /**
127: * Connects to the specified remote address binding to the specified local
128: * address and and invokes the <code>ioSessionInitializer</code> when the
129: * IoSession is created but before {@link IoHandler#sessionCreated(IoSession)}
130: * is invoked. There is <em>no</em> guarantee that the <code>ioSessionInitializer</code>
131: * will be invoked before this method returns.
132: *
133: * @param remoteAddress the remote address to connect to
134: * @param localAddress the local interface to bind to
135: * @param sessionInitializer the callback to invoke when the {@link IoSession} object is created
136: *
137: * @return the {@link ConnectFuture} instance which is completed when the
138: * connection attempt initiated by this call succeeds or fails.
139: */
140: ConnectFuture connect(
141: SocketAddress remoteAddress,
142: SocketAddress localAddress,
143: IoSessionInitializer<? extends ConnectFuture> sessionInitializer);
144: }
|