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 public DatagramSessionConfig getSessionConfig() {
101 return (DatagramSessionConfig) sessionConfig;
102 }
103
104 @Override
105 public InetSocketAddress getDefaultRemoteAddress() {
106 return (InetSocketAddress) super.getDefaultRemoteAddress();
107 }
108
109 public void setDefaultRemoteAddress(InetSocketAddress defaultRemoteAddress) {
110 super.setDefaultRemoteAddress(defaultRemoteAddress);
111 }
112
113 @Override
114 protected void init() throws Exception {
115
116 }
117
118 @Override
119 protected DatagramChannel newHandle(SocketAddress localAddress) throws Exception {
120 DatagramChannel ch = DatagramChannel.open();
121
122 try {
123 if (localAddress != null) {
124 ch.socket().bind(localAddress);
125 }
126
127 return ch;
128 } catch (Exception e) {
129
130
131 ch.close();
132 throw e;
133 }
134 }
135
136 @Override
137 protected boolean connect(DatagramChannel handle, SocketAddress remoteAddress) throws Exception {
138 handle.connect(remoteAddress);
139 return true;
140 }
141
142 @Override
143 protected NioSession newSession(IoProcessor<NioSession> processor, DatagramChannel handle) {
144 NioSession session = new NioDatagramSession(this, handle, processor);
145 session.getConfig().setAll(getSessionConfig());
146 return session;
147 }
148
149 @Override
150 protected void close(DatagramChannel handle) throws Exception {
151 handle.disconnect();
152 handle.close();
153 }
154
155
156 @Override
157 @SuppressWarnings("unchecked")
158 protected Iterator<DatagramChannel> allHandles() {
159 return Collections.EMPTY_LIST.iterator();
160 }
161
162 @Override
163 protected ConnectionRequest getConnectionRequest(DatagramChannel handle) {
164 throw new UnsupportedOperationException();
165 }
166
167 @Override
168 protected void destroy() throws Exception {
169
170 }
171
172 @Override
173 protected boolean finishConnect(DatagramChannel handle) throws Exception {
174 throw new UnsupportedOperationException();
175 }
176
177 @Override
178 protected void register(DatagramChannel handle, ConnectionRequest request) throws Exception {
179 throw new UnsupportedOperationException();
180 }
181
182 @Override
183 protected int select(int timeout) throws Exception {
184 return 0;
185 }
186
187 @Override
188 @SuppressWarnings("unchecked")
189 protected Iterator<DatagramChannel> selectedHandles() {
190 return Collections.EMPTY_LIST.iterator();
191 }
192
193 @Override
194 protected void wakeup() {
195
196 }
197 }