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.support;
21
22 import org.apache.mina.common.ByteBuffer;
23 import org.apache.mina.common.IoFilterChain;
24 import org.apache.mina.common.IoSession;
25 import org.apache.mina.common.IoFilter.WriteRequest;
26 import org.apache.mina.common.support.AbstractIoFilterChain;
27 import org.apache.mina.util.Queue;
28
29
30
31
32
33
34 class DatagramFilterChain extends AbstractIoFilterChain {
35
36 DatagramFilterChain(IoSession parent) {
37 super(parent);
38 }
39
40 protected void doWrite(IoSession session, WriteRequest writeRequest) {
41 DatagramSessionImpl s = (DatagramSessionImpl) session;
42 Queue writeRequestQueue = s.getWriteRequestQueue();
43
44
45
46 ((ByteBuffer) writeRequest.getMessage()).mark();
47 synchronized (writeRequestQueue) {
48 writeRequestQueue.push(writeRequest);
49 if (writeRequestQueue.size() == 1
50 && session.getTrafficMask().isWritable()) {
51
52 s.getManagerDelegate().flushSession(s);
53 }
54 }
55 }
56
57 protected void doClose(IoSession session) {
58 DatagramSessionImpl s = (DatagramSessionImpl) session;
59 DatagramService manager = s.getManagerDelegate();
60 if (manager instanceof DatagramConnectorDelegate) {
61 ((DatagramConnectorDelegate) manager).closeSession(s);
62 } else {
63 ((DatagramAcceptorDelegate) manager).getListeners()
64 .fireSessionDestroyed(session);
65 session.getCloseFuture().setClosed();
66 }
67 }
68 }