content: package auth.handler;
  
  /**
   * Created by Dell on 2016/2/18.
   */
  
  import auth.HandlerManager;
  import auth.IMHandler;
  import auth.Worker;
  import com.google.protobuf.Message;
  import io.netty.channel.ChannelHandlerContext;
  import io.netty.channel.SimpleChannelInboundHandler;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import protobuf.analysis.ParseMap;
  import protobuf.generate.cli2srv.chat.Chat;
  import protobuf.generate.internal.Internal;
  
  import java.util.HashMap;
  
  public class AuthServerHandler extends SimpleChannelInboundHandler<Message> {
      private static final Logger logger = LoggerFactory.getLogger(AuthServerHandler.class);
      private static ChannelHandlerContext _gateAuthConnection;
  
      public static void setGateAuthConnection(ChannelHandlerContext ctx) {
          _gateAuthConnection = ctx;
      }
  
      public static ChannelHandlerContext getGateAuthConnection() {
          if(_gateAuthConnection != null) {
              return _gateAuthConnection;
          } else {
              return null;
          }
      }
  
      private static HashMap<String, Long> userid2netidMap = new HashMap<>();
  
      @Override
      public void channelActive(ChannelHandlerContext ctx) throws Exception {
      }
  
      @Override
      protected void channelRead0(ChannelHandlerContext channelHandlerContext, Message message) throws Exception {
          Internal.GTransfer gt = (Internal.GTransfer) message;
          int ptoNum = gt.getPtoNum();
          Message msg = ParseMap.getMessage(ptoNum, gt.getMsg().toByteArray());
  
          IMHandler handler;
          if(msg instanceof Internal.Greet) {
              //来自gate的连接请求
              handler = HandlerManager.getHandler(ptoNum, gt.getUserId(), gt.getNetId(), msg, channelHandlerContext);
          } else {
              handler = HandlerManager.getHandler(ptoNum, gt.getUserId(), gt.getNetId(), msg, getGateAuthConnection());
          }
  
          Worker.dispatch(gt.getUserId(), handler);
      }
  
      @Override
      public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
              throws Exception {
          // super.exceptionCaught(ctx, cause);
          logger.error("An Exception Caught");
      }
  
      public static void putInUseridMap(String userid, Long netId) {
          userid2netidMap.put(userid, netId);
      }
  
      public static Long getNetidByUserid(String userid) {
          Long netid = userid2netidMap.get(userid);
          if( netid != null) {
              return netid;
          } else {
              return null;
          }
      }
  }
  