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