1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.transport.socket.nio;
21
22 import java.net.InetSocketAddress;
23 import java.net.SocketAddress;
24 import java.nio.channels.DatagramChannel;
25 import java.util.Collections;
26 import java.util.Iterator;
27 import java.util.concurrent.Executor;
28
29 import org.apache.mina.core.polling.AbstractPollingIoConnector;
30 import org.apache.mina.core.service.IoConnector;
31 import org.apache.mina.core.service.IoProcessor;
32 import org.apache.mina.core.service.TransportMetadata;
33 import org.apache.mina.transport.socket.DatagramConnector;
34 import org.apache.mina.transport.socket.DatagramSessionConfig;
35 import org.apache.mina.transport.socket.DefaultDatagramSessionConfig;
36
37
38
39
40
41
42
43 public final class NioDatagramConnector
44 extends AbstractPollingIoConnector<NioSession, DatagramChannel>
45 implements DatagramConnector {
46
47
48
49
50 public NioDatagramConnector() {
51 super(new DefaultDatagramSessionConfig(), NioProcessor.class);
52 }
53
54
55
56
57 public NioDatagramConnector(int processorCount) {
58 super(new DefaultDatagramSessionConfig(), NioProcessor.class, processorCount);
59 }
60
61
62
63
64 public NioDatagramConnector(IoProcessor<NioSession> processor) {
65 super(new DefaultDatagramSessionConfig(), processor);
66 }
67
68
69
70
71
72
73
74
75
76
77
78
79 public NioDatagramConnector(Class<? extends IoProcessor<NioSession>> processorClass,
80 int processorCount) {
81 super(new DefaultDatagramSessionConfig(), processorClass, processorCount);
82 }
83
84
85
86
87
88
89
90
91
92
93
94
95
96 public NioDatagramConnector(Class<? extends IoProcessor<NioSession>> processorClass) {
97 super(new DefaultDatagramSessionConfig(), processorClass);
98 }
99
100 public TransportMetadata getTransportMetadata() {
101 return NioDatagramSession.METADATA;
102 }
103
104 @Override
105 public DatagramSessionConfig getSessionConfig() {
106 return (DatagramSessionConfig) super.getSessionConfig();
107 }
108
109 @Override
110 public InetSocketAddress getDefaultRemoteAddress() {
111 return (InetSocketAddress) super.getDefaultRemoteAddress();
112 }
113
114 public void setDefaultRemoteAddress(InetSocketAddress defaultRemoteAddress) {
115 super.setDefaultRemoteAddress(defaultRemoteAddress);
116 }
117
118 @Override
119 protected void init() throws Exception {
120 }
121
122 @Override
123 protected DatagramChannel newHandle(SocketAddress localAddress)
124 throws Exception {
125 DatagramChannel ch = DatagramChannel.open();
126 if (localAddress != null) {
127 ch.socket().bind(localAddress);
128 }
129 return ch;
130 }
131
132 @Override
133 protected boolean connect(DatagramChannel handle,
134 SocketAddress remoteAddress) throws Exception {
135 handle.connect(remoteAddress);
136 return true;
137 }
138
139 @Override
140 protected NioSession newSession(IoProcessor<NioSession> processor,
141 DatagramChannel handle) {
142 NioSession session = new NioDatagramSession(this, handle, processor);
143 session.getConfig().setAll(getSessionConfig());
144 return session;
145 }
146
147 @Override
148 protected void close(DatagramChannel handle) throws Exception {
149 handle.disconnect();
150 handle.close();
151 }
152
153
154 @Override
155 @SuppressWarnings("unchecked")
156 protected Iterator<DatagramChannel> allHandles() {
157 return Collections.EMPTY_LIST.iterator();
158 }
159
160 @Override
161 protected ConnectionRequest getConnectionRequest(DatagramChannel handle) {
162 throw new UnsupportedOperationException();
163 }
164
165 @Override
166 protected void destroy() throws Exception {
167 }
168
169 @Override
170 protected boolean finishConnect(DatagramChannel handle) throws Exception {
171 throw new UnsupportedOperationException();
172 }
173
174 @Override
175 protected void register(DatagramChannel handle, ConnectionRequest request)
176 throws Exception {
177 throw new UnsupportedOperationException();
178 }
179
180 @Override
181 protected int select(int timeout) throws Exception {
182 return 0;
183 }
184
185 @Override
186 @SuppressWarnings("unchecked")
187 protected Iterator<DatagramChannel> selectedHandles() {
188 return Collections.EMPTY_LIST.iterator();
189 }
190
191 @Override
192 protected void wakeup() {
193 }
194 }