package com.metazion.jgd.net; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; import com.metazion.jgd.def.ServerBean; import com.metazion.jgd.protocal.Message; import com.metazion.jgd.protocal.Protocal; import com.metazion.jgd.protocal.cl.SelectServerLC; import com.metazion.jgd.protocal.cl.UserLoginLC; import com.metazion.jgd.protocal.cl.UserRegisterLC; import com.metazion.jgd.util.JgdLogger; import io.netty.channel.ChannelHandlerContext; public class MessageProcessor { public static void process(ChannelHandlerContext ctx, Object data) throws Exception { ctx.close(); if (data instanceof byte[]) { Message msg = deserialize(data); process(ctx, msg); } } private static Message deserialize(Object data) throws Exception { byte[] bytes = (byte[]) data; // 对数据解压解密等 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ObjectInputStream dis = new ObjectInputStream(bais); Message msg = (Message) dis.readObject(); dis.close(); bais.close(); return msg; } private static void process(ChannelHandlerContext ctx, Message msg) throws IOException { final int protocal = msg.procotal; switch (protocal) { case Protocal.PN_CL_USERREGISTER: handleUserRegisterLC(msg); break; case Protocal.PN_CL_USERLOGIN: handleUserLoginLC(msg); break; case Protocal.PN_CL_SELECTSERVER: handleSelectServerLC(msg); break; default: break; } } private static void handleUserRegisterLC(Message msg) { UserRegisterLC rsp = (UserRegisterLC) msg; JgdLogger.getLogger().debug("Message processor handle user register lc: result[{}]", rsp.result); if (rsp.result == UserLoginLC.SUCCESS) { // Nothing to do. } } private static void handleUserLoginLC(Message msg) { UserLoginLC rsp = (UserLoginLC) msg; JgdLogger.getLogger().debug("Message processor handle user login lc: result[{}]", rsp.result); if (rsp.result == UserLoginLC.SUCCESS) { ClientHelper.userId = rsp.userId; ClientHelper.token = rsp.token; JgdLogger.getLogger().debug("user id[{}] token[{}]", rsp.userId, rsp.token); for (ServerBean sb : rsp.serverList) { JgdLogger.getLogger().debug("server id[{}] name[{}] status[{}]", sb.id, sb.name, sb.status); } } } private static void handleSelectServerLC(Message msg) { SelectServerLC rsp = (SelectServerLC) msg; JgdLogger.getLogger().debug("Message processor handle select server lc: result[{}]", rsp.result); if (rsp.result == SelectServerLC.SUCCESS) { JgdLogger.getLogger().debug("user id[{}] token[{}] host[{}] port[{}]", rsp.userId, rsp.token, rsp.host, rsp.port); } } }