149 lines
6.2 KiB
Java
149 lines
6.2 KiB
Java
package com.ljsd;
|
|
|
|
|
|
import com.ljsd.jieling.core.HandlerLogicThread;
|
|
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.server.ProtocolsManager;
|
|
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<Integer> 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);*/
|
|
User userInMem = UserManager.getUserInMem(uid);
|
|
AyyncWorker ayyncWorker = new AyyncWorker(userInMem,true) {
|
|
@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);
|
|
}
|
|
};
|
|
ProtocolsManager instance = ProtocolsManager.getInstance();
|
|
HandlerLogicThread handlerThread = instance.handlerThreads[uid % instance.HANDLER_THREAD_NUM];
|
|
handlerThread.addAyyncWorker(ayyncWorker);
|
|
return result;
|
|
}
|
|
|
|
if(cmd.contains("hotfix")){
|
|
List<User> usersInDB = MongoUtil.getLjsdMongoTemplate().findAll("user", User.class);
|
|
List<Integer> 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<Integer> 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;
|
|
}
|
|
|
|
|
|
}
|