/**
*
*/
package video.clientProxy;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import video.lib.RtspMessage;
import video.transport.TransportService;
/**
* @author yuezhu
*
*/
public class MinaClientHandler extends IoHandlerAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(MinaClientHandler.class);
private static TransportService service;
public MinaClientHandler(TransportService transportService) {
service = transportService;
}
@Override
public void exceptionCaught(IoSession session, Throwable cause) {
// Close connection when unexpected exception is caught.
LOGGER.debug("exceptionCaught() is invoked.");
cause.printStackTrace();
RtspClientHandler rtspClientHandler = (RtspClientHandler) (session.getAttribute(RtspClientHandler.TOKEN));
if (rtspClientHandler != null) {
rtspClientHandler.close();
LOGGER.info("Client session closed.");
}
}
@Override
public void sessionCreated(IoSession session) {
// System.err.println("sessionCreated() is invoked.");
LOGGER.debug("sessionCreated() is invoked.");
LOGGER.info("New client " + session.getRemoteAddress().toString() + " is connected.");
}
@SuppressWarnings("static-access")
@Override
public void sessionOpened(IoSession session) {
LOGGER.debug("sessionOpened() is invoked.");
RtspClientHandler rtspClientHandler = new RtspClientHandler(session, service);
session.setAttribute(rtspClientHandler.TOKEN, rtspClientHandler);
}
@Override
public void sessionClosed(IoSession session) {
System.err.println("sessionClosed() is invoked.");
LOGGER.debug("sessionClosed() is invoked.");
RtspClientHandler rtspClientHandler = (RtspClientHandler) (session.getAttribute(RtspClientHandler.TOKEN));
if (rtspClientHandler != null) {
rtspClientHandler.close();
}
}
@Override
public void messageReceived(IoSession session, Object message) {
LOGGER.debug("messageReceived() is invoked.");
RtspClientHandler rtspClientHandler = (RtspClientHandler) (session.getAttribute(RtspClientHandler.TOKEN));
rtspClientHandler.onMessageReceivedFromClient((RtspMessage)message);
}
}