8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package java.net.http;
27
28 import java.nio.ByteBuffer;
29 import java.util.function.Consumer;
30
31 /**
32 * Implemented by classes that offer an asynchronous interface.
33 *
34 * PlainHttpConnection, AsyncSSLConnection AsyncSSLDelegate.
35 *
36 * setAsyncCallbacks() is called to set the callback for reading
37 * and error notification. Reads all happen on the selector thread, which
38 * must not block.
39 *
40 * Writing uses the same write() methods as used in blocking mode.
41 * Queues are employed on the writing side to buffer data while it is waiting
42 * to be sent. This strategy relies on HTTP/2 protocol flow control to stop
43 * outgoing queue from continually growing. Writes can be initiated by the
44 * calling thread, but if socket becomes full then the queue is emptied by
45 * the selector thread
46 *
47 */
50 /**
51 * Enables asynchronous sending and receiving mode. The given async
52 * receiver will receive all incoming data. asyncInput() will be called
53 * to trigger reads. asyncOutput() will be called to drive writes.
54 *
55 * The errorReceiver callback must be called when any fatal exception
56 * occurs. Connection is assumed to be closed afterwards.
57 *
58 * @param asyncReceiver
59 * @param errorReceiver
60 */
61 void setAsyncCallbacks(
62 Consumer<ByteBuffer> asyncReceiver,
63 Consumer<Throwable> errorReceiver);
64
65 /**
66 * Does whatever is required to start reading. Usually registers
67 * an event with the selector thread.
68 */
69 void startReading();
70 }
|
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package java.net.http;
27
28 import java.io.IOException;
29 import java.nio.ByteBuffer;
30 import java.util.function.Consumer;
31
32 /**
33 * Implemented by classes that offer an asynchronous interface.
34 *
35 * PlainHttpConnection, AsyncSSLConnection AsyncSSLDelegate.
36 *
37 * setAsyncCallbacks() is called to set the callback for reading
38 * and error notification. Reads all happen on the selector thread, which
39 * must not block.
40 *
41 * Writing uses the same write() methods as used in blocking mode.
42 * Queues are employed on the writing side to buffer data while it is waiting
43 * to be sent. This strategy relies on HTTP/2 protocol flow control to stop
44 * outgoing queue from continually growing. Writes can be initiated by the
45 * calling thread, but if socket becomes full then the queue is emptied by
46 * the selector thread
47 *
48 */
51 /**
52 * Enables asynchronous sending and receiving mode. The given async
53 * receiver will receive all incoming data. asyncInput() will be called
54 * to trigger reads. asyncOutput() will be called to drive writes.
55 *
56 * The errorReceiver callback must be called when any fatal exception
57 * occurs. Connection is assumed to be closed afterwards.
58 *
59 * @param asyncReceiver
60 * @param errorReceiver
61 */
62 void setAsyncCallbacks(
63 Consumer<ByteBuffer> asyncReceiver,
64 Consumer<Throwable> errorReceiver);
65
66 /**
67 * Does whatever is required to start reading. Usually registers
68 * an event with the selector thread.
69 */
70 void startReading();
71
72 /**
73 * in async mode put buffers into end of send queue. Should be followed by subsequent flushAsync invocation.
74 * That allows multiple threads to put buffers into queue while some thread is writing.
75 */
76 void writeAsync(ByteBuffer[] buffers) throws IOException;
77
78 /**
79 * in async mode may put buffers into beginning of send queue, that break packet sequence and write buffers before
80 * other buffers in queue.
81 * Should be followed by subsequent flushAsync invocation.
82 * That allows multiple threads to put buffers into queue while some thread is writing.
83 */
84 void writeAsyncUnordered(ByteBuffer[] buffers) throws IOException;
85
86
87 /**
88 * should be called after any writeAsync/writeAsyncUnordered invocation.
89 * If there is a race to flushAsync from several threads one thread (race winner) capture flush operation and write the whole
90 * queue content. Other threads (race losers) exits from the method (not blocking) and continue execution.
91 */
92 void flushAsync();
93
94
95 }
|