001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: *
019: */
020: package org.apache.mina.handler.multiton;
021:
022: import java.io.IOException;
023:
024: import org.apache.mina.common.IdleStatus;
025: import org.apache.mina.common.IoHandler;
026: import org.apache.mina.common.IoSession;
027:
028: /**
029: * A session handler without an {@link IoSession} parameter for simplicity.
030: * <p>
031: * A {@link SingleSessionIoHandler} is similar to an {@link IoHandler} with
032: * the notable difference that a {@link SingleSessionIoHandler} is used only
033: * by one session at a time. Thus, there is no {@link IoSession} parameter in
034: * the methods of this interface.
035: * </p>
036: * <p>
037: * Because events are passed to the session in order, it is possible to store
038: * conversational state as instance variables in this object.
039: * </p>
040: *
041: * @author The Apache MINA Project (dev@mina.apache.org)
042: * @version $Rev: 576217 $, $Date: 2007-09-16 17:55:27 -0600 (Sun, 16 Sep 2007) $
043: */
044: public interface SingleSessionIoHandler {
045:
046: /**
047: * Invoked when the session is created. Initialize default socket parameters
048: * and user-defined attributes here.
049: *
050: * @throws Exception
051: * @see IoHandler#sessionCreated(IoSession)
052: */
053: void sessionCreated() throws Exception;
054:
055: /**
056: * Invoked when the connection is opened. This method is not invoked if the
057: * transport type is UDP.
058: *
059: * @see IoHandler#sessionOpened(IoSession)
060: */
061: void sessionOpened() throws Exception;
062:
063: /**
064: * Invoked when the connection is closed. This method is not invoked if the
065: * transport type is UDP.
066: *
067: * @see IoHandler#sessionClosed(IoSession)
068: */
069: void sessionClosed() throws Exception;
070:
071: /**
072: * Invoked when the connection is idle. Refer to {@link IdleStatus}. This
073: * method is not invoked if the transport type is UDP.
074: *
075: * @param status the type of idleness
076: * @see IoHandler#sessionIdle(IoSession, IdleStatus)
077: */
078: void sessionIdle(IdleStatus status) throws Exception;
079:
080: /**
081: * Invoked when any exception is thrown by user {@link IoHandler}
082: * implementation or by MINA. If <code>cause</code> is instanceof
083: * {@link IOException}, MINA will close the connection automatically.
084: *
085: * @param cause the caught exception
086: * @see IoHandler#exceptionCaught(IoSession, Throwable)
087: */
088: void exceptionCaught(Throwable cause) throws Exception;
089:
090: /**
091: * Invoked when protocol message is received. Implement your protocol flow
092: * here.
093: *
094: * @param message the received message
095: * @see IoHandler#messageReceived(IoSession, Object)
096: */
097: void messageReceived(Object message) throws Exception;
098:
099: /**
100: * Invoked when protocol message that user requested by
101: * {@link IoSession#write(Object)} is sent out actually.
102: *
103: * @param message the sent message
104: * @see IoHandler#messageSent(IoSession, Object)
105: */
106: void messageSent(Object message) throws Exception;
107:
108: }
|