天眼公会

back_recharge
duhui 2021-10-27 15:54:53 +08:00
parent 004ce5a027
commit 080e3337b7
8 changed files with 173 additions and 67 deletions

View File

@ -13,17 +13,19 @@ 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 com.ljsd.jieling.util.InnerMessageUtil;
import org.apache.thrift.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.ZSetOperations;
import java.util.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
public class GmService implements RPCRequestGMIFace.Iface {
private static final Logger LOGGER = LoggerFactory.getLogger(GmService.class);
@ -54,7 +56,6 @@ public class GmService implements RPCRequestGMIFace.Iface {
}
try {
String[] parameters = java.util.Arrays.copyOfRange(arg, 1, arg.length);
String[] parameters2;
// 用户相关性
if (obj instanceof GmRoleAbstract) {
List<Integer> sendIds = new LinkedList<>();
@ -104,12 +105,12 @@ public class GmService implements RPCRequestGMIFace.Iface {
}
}
int randomTime = sendIds.size();
parameters2 = java.util.Arrays.copyOfRange(parameters, 1, parameters.length);
String[] value = java.util.Arrays.copyOfRange(parameters, 1, parameters.length);
//两分钟内发完所有协议
InnerMessageUtil.broadcastWithRandom( user->{
((GmRoleAbstract) obj).setUser(user);
obj.exec(parameters2);
obj.exec(value);
}, sendIds, Math.min(randomTime, 10));
}
// 用户无关性

View File

@ -16,24 +16,21 @@ import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
import com.ljsd.jieling.logic.dao.FriendManager;
import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.gm.ArenaOfUser;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.family.GuildLogic;
import com.ljsd.jieling.network.session.ISession;
import rpc.protocols.ChatProto;
import rpc.protocols.MessageTypeProto;
import com.ljsd.jieling.util.CBean2Proto;
import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.SensitivewordFilter;
import com.ljsd.jieling.util.ShieldedWordUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rpc.protocols.ChatProto;
import rpc.protocols.MessageTypeProto;
import util.TimeUtils;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -136,14 +133,14 @@ public class ChatLogic {
String unSymbolWord = ShieldedWordUtils.replaceUnword(message);
String tmp = SensitivewordFilter.replaceSensitiveWord(unSymbolWord, 1, "*");
boolean silence = false;
if(playerInfoManager.getSilence() == 1 || playerInfoManager.getSkyEyeBanTime()>System.currentTimeMillis()){
if(playerInfoManager.getSilence() == 1 || playerInfoManager.getSkyEyeBanTime() > TimeUtils.now()){
silence = true;
}else{
MessageUtil.sendSkyEyeMsg(message,user,friendId,chatType);
}
if(tmp.contains("*") && !tmp.equals(message)||silence){
boolean bol = tmp.contains("*") && !tmp.equals(message) || silence;
if(bol){
char[] chars = message.toCharArray();
char[] original = unSymbolWord.toCharArray();
char[] tmpChar = tmp.toCharArray();

View File

@ -176,6 +176,8 @@ public enum ErrorCode implements IErrorCode {
CROSS_YXLD_OVER(145,"赛季结算中"),
RIDING_SWARD_BET_TWO(146,"一轮比赛最多押注两次!"),
PRACTICE_LEVE_DOWN(147,"修行等级不足"),
GUILD_NOT_AUTHORITY(148,"账号因错误发言导致相关功能封禁中,操作失败"),
;
private static final Set<Integer> CodeSet = new HashSet<>();

View File

@ -1,17 +1,64 @@
package com.ljsd.jieling.kefu;
import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.User;
import config.SGuildSetting;
import util.TimeUtils;
public class Cmd_skyeye extends GmRoleAbstract {
/**
*
*/
public static final int SKYEYE_BAN = 7;
/**
*
*/
public static final int CANCEL_SKYEYE_BAN = 8;
/**
*
*/
public static final int RESET_GUILD_NAME = 9;
/**
*
*/
public static final int RESET_GUILD_ANNOUNCEMENT = 10;
@Override
public boolean exec(String[] args) throws Exception {
User user = getUser();
int min = Integer.valueOf(args[0]);
PlayerManager playerInfoManager = user.getPlayerInfoManager();
//设置禁言
playerInfoManager.setSkyEyeBanTime(System.currentTimeMillis()+ min * TimeUtils.ONE_MINUTE);
PlayerManager playerManager = user.getPlayerInfoManager();
// 默认封禁
int time = Integer.valueOf(args[1]);
playerManager.setSkyEyeBanTime(System.currentTimeMillis() + time * TimeUtils.ONE_MINUTE);
int type = Integer.parseInt(args[0]);
// 获取公会信息
GuildInfo guildInfo = null;
if (type == RESET_GUILD_NAME || type == RESET_GUILD_ANNOUNCEMENT){
guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(args[2]));
}
if (guildInfo == null){
LOGGER.error("天眼,修改公会名称报错,找不到公会:{}",args[1]);
return false;
}
switch (type){
case RESET_GUILD_NAME:
//修改公会名称
guildInfo.setName(playerManager.getNickName()+"的公会");
break;
case RESET_GUILD_ANNOUNCEMENT:
//修改公会公告
guildInfo.setAnnounce(SGuildSetting.sGuildSetting.getDefaultDeclaration());
break;
default:
break;
}
return true;
}
}

View File

@ -207,7 +207,6 @@ public class UserManager {
}
public static User getUserNotCache(int uid) {
// User user = userMap.get(uid);
try {
User user = userMap.get(uid);
if (user != null) {

View File

@ -14,7 +14,10 @@ import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.ktbeans.ReportEventEnum;
import com.ljsd.jieling.ktbeans.ReportUtil;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.event.*;
import com.ljsd.jieling.logic.activity.event.CommitSheJiEvent;
import com.ljsd.jieling.logic.activity.event.GuildForceChangeEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.UserMainTeamForceEvent;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.*;
import com.ljsd.jieling.logic.mail.MailLogic;
@ -28,15 +31,15 @@ import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType;
import com.ljsd.jieling.logic.store.StoreLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import rpc.protocols.CommonProto;
import rpc.protocols.Family;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.*;
import config.*;
import manager.STableManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rpc.protocols.CommonProto;
import rpc.protocols.Family;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import util.StringUtil;
import util.TimeUtils;
@ -161,7 +164,7 @@ public class GuildLogic {
* @param announce
* @throws Exception
*/
public static void createFamily(ISession session,String familyName,String announce) throws Exception {
public static void createFamily(ISession session,String familyName,String announce) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
int msgId = MessageTypeProto.MessageType.FAMILY_CREATE_RESPONSE_VALUE;
@ -173,13 +176,21 @@ public class GuildLogic {
if(user.getPlayerInfoManager().getGuildId()!=0){
throw new ErrorCodeException(ErrorCode.FAMILY_IN);
}
if (user.getPlayerInfoManager().getSkyEyeBanTime() > TimeUtils.now()){
throw new ErrorCodeException(ErrorCode.GUILD_NOT_AUTHORITY);
}
if(StringUtil.isEmpty(announce)){
announce= SGuildSetting.sGuildSetting.getDefaultDeclaration();
}
if(announce.length()==0||announce.length()>32){
throw new ErrorCodeException(ErrorCode.ANNOUNCE_SIZE);
}
// 创建公会
GuildInfo guildInfo = new GuildInfo(user.getId(),familyName,announce);
// 天眼查询
MessageUtil.sendSkyEyeMsgByGuild(familyName,user,MessageUtil.skyeye_guildName,guildInfo.getId());
MessageUtil.sendSkyEyeMsgByGuild(announce,user,MessageUtil.skyeye_guildAnnounce,guildInfo.getId());
GuilidManager.addGuildInfo(guildInfo);
user.getPlayerInfoManager().setGuildId(guildInfo.getId());
addGuildLog(guildInfo.getId(),GuildDef.Log.CREATE,user.getPlayerInfoManager().getNickName());
@ -815,11 +826,16 @@ public class GuildLogic {
if(resultCode==0){
throw new ErrorCodeException(ErrorCode.FAMILY_IN_SENSITIVE);
}else{
if (user.getPlayerInfoManager().getSkyEyeBanTime() > TimeUtils.now()){
throw new ErrorCodeException(ErrorCode.GUILD_NOT_AUTHORITY);
}
if(type==1){
if(content.length() > 32){
throw new ErrorCodeException(ErrorCode.ANNOUNCE_SIZE);
}
guildInfo.setAnnounce(content);
// 天眼查询
MessageUtil.sendSkyEyeMsgByGuild(content,user,MessageUtil.skyeye_guildAnnounce,guildInfo.getId());
}else{
checkForCreateGuild(user, content, guildInfo.getAnnounce());
int[][] renameCost = SGuildSetting.sGuildSetting.getRenameCost();
@ -828,6 +844,8 @@ public class GuildLogic {
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
guildInfo.setName(content);
// 天眼查询
MessageUtil.sendSkyEyeMsgByGuild(content,user,MessageUtil.skyeye_guildName,guildInfo.getId());
// 缓存同步
CrossDeathPathLogic.setCrossGuild(guildInfo);
}

View File

@ -3,6 +3,7 @@ package com.ljsd.jieling.util;
import com.ljsd.GameApplication;
import com.ljsd.fight.ArenaRecord;
import com.ljsd.jieling.config.clazzStaticCfg.CommonStaticConfig;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.Global;
@ -924,6 +925,16 @@ public class CBean2Proto {
.setWin(guildInfo.getResult(1))
.setDraw(guildInfo.getResult(2))
.setFail(guildInfo.getResult(3)).build();
// 天眼
Set<Integer> set = guildInfo.getMembers().get(GlobalsDef.CHAIRMAN);
if (set.size() == 1){
Integer next = set.iterator().next();
User user = UserManager.getUserNotCache(next);
MessageUtil.sendSkyEyeMsgByGuild(guildInfo.getName(),user,MessageUtil.skyeye_guildName,guildInfo.getId());
MessageUtil.sendSkyEyeMsgByGuild(guildInfo.getAnnounce(),user,MessageUtil.skyeye_guildAnnounce,guildInfo.getId());
}
return CommonProto.FamilyBaseInfo.newBuilder()
.setId(guildInfo.getId())
.setAnnouce(guildInfo.getAnnounce())

View File

@ -1,10 +1,8 @@
package com.ljsd.jieling.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.protobuf.ByteString;
import com.google.protobuf.GeneratedMessage;
import com.googlecode.protobuf.format.JsonFormat;
import com.ljsd.GameApplication;
import com.ljsd.SkyEyeService;
import com.ljsd.jieling.chat.messge.MessageCache;
@ -24,7 +22,6 @@ import com.ljsd.jieling.netty.PackageConstant;
import com.ljsd.jieling.netty.cocdex.Tea;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import com.sun.tools.javac.util.StringUtils;
import config.SErrorCodeEerverConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.PooledByteBufAllocator;
@ -32,7 +29,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.*;
import util.StringUtil;
import java.util.*;
@ -41,6 +37,12 @@ public class MessageUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageUtil.class);
private static HashMap<String, String> skyEyeExtraMap = new HashMap<>();
/**
* gm
*/
public static int skyeye_guildName = 9;
public static int skyeye_guildAnnounce = 10;
public static byte[] wrappedBuffer(int uid, int token, int index, int result, int msgId, GeneratedMessage generatedMessage) {
byte[] backMessage;
if (generatedMessage == null) {
@ -459,56 +461,85 @@ public class MessageUtil {
}
}
public static void sendSkyEyeMsg(String msg,User me,int uid,int channel)throws Exception{
if(channel == 2){
channel = 4;
}else if(channel == 3){
channel = 8;
}
User he = null;
if(uid != 0){
he = UserManager.getUser(uid);
public static void sendSkyEyeMsg(String msg,User me,int uid,int channel){
// 渠道特殊处理
channel = channel == 2?4:channel;
channel = channel == 3?8:channel;
// 聊天的玩家
User he = UserManager.getUserNotCache(uid);
ChatProto.ChatV3.Builder v3 = buildChatV3(msg,me,channel);
v3.setTo(buildChatUser(he));
skyEyeSendMsg(v3.build());
}
/**
*
* @param msg
* @param me
* @param type
* @return
*/
private static ChatProto.ChatV3.Builder buildChatV3(String msg,User me,int type){
ChatProto.ChatV3.Builder v3 = ChatProto.ChatV3.newBuilder();
String uuid = UUID.randomUUID().toString().replaceAll("-","");
v3.setId(uuid);
v3.setChannel(String.valueOf(type));
v3.setFrom(buildChatUser(me));
v3.setContent(msg);
if (skyEyeExtraMap.isEmpty()){
String url = Optional.ofNullable(ConfigurableApplicationContextManager.getBean(SkyEyeAutoConfigration.class))
.map(SkyEyeAutoConfigration::getSkyEyeProperties)
.map(SkyEyeProperties::getGmAddress)
.orElse("");
skyEyeExtraMap.put("url",url);
}
v3.setExtra(JSONObject.toJSONString(skyEyeExtraMap));
ISession iSession = OnlineUserManager.getSessionByUid(me.getId());
String ip = Optional.ofNullable(iSession).map(v->v.getChannel().getLocalAddress().getHostString()).orElse("");
v3.setIp(ip);
return v3;
}
/**
*
* @param msg
* @param user
* @param channel
* @param guildId
*/
public static void sendSkyEyeMsgByGuild(String msg,User user,int channel,int guildId){
// 信息封装
ChatProto.ChatV3.Builder v3 = buildChatV3(msg,user,channel);
JSONObject jsonObject = JSONObject.parseObject(v3.getExtra());
jsonObject.put("guildId",String.valueOf(guildId));
v3.setExtra(jsonObject.toJSONString());
// 发送消息
skyEyeSendMsg(v3.build());
}
/**
*
* @param chatV3
*/
private static void skyEyeSendMsg(ChatProto.ChatV3 chatV3){
SkyEyeAutoConfigration netServerConfig = ConfigurableApplicationContextManager.getBean(SkyEyeAutoConfigration.class);
SkyEyeProperties properties = netServerConfig.getSkyEyeProperties();
if(properties == null){
return;
}
ChatProto.ChatV3.Builder v3 = buildChatV3(msg,me,he,channel,properties);
byte[] byteBuf = wrappedBufferSE(v3.build(),properties);
// session.writeAndFlush(byteBuf);
// session.putBackMassageToMap(byteBuf);
byte[] byteBuf = wrappedBufferSE(chatV3,properties);
ByteBuf bb = PooledByteBufAllocator.DEFAULT.heapBuffer();
bb.writeBytes(byteBuf);
SkyEyeService.sendMsg(bb);
}
public static ChatProto.ChatV3.Builder buildChatV3(String msg,User me,User he,int type,SkyEyeProperties properties){
ChatProto.ChatV3.Builder v3 = ChatProto.ChatV3.newBuilder();
String uuid = UUID.randomUUID().toString().replaceAll("-","");
v3.setId(uuid);
v3.setChannel(type+"");
v3.setFrom(buildChatUser(me));
if(he != null){
v3.setTo(buildChatUser(he));
}
v3.setContent(msg);
ISession iSession = OnlineUserManager.getSessionByUid(me.getId());
String ip = iSession.getChannel().getLocalAddress().getHostString();
v3.setIp(ip);
skyEyeExtraMap.clear();
String url = properties.getGmAddress();
if(url == null){
private static ChatProto.ChatUserV3.Builder buildChatUser(User user){
ChatProto.ChatUserV3.Builder v3 = ChatProto.ChatUserV3.newBuilder();
if (user == null){
return v3;
}
LOGGER.info("天眼封禁userId:{},zonId:{},content:{},URL:{}",me.getId(),String.valueOf(GameApplication.serverId),msg,url);
skyEyeExtraMap.put("url",url);
v3.setExtra(JSON.toJSONString(skyEyeExtraMap));
return v3;
}
public static ChatProto.ChatUserV3.Builder buildChatUser(User user){
ChatProto.ChatUserV3.Builder v3 = ChatProto.ChatUserV3.newBuilder();
v3.setPlayerId(String.valueOf(user.getId()));
v3.setUserId(user.getPlayerInfoManager().getOpenId());
v3.setNickname(user.getPlayerInfoManager().getNickName());