package com.mogujie.tt.socket; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelStateEvent; import org.jboss.netty.channel.ExceptionEvent; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.channel.SimpleChannelHandler; import android.os.Handler; import android.os.Message; import com.mogujie.tt.config.HandlerConstant; import com.mogujie.tt.config.SysConstant; import com.mogujie.tt.conn.ConnectionStore; //import com.mogujie.tt.conn.ReconnectManager; import com.mogujie.tt.log.Logger; import com.mogujie.tt.packet.MessageDispatchCenter; import com.mogujie.tt.packet.base.DataBuffer; public class SocketHandler extends SimpleChannelHandler { private SocketStateManager ssmInstance = SocketStateManager.getInstance(); //private ReconnectManager //rcInstance = ReconnectManager.getInstance(); private ConnectionStore cmInstance = ConnectionStore.getInstance(); //private StateManager smInstance = StateManager.getInstance(); protected Logger logger = Logger.getLogger(SocketHandler.class); public void channelConnected(ChannelHandlerContext context, ChannelStateEvent e) throws Exception { String clientAddr = context.getChannel().getRemoteAddress().toString(); logger.i("[CONNECTED] ADDRESS:" + clientAddr); //Handler handler = LoginManager.getInstance().getHandler(); Handler handler = null; if (null != handler) { Message msg = handler.obtainMessage(); msg.what = HandlerConstant.HANDLER_CONNECT_SUCESS; msg.obj = clientAddr; handler.dispatchMessage(msg); } else { logger.e("Can not Send Message"); //rcInstance.setLogining(false); //rcInstance.setOnRecconnecting(false); } // ssmInstance.setState(true); } @Override public void messageReceived(ChannelHandlerContext context, MessageEvent event) throws Exception { logger.d("messageReceived"); ChannelBuffer originbuffer = (ChannelBuffer) event.getMessage(); DataBuffer dataBuffer = new DataBuffer(originbuffer); // DataBuffer buffer = (DataBuffer) event.getMessage(); //MessageDispatchCenter.getInstance().OnRecvMessage(dataBuffer); } public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { if (this == ctx.getPipeline().getLast()) { logger.e(e.toString()); } ctx.sendUpstream(e); e.getCause().printStackTrace(); //rcInstance.setOnRecconnecting(false); ssmInstance.setState(false); //rcInstance.setLogining(false); //smInstance.resetSockets(); } public void channelDisconnected(ChannelHandlerContext context, ChannelStateEvent e) throws Exception { String clientAddr = context.getChannel().getRemoteAddress().toString(); logger.i("packet#[ DISCONNECTED ] ADDRESS:" + clientAddr); super.channelDisconnected(context, e); MoGuSocket socketLogin = cmInstance.get(SysConstant.CONNECT_LOGIN_SERVER); if (null != socketLogin && null != socketLogin.getChannel()) { String localAddr = socketLogin.getChannel().getRemoteAddress().toString(); if (clientAddr.equals(localAddr)) { socketLogin.close(); socketLogin = null; cmInstance.remove(SysConstant.CONNECT_LOGIN_SERVER); } } // if ((!clientAddr.contains(LoginManager.getInstance().getLoginIp1()) // // || (clientAddr.contains(LoginManager.getInstance().getLoginIp1()) && !clientAddr // // .contains(String.valueOf(LoginManager.getInstance().getLoginPort())))) || // // (!clientAddr.contains(LoginManager.getInstance().getLoginIp2()) // // || (clientAddr.contains(LoginManager.getInstance().getLoginIp2()) && !clientAddr // // .contains(String.valueOf(LoginManager.getInstance().getLoginPort()))))) { // // MoGuSocket socket = cmInstance.get(SysConstant.CONNECT_MSG_SERVER); // // if (null != socket && null != socket.getChannel()) // // { // // String localAddr = socket.getChannel().getRemoteAddress().toString(); // // if (localAddr.equals(clientAddr)) { // // ssmInstance.setState(false); // // } // // } // // } // context.getChannel().close(); } }