View Javadoc

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