/*
* IDK Game Server by Steve Winfield
* https://github.com/WinfieldSteve
*/
package org.stevewinfield.suja.idk.network;
import org.apache.log4j.Logger;
import org.jboss.netty.channel.*;
import org.stevewinfield.suja.idk.Bootloader;
import org.stevewinfield.suja.idk.IDK;
import org.stevewinfield.suja.idk.network.sessions.Session;
public class ConnectionHandler extends SimpleChannelHandler {
private static final Logger logger = Logger.getLogger(ConnectionHandler.class);
@Override
public void channelOpen(final ChannelHandlerContext ctnx, final ChannelStateEvent e) {
if (Bootloader.getSessionManager().makeSession(ctnx.getChannel())) {
if (IDK.DEBUG) {
logger.debug("Channel opened.");
}
} else {
ctnx.getChannel().disconnect();
}
}
@Override
public void channelClosed(final ChannelHandlerContext ctx, final ChannelStateEvent e) {
if (Bootloader.getSessionManager().removeSession(ctx.getChannel())) {
((Session) ctx.getChannel().getAttachment()).dispose();
if (IDK.DEBUG) {
logger.debug("Channel closed.");
}
}
}
@Override
public void exceptionCaught(final ChannelHandlerContext ctx, final ExceptionEvent e) {
if (Bootloader.getSessionManager().hasSession(ctx.getChannel())) {
((Session) ctx.getChannel().getAttachment()).dispose();
}
logger.error("Execption caught.", e.getCause());
ctx.getChannel().close();
}
@Override
public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent e) {
if (Bootloader.getSessionManager().hasSession(ctx.getChannel())) {
if (!(e.getMessage() instanceof Integer)) {
ctx.getChannel().close();
}
}
}
}