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.bio;
21
22 import java.io.IOException;
23 import java.net.SocketAddress;
24 import java.nio.ByteBuffer;
25
26 import org.apache.mina.api.IoFuture;
27 import org.apache.mina.api.IoSession;
28 import org.apache.mina.api.IoSessionConfig;
29 import org.apache.mina.service.idlechecker.IdleChecker;
30 import org.apache.mina.session.AbstractIoSession;
31 import org.apache.mina.session.DefaultWriteRequest;
32 import org.apache.mina.session.WriteRequest;
33
34
35
36
37
38
39 public class BioUdpSession extends AbstractIoSession {
40
41 private SocketAddress remoteAddress;
42
43 public BioUdpSession(SocketAddress remoteAddress, BioUdpServer service, IdleChecker idleChecker) {
44 super(service, idleChecker);
45 this.remoteAddress = remoteAddress;
46 }
47
48
49
50
51 @Override
52 public SocketAddress getRemoteAddress() {
53 return remoteAddress;
54 }
55
56
57
58
59 @Override
60 public SocketAddress getLocalAddress() {
61 return ((BioUdpServer) getService()).getBoundAddress();
62 }
63
64
65
66
67 @Override
68 public IoFuture<Void> close(boolean immediately) {
69 processSessionClosed();
70 return null;
71 }
72
73
74
75
76 @Override
77 public void suspendRead() {
78 throw new IllegalStateException("not supported");
79 }
80
81
82
83
84 @Override
85 public void suspendWrite() {
86 throw new IllegalStateException("not supported");
87
88 }
89
90
91
92
93 @Override
94 public void resumeRead() {
95 throw new IllegalStateException("not supported");
96 }
97
98
99
100
101 @Override
102 public void resumeWrite() {
103 throw new IllegalStateException("not supported");
104 }
105
106
107
108
109 @Override
110 public boolean isReadSuspended() {
111 return false;
112 }
113
114
115
116
117 @Override
118 public boolean isWriteSuspended() {
119 return false;
120 }
121
122
123
124
125 @Override
126 public IoSessionConfig getConfig() {
127 return config;
128 }
129
130
131
132
133 @Override
134 public WriteRequest enqueueWriteRequest(WriteRequest writeRequest) {
135
136 try {
137 int written = ((BioUdpServer) getService()).channel.send((ByteBuffer) writeRequest.getMessage(),
138 remoteAddress);
139 if (written > 0) {
140 incrementWrittenBytes(written);
141
142 final Object highLevel = ((DefaultWriteRequest) writeRequest).getOriginalMessage();
143
144 if (highLevel != null) {
145 processMessageSent(highLevel);
146 }
147
148 } else {
149 processException(new RuntimeException("unable to write"));
150 }
151 } catch (IOException e) {
152 processException(e);
153 }
154
155 return writeRequest;
156
157 }
158 }