150 lines
6.3 KiB
Java
150 lines
6.3 KiB
Java
package com.ljsd;
|
||
|
||
|
||
import com.google.gson.Gson;
|
||
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.activity.event.Poster;
|
||
import com.ljsd.jieling.logic.activity.event.UserForceChangeEvent;
|
||
import com.ljsd.jieling.logic.activity.eventhandler.UserForceUpEventHandler;
|
||
import com.ljsd.jieling.logic.dao.UserManager;
|
||
import com.ljsd.jieling.logic.dao.root.User;
|
||
import com.ljsd.jieling.logic.fight.FightRecordLogic;
|
||
import com.ljsd.jieling.network.session.ISession;
|
||
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.*;
|
||
import org.apache.thrift.TException;
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
import org.springframework.data.redis.core.ZSetOperations;
|
||
import java.util.*;
|
||
|
||
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 {
|
||
return exeCmd(cmd);
|
||
}
|
||
|
||
|
||
public static Result exeCmd(String cmd){
|
||
|
||
LOGGER.info("gm________________________"+cmd);
|
||
Result result = new Result();
|
||
result.setResultCode(-1);
|
||
String[] arg = cmd.split(" ");
|
||
GmInterface obj;
|
||
try {
|
||
|
||
obj = (GmInterface) Class.forName(
|
||
GmInterface.class.getPackage().getName() + ".Cmd_"
|
||
+ arg[0].toLowerCase()).newInstance();
|
||
|
||
} catch (Exception ex) {
|
||
result.setResultMsg("Cmd Illegal");
|
||
ex.printStackTrace();
|
||
return result;
|
||
}
|
||
try {
|
||
String[] parameters = java.util.Arrays.copyOfRange(arg, 1, arg.length);
|
||
|
||
if (obj instanceof GmRoleAbstract) {
|
||
//todo
|
||
Map<Integer, String> rechargeInfoMap = new HashMap<>();
|
||
|
||
|
||
List<Integer> sendIds = new LinkedList<>();
|
||
if (obj instanceof GmGlobleAbstract) {
|
||
for (ISession session : OnlineUserManager.sessionMap.values()) {
|
||
sendIds.add(session.getUid());
|
||
}
|
||
} else {
|
||
if(cmd.contains("hotfix") || cmd.contains("shop")|| cmd.contains("endStore")){
|
||
List<User> usersInDB = MongoUtil.getLjsdMongoTemplate().findAll("user", User.class);
|
||
for(User user1 : usersInDB){
|
||
User userInMem = UserManager.getUserInMem(user1.getId());
|
||
if(userInMem == null){
|
||
continue;
|
||
}
|
||
sendIds.add(user1.getId());
|
||
}
|
||
}else if(cmd.contains("recharge")){
|
||
sendIds.addAll(rechargeInfoMap.keySet());
|
||
}else if(cmd.contains("force")){
|
||
|
||
Set<ZSetOperations.TypedTuple<String>> rankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.FORCE_RANK, "", 0, -1);
|
||
for (ZSetOperations.TypedTuple<String> item : rankInfo) {
|
||
String value = item.getValue();
|
||
int uid = Integer.parseInt(value);
|
||
sendIds.add(uid);
|
||
}
|
||
|
||
} else if(cmd.contains("mainfightrank")){
|
||
Poster.getPoster().listenEvent(new UserForceUpEventHandler(), UserForceChangeEvent.class);
|
||
Set<ZSetOperations.TypedTuple<String>> rankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.MAIN_LEVEL_RANK, "", 0, -1);
|
||
for (ZSetOperations.TypedTuple<String> item : rankInfo) {
|
||
String value = item.getValue();
|
||
int uid = Integer.parseInt(value);
|
||
sendIds.add(uid);
|
||
}
|
||
} else {
|
||
String[] ids = parameters[0].split("#");
|
||
for (String id : ids) {
|
||
sendIds.add(Integer.valueOf(id));
|
||
}
|
||
}
|
||
|
||
}
|
||
int randomTime = sendIds.size() * 1;
|
||
//两分钟内发完所有协议
|
||
Gson gson = new Gson();
|
||
String[] parameters2 = java.util.Arrays.copyOfRange(parameters, 1, parameters.length);
|
||
if(cmd.contains("recharge") ){
|
||
LOGGER.info("recharge map size={}",rechargeInfoMap.size());
|
||
if(!rechargeInfoMap.isEmpty()){
|
||
parameters2[3] = gson.toJson(rechargeInfoMap);
|
||
}
|
||
}
|
||
|
||
InnerMessageUtil.broadcastWithRandom( user->{
|
||
((GmRoleAbstract) obj).setUser(user);
|
||
obj.exec(parameters2);
|
||
}, sendIds, Math.min(randomTime, 10));
|
||
} else {
|
||
LOGGER.info("gm________________________start:"+cmd);
|
||
obj.exec(parameters);
|
||
|
||
// 获取玩家战报系统
|
||
if (cmd.contains("fightrecord")) {
|
||
if (cmd.contains("delete")) {
|
||
FightRecordLogic.getInstance().delete();
|
||
} else if (cmd.contains("all")){
|
||
String allValue = FightRecordLogic.getInstance().getAll(Integer.parseInt(parameters[1]));
|
||
result.setResultMsg(allValue);
|
||
} else {
|
||
String oneRecord = FightRecordLogic.getInstance().getOneRecord(parameters[0]);
|
||
result.setResultMsg(oneRecord);
|
||
}
|
||
}
|
||
LOGGER.info("gm________________________end:"+cmd);
|
||
}
|
||
|
||
} catch (final Exception ex) {
|
||
result.setResultMsg("Cmd Illegal");
|
||
LOGGER.info("e={}",ex);
|
||
return result;
|
||
}
|
||
result.setResultCode(0);
|
||
return result;
|
||
|
||
}
|
||
}
|