package com.metazion.jgd.action; import com.metazion.jgd.AppLogin; import com.metazion.jgd.def.ServerBean; import com.metazion.jgd.info.ServerInfo; import com.metazion.jgd.protocal.Message; import com.metazion.jgd.protocal.cl.SelectServerCL; import com.metazion.jgd.protocal.cl.SelectServerLC; import com.metazion.jgd.protocal.sl.UserCandidateLS; import com.metazion.jgd.util.JgdLogger; import com.metazion.object.Server; import com.metazion.object.User; public class RASelectServerCL extends RequestAction { private SelectServerCL req = new SelectServerCL(); @Override public void setRequest(Message msg) { req = (SelectServerCL) msg; } @Override public void execute() { final int userId = req.userId; final String token = req.token; final int serverId = req.serverId; JgdLogger.getLogger().info("Select server cl: userId[{}] token[{}] serverId[{}]", userId, token, serverId); SelectServerLC rsp = new SelectServerLC(); User user = AppLogin.getLogicService().getUserManager().getUser(userId); if (user == null) { rsp.result = SelectServerLC.ERROR_ILLEGAL; session.send(rsp); JgdLogger.getLogger().debug("Select server cl failed: user is null"); return; } String userToken = user.getToken(); if (!token.equals(userToken)) { rsp.result = SelectServerLC.ERROR_ILLEGAL; session.send(rsp); JgdLogger.getLogger().debug("Select server cl failed: token is invalid"); return; } Server server = AppLogin.getLogicService().getServerManager().getServer(serverId); if (server == null) { rsp.result = SelectServerLC.ERROR_CLOSED; session.send(rsp); JgdLogger.getLogger().debug("Select server cl failed: server[{}] hasn't connected in", serverId); return; } ServerInfo serverInfo = server.getServerInfo(); if (serverInfo.serverBean.status == ServerBean.STATUS_CLOSED) { rsp.result = SelectServerLC.ERROR_CLOSED; session.send(rsp); JgdLogger.getLogger().debug("Select server cl failed: server[{}] is closed", serverId); return; } if (serverInfo.serverBean.status == ServerBean.STATUS_FULL) { rsp.result = SelectServerLC.ERROR_FULL; session.send(rsp); JgdLogger.getLogger().debug("Select server cl failed: server[{}] is full", serverId); return; } user.setSession(session); user.setToken(userToken); JgdLogger.getLogger().debug("Select server cl next: server[{}] candidate user[{}]", serverId, userId); UserCandidateLS reqUCLS = new UserCandidateLS(); reqUCLS.userId = userId; reqUCLS.token = token; server.send(reqUCLS); } }