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: import java.io.IOException;
23:
24: /**
25: * Handles all I/O events fired by MINA.
26: *
27: * @author The Apache MINA Project (dev@mina.apache.org)
28: * @version $Rev: 576217 $, $Date: 2007-09-16 17:55:27 -0600 (Sun, 16 Sep 2007) $
29: *
30: * @see IoHandlerAdapter
31: */
32: public interface IoHandler {
33: /**
34: * Invoked from an I/O processor thread when a new connection has been created.
35: * Because this method is supposed to be called from the same thread that
36: * handles I/O of multiple sessions, please implement this method to perform
37: * tasks that consumes minimal amount of time such as socket parameter
38: * and user-defined session attribute initialization.
39: */
40: void sessionCreated(IoSession session) throws Exception;
41:
42: /**
43: * Invoked when a connection has been opened. This method is invoked after
44: * {@link #sessionCreated(IoSession)}. The biggest difference from
45: * {@link #sessionCreated(IoSession)} is that it's invoked from other thread
46: * than an I/O processor thread once thread modesl is configured properly.
47: */
48: void sessionOpened(IoSession session) throws Exception;
49:
50: /**
51: * Invoked when a connection is closed.
52: */
53: void sessionClosed(IoSession session) throws Exception;
54:
55: /**
56: * Invoked with the related {@link IdleStatus} when a connection becomes idle.
57: * This method is not invoked if the transport type is UDP; it's a known bug,
58: * and will be fixed in 2.0.
59: */
60: void sessionIdle(IoSession session, IdleStatus status)
61: throws Exception;
62:
63: /**
64: * Invoked when any exception is thrown by user {@link IoHandler}
65: * implementation or by MINA. If <code>cause</code> is instanceof
66: * {@link IOException}, MINA will close the connection automatically.
67: */
68: void exceptionCaught(IoSession session, Throwable cause)
69: throws Exception;
70:
71: /**
72: * Invoked when a message is received.
73: */
74: void messageReceived(IoSession session, Object message)
75: throws Exception;
76:
77: /**
78: * Invoked when a message written by {@link IoSession#write(Object)} is
79: * sent out.
80: */
81: void messageSent(IoSession session, Object message)
82: throws Exception;
83: }
|