package com.ljsd; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.kefu.GmGlobleAbstract; import com.ljsd.jieling.kefu.GmInterface; import com.ljsd.jieling.kefu.GmRoleAbstract; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.thrift.idl.InvalidOperException; import com.ljsd.jieling.thrift.idl.RPCRequestGMIFace; import com.ljsd.jieling.thrift.idl.Result; import com.ljsd.jieling.util.AyyncWorker; import com.ljsd.jieling.util.InnerMessageUtil; import com.ljsd.jieling.util.MathUtils; import com.ljsd.jieling.util.MessageUtil; import org.apache.thrift.TException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Random; public class GmService implements RPCRequestGMIFace.Iface { private static final Logger LOGGER = LoggerFactory.getLogger(GmService.class); @Override public Result idipGm(String reserved, String cmd) throws InvalidOperException, TException { LOGGER.info("gm________________________"+cmd); Result result = new Result(); result.setResultCode(-1); String[] arg = cmd.split(" "); GmInterface obj; try { if(cmd.contains("force")){ int uid = Integer.valueOf(arg[1]); List uids = new LinkedList<>(); uids.add(uid); InnerMessageUtil.broadcastWithRandom(new AyyncWorker() { @Override public void work(User user) throws Exception { int teamForce = HeroLogic.getInstance().calTeamTotalForce(user, 1, false); LOGGER.info("cmd_________fore"+user.getId()+":"+teamForce); user.getPlayerInfoManager().setMaxForce(teamForce); String key = RedisKey.getKey(RedisKey.FORCE_RANK, "", false); RedisUtil.getInstence().zsetAddOne(key, String.valueOf(user.getId()), teamForce); } },uids , 10); return result; } if(cmd.contains("hotfix")){ List usersInDB = MongoUtil.getLjsdMongoTemplate().findAll("user", User.class); List sendIds = new ArrayList<>(usersInDB.size()); for(User user1 : usersInDB){ User userInMem = UserManager.getUserInMem(user1.getId()); if(userInMem == null){ continue; } sendIds.add(user1.getId()); } InnerMessageUtil.broadcastWithRandom(new AyyncWorker() { @Override public void work(User user) throws Exception { LOGGER.info("hotfix user={}",user.getId()); MongoUtil.getLjsdMongoTemplate().save(user); } }, sendIds, Math.min(10, 10)); result.setResultCode(1); return result; } obj = (GmInterface) Class.forName( GmInterface.class.getPackage().getName() + ".Cmd_" + arg[0].toLowerCase()).newInstance(); } catch (Exception ex) { result.setResultMsg("Cmd Illegal"); return result; } try { String[] parameters = java.util.Arrays.copyOfRange(arg, 1, arg.length); if (obj instanceof GmRoleAbstract) { List sendIds = new LinkedList<>(); if (obj instanceof GmGlobleAbstract) { for (ISession session : OnlineUserManager.sessionMap.values()) { sendIds.add(session.getUid()); } } else { String[] ids = parameters[0].split("#"); for (String id : ids) { sendIds.add(Integer.valueOf(id)); } } int randomTime = sendIds.size() * 1; //两分钟内发完所有协议 String[] parameters2 = java.util.Arrays.copyOfRange(parameters, 1, parameters.length); InnerMessageUtil.broadcastWithRandom(new AyyncWorker() { @Override public void work(User user) throws Exception { ((GmRoleAbstract) obj).setUser(user); obj.exec(parameters2); } }, sendIds, Math.min(randomTime, 120)); } else { obj.exec(parameters); } } catch (final Exception ex) { result.setResultMsg("Cmd Illegal"); return result; } result.setResultCode(0); return result; } }