KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > mina > transport > socket > nio > SocketFilterChain


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  *
19  */

20 package org.apache.mina.transport.socket.nio;
21
22 import java.io.IOException JavaDoc;
23 import java.util.Queue JavaDoc;
24
25 import org.apache.mina.common.ByteBuffer;
26 import org.apache.mina.common.IoFilter.WriteRequest;
27 import org.apache.mina.common.IoFilterChain;
28 import org.apache.mina.common.IoSession;
29 import org.apache.mina.common.support.AbstractIoFilterChain;
30
31 /**
32  * An {@link IoFilterChain} for socket transport (TCP/IP).
33  *
34  * @author The Apache Directory Project (mina-dev@directory.apache.org)
35  */

36 class SocketFilterChain extends AbstractIoFilterChain {
37
38     SocketFilterChain(IoSession parent) {
39         super(parent);
40     }
41
42     @Override JavaDoc
43     protected void doWrite(IoSession session, WriteRequest writeRequest) {
44         SocketSessionImpl s = (SocketSessionImpl) session;
45         Queue JavaDoc<WriteRequest> writeRequestQueue = s.getWriteRequestQueue();
46
47         // SocketIoProcessor.doFlush() will reset it after write is finished
48
// because the buffer will be passed with messageSent event.
49
((ByteBuffer) writeRequest.getMessage()).mark();
50         synchronized (writeRequestQueue) {
51             writeRequestQueue.add(writeRequest);
52             if (writeRequestQueue.size() == 1
53                     && session.getTrafficMask().isWritable()) {
54                 // Notify SocketIoProcessor only when writeRequestQueue was empty.
55
s.getIoProcessor().flush(s);
56             }
57         }
58     }
59
60     @Override JavaDoc
61     protected void doClose(IoSession session) throws IOException JavaDoc {
62         SocketSessionImpl s = (SocketSessionImpl) session;
63         s.getIoProcessor().remove(s);
64     }
65 }
66
Popular Tags