01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one
03: * or more contributor license agreements. See the NOTICE file
04: * distributed with this work for additional information
05: * regarding copyright ownership. The ASF licenses this file
06: * to you under the Apache License, Version 2.0 (the
07: * "License"); you may not use this file except in compliance
08: * with the License. You may obtain a copy of the License at
09: *
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.common;
21:
22: /**
23: * An internal interface to represent an 'I/O processor' that performs
24: * actual I/O operations for {@link IoSession}s. It abstracts existing
25: * reactor frameworks such as Java NIO once again to simplify transport
26: * implementations.
27: *
28: * @author Apache MINA Project (dev@mina.apache.org)
29: * @version $Rev: 598504 $, $Date: 2007-11-26 20:08:12 -0700 (Mon, 26 Nov 2007) $
30: *
31: * @param <T> the type of the {@link IoSession} this processor can handle
32: */
33: public interface IoProcessor<T extends IoSession> {
34:
35: /**
36: * Returns <tt>true</tt> if and if only {@link #dispose()} method has
37: * been called. Please note that this method will return <tt>true</tt>
38: * even after all the related resources are released.
39: */
40: boolean isDisposing();
41:
42: /**
43: * Returns <tt>true</tt> if and if only all resources of this processor
44: * have been disposed.
45: */
46: boolean isDisposed();
47:
48: /**
49: * Releases any resources allocated by this processor. Please note that
50: * the resources might not be released as long as there are any sessions
51: * managed by this processor. Most implementations will close all sessions
52: * immediately and release the related resources.
53: */
54: void dispose();
55:
56: /**
57: * Adds the specified {@code session} to the I/O processor so that
58: * the I/O processor starts to perform any I/O operations related
59: * with the {@code session}.
60: */
61: void add(T session);
62:
63: /**
64: * Flushes the internal write request queue of the specified
65: * {@code session}.
66: */
67: void flush(T session);
68:
69: /**
70: * Controls the traffic of the specified {@code session} as specified
71: * in {@link IoSession#getTrafficMask()}.
72: */
73: void updateTrafficMask(T session);
74:
75: /**
76: * Removes and closes the specified {@code session} from the I/O
77: * processor so that the I/O processor closes the connection
78: * associated with the {@code session} and releases any other related
79: * resources.
80: */
81: void remove(T session);
82: }
|