1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.impl.bootstrap;
29
30 import java.io.IOException;
31 import java.net.SocketAddress;
32 import java.util.Set;
33 import java.util.concurrent.Future;
34
35 import org.apache.hc.core5.annotation.Internal;
36 import org.apache.hc.core5.concurrent.DefaultThreadFactory;
37 import org.apache.hc.core5.concurrent.FutureCallback;
38 import org.apache.hc.core5.function.Callback;
39 import org.apache.hc.core5.function.Decorator;
40 import org.apache.hc.core5.io.CloseMode;
41 import org.apache.hc.core5.reactor.ConnectionAcceptor;
42 import org.apache.hc.core5.reactor.ConnectionInitiator;
43 import org.apache.hc.core5.reactor.DefaultListeningIOReactor;
44 import org.apache.hc.core5.reactor.IOEventHandlerFactory;
45 import org.apache.hc.core5.reactor.IOReactorConfig;
46 import org.apache.hc.core5.reactor.IOReactorService;
47 import org.apache.hc.core5.reactor.IOReactorStatus;
48 import org.apache.hc.core5.reactor.IOSession;
49 import org.apache.hc.core5.reactor.IOSessionListener;
50 import org.apache.hc.core5.reactor.ListenerEndpoint;
51 import org.apache.hc.core5.util.TimeValue;
52
53
54
55
56 public class AsyncServer extends AbstractConnectionInitiatorBase implements IOReactorService, ConnectionAcceptor {
57
58 private final DefaultListeningIOReactor ioReactor;
59
60 @Internal
61 public AsyncServer(
62 final IOEventHandlerFactory eventHandlerFactory,
63 final IOReactorConfig ioReactorConfig,
64 final Decorator<IOSession> ioSessionDecorator,
65 final Callback<Exception> exceptionCallback,
66 final IOSessionListener sessionListener,
67 final Callback<IOSession> sessionShutdownCallback) {
68 this.ioReactor = new DefaultListeningIOReactor(
69 eventHandlerFactory,
70 ioReactorConfig,
71 new DefaultThreadFactory("server-dispatch", true),
72 new DefaultThreadFactory("server-listener", true),
73 ioSessionDecorator,
74 exceptionCallback,
75 sessionListener,
76 sessionShutdownCallback);
77 }
78
79 @Override
80 public void start() {
81 ioReactor.start();
82 }
83
84 @Override
85 ConnectionInitiator getIOReactor() {
86 return ioReactor;
87 }
88
89
90
91
92 @Override
93 public Future<ListenerEndpoint> listen(
94 final SocketAddress address, final Object attachment, final FutureCallback<ListenerEndpoint> callback) {
95 return ioReactor.listen(address, attachment, callback);
96 }
97
98 @Override
99 public Future<ListenerEndpoint> listen(final SocketAddress address, final FutureCallback<ListenerEndpoint> callback) {
100 return listen(address, null, callback);
101 }
102
103 public Future<ListenerEndpoint> listen(final SocketAddress address) {
104 return ioReactor.listen(address, null);
105 }
106
107 @Override
108 public void pause() throws IOException {
109 ioReactor.pause();
110 }
111
112 @Override
113 public void resume() throws IOException {
114 ioReactor.resume();
115 }
116
117 @Override
118 public Set<ListenerEndpoint> getEndpoints() {
119 return ioReactor.getEndpoints();
120 }
121
122 @Override
123 public IOReactorStatus getStatus() {
124 return ioReactor.getStatus();
125 }
126
127 @Override
128 public void initiateShutdown() {
129 ioReactor.initiateShutdown();
130 }
131
132 @Override
133 public void awaitShutdown(final TimeValue waitTime) throws InterruptedException {
134 ioReactor.awaitShutdown(waitTime);
135 }
136
137 @Override
138 public void close(final CloseMode closeMode) {
139 ioReactor.close(closeMode);
140 }
141
142 @Override
143 public void close() throws IOException {
144 ioReactor.close();
145 }
146
147 }