1 20 package org.apache.mina.transport.socket.nio.support; 21 22 import java.util.Queue ; 23 24 import org.apache.mina.common.ByteBuffer; 25 import org.apache.mina.common.IoFilter.WriteRequest; 26 import org.apache.mina.common.IoFilterChain; 27 import org.apache.mina.common.IoSession; 28 import org.apache.mina.common.support.AbstractIoFilterChain; 29 30 35 class DatagramFilterChain extends AbstractIoFilterChain { 36 37 DatagramFilterChain(IoSession parent) { 38 super(parent); 39 } 40 41 @Override 42 protected void doWrite(IoSession session, WriteRequest writeRequest) { 43 DatagramSessionImpl s = (DatagramSessionImpl) session; 44 Queue <WriteRequest> writeRequestQueue = s.getWriteRequestQueue(); 45 46 ((ByteBuffer) writeRequest.getMessage()).mark(); 49 synchronized (writeRequestQueue) { 50 writeRequestQueue.add(writeRequest); 51 if (writeRequestQueue.size() == 1 52 && session.getTrafficMask().isWritable()) { 53 s.getManagerDelegate().flushSession(s); 55 } 56 } 57 } 58 59 @Override 60 protected void doClose(IoSession session) { 61 DatagramSessionImpl s = (DatagramSessionImpl) session; 62 DatagramService manager = s.getManagerDelegate(); 63 if (manager instanceof DatagramConnectorDelegate) { 64 manager.closeSession(s); 65 } else { 66 ((DatagramAcceptorDelegate) manager).getListeners() 67 .fireSessionDestroyed(session); 68 session.getCloseFuture().setClosed(); 69 } 70 } 71 } 72 | Popular Tags |