From 9b10c7705b7ca908e491a47a0b93640e3c069970 Mon Sep 17 00:00:00 2001 From: gaojie Date: Wed, 5 Jun 2019 14:37:03 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=81=8A=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/handler/GetChatMessageHandler.java | 24 ++ .../handler}/SendChatInfoHandler.java | 14 +- .../ljsd/jieling/chat/logic/ChatLogic.java | 102 ++++++++ .../messge}/ChatWorldMessage.java | 11 +- .../chat => chat/messge}/LoopQueue.java | 4 +- .../jieling/chat/messge/MessageCache.java | 34 +++ .../com/ljsd/jieling/db/redis/RedisKey.java | 7 + .../com/ljsd/jieling/db/redis/RedisUtil.java | 2 - .../chat/SwitchWorldChannelHandler.java | 25 -- .../ljsd/jieling/logic/chat/ChatLogic.java | 39 --- .../jieling/logic/chat/ChatRedisKeyUtil.java | 43 --- .../jieling/logic/chat/MessageChatCache.java | 40 --- .../ljsd/jieling/logic/chat/MessageType.java | 41 --- .../jieling/mq/RedisCleanRecordThread.java | 28 -- .../java/com/ljsd/jieling/mq/RedisRecord.java | 26 -- .../jieling/mq/RedisRecordSendThread.java | 72 ----- .../mq/consumeer/RedisChatConsumeHandler.java | 102 -------- .../mq/consumeer/RedisConsumeHandler.java | 213 --------------- .../ljsd/jieling/mq/work/ChatMsgWorker.java | 51 ---- .../com/ljsd/jieling/mq/work/PushWorker.java | 59 ----- .../com/ljsd/jieling/util/CBean2Proto.java | 32 +++ .../com/ljsd/jieling/util/ChatSendUtils.java | 245 ------------------ test/src/main/java/ExcelUtils.java | 2 +- .../main/java/network/client/NettyClient.java | 43 ++- 24 files changed, 252 insertions(+), 1007 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/chat/handler/GetChatMessageHandler.java rename serverlogic/src/main/java/com/ljsd/jieling/{handler/chat => chat/handler}/SendChatInfoHandler.java (51%) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java rename serverlogic/src/main/java/com/ljsd/jieling/{logic/chat => chat/messge}/ChatWorldMessage.java (60%) rename serverlogic/src/main/java/com/ljsd/jieling/{logic/chat => chat/messge}/LoopQueue.java (96%) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/chat/messge/MessageCache.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/chat/SwitchWorldChannelHandler.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/chat/ChatLogic.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/chat/ChatRedisKeyUtil.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/chat/MessageChatCache.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/chat/MessageType.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/mq/RedisCleanRecordThread.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/mq/RedisRecord.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/mq/RedisRecordSendThread.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/mq/consumeer/RedisChatConsumeHandler.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/mq/consumeer/RedisConsumeHandler.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/mq/work/ChatMsgWorker.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/mq/work/PushWorker.java delete mode 100644 serverlogic/src/main/java/com/ljsd/jieling/util/ChatSendUtils.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/chat/handler/GetChatMessageHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/chat/handler/GetChatMessageHandler.java new file mode 100644 index 000000000..087460144 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/chat/handler/GetChatMessageHandler.java @@ -0,0 +1,24 @@ +package com.ljsd.jieling.chat.handler; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.chat.logic.ChatLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.ChatProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class GetChatMessageHandler extends BaseHandler{ + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.GET_CHAT_MESSAGE_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + ChatProto.GetChatMessageInfoRequest getChatMessageInfoRequest = ChatProto.GetChatMessageInfoRequest.parseFrom(netData.parseClientProtoNetData()); + int chatType = getChatMessageInfoRequest.getChatType(); + ChatLogic.getInstance().getAllChatMessageInfo(iSession,chatType); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/chat/SendChatInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/chat/handler/SendChatInfoHandler.java similarity index 51% rename from serverlogic/src/main/java/com/ljsd/jieling/handler/chat/SendChatInfoHandler.java rename to serverlogic/src/main/java/com/ljsd/jieling/chat/handler/SendChatInfoHandler.java index 3a85c01ae..423741d48 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/chat/SendChatInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/chat/handler/SendChatInfoHandler.java @@ -1,7 +1,7 @@ -package com.ljsd.jieling.handler.chat; +package com.ljsd.jieling.chat.handler; import com.ljsd.jieling.handler.BaseHandler; -import com.ljsd.jieling.logic.chat.ChatLogic; +import com.ljsd.jieling.chat.logic.ChatLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.ChatProto; @@ -9,7 +9,7 @@ import com.ljsd.jieling.protocols.MessageTypeProto; import org.springframework.stereotype.Component; @Component -public class SendChatInfoHandler extends BaseHandler { +public class SendChatInfoHandler extends BaseHandler{ @Override public MessageTypeProto.MessageType getMessageCode() { return MessageTypeProto.MessageType.SEND_CHAT_INFO_REQUEST; @@ -17,8 +17,10 @@ public class SendChatInfoHandler extends BaseHandler { @Override public void process(ISession iSession, PacketNetData netData) throws Exception { - byte[] bytes = netData.parseClientProtoNetData(); - ChatProto.SendChatInfoRequest sendChatInfoRequest = ChatProto.SendChatInfoRequest.parseFrom(bytes); - ChatLogic.getInstance().sendChatInfo(iSession,sendChatInfoRequest); + ChatProto.SendChatInfoReqest sendChatInfoReqest = ChatProto.SendChatInfoReqest.parseFrom(netData.parseClientProtoNetData()); + int chatType = sendChatInfoReqest.getChatType(); + String message = sendChatInfoReqest.getMessage(); + int friendId = sendChatInfoReqest.getFriendId(); + ChatLogic.getInstance().sendChatMessage(iSession,chatType,message,friendId); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java new file mode 100644 index 000000000..1b3f83e63 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java @@ -0,0 +1,102 @@ +package com.ljsd.jieling.chat.logic; + + +import com.ljsd.GameApplication; +import com.ljsd.jieling.chat.messge.MessageCache; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.ChatProto; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.CBean2Proto; +import com.ljsd.jieling.util.MessageUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class ChatLogic { + + public static class Instance { + public final static ChatLogic instance = new ChatLogic(); + } + + public static ChatLogic getInstance() { + return ChatLogic.Instance.instance; + } + + + /** + * 获取聊天信息 + * @param chatType + */ + public void getAllChatMessageInfo(ISession iSession, int chatType) throws Exception { + int uid = iSession.getUid(); + List chatInfoList = new ArrayList<>(); + switch (chatType){ + case 0: // 系统 + chatInfoList = MessageCache.sysMsg.getObjs(0); + break; + case 1: //世界 + chatInfoList = MessageCache.worldMsg.getObjs(0); + break; + case 2: //公会 + chatInfoList = MessageCache.guildMsg.getObjs(0); + break; + case 3: //好友 + Map hmget = RedisUtil.getInstence().hmget(GameApplication.serverId + RedisKey.CUser_Chat + uid); + if (hmget != null && hmget.size() != 0){ + for (Map.Entry entry :hmget.entrySet()){ + String[] split = entry.getKey().toString().split("#"); + String message = String.valueOf(entry.getValue()); + int userid = Integer.parseInt(split[0]); + long time = Long.parseLong(split[1]); + User user = UserManager.getUser(userid); + CBean2Proto.getChatInfoBuilder(user,message,time); + } + } + break; + } + ChatProto.GetChatMessageInfoResponse getChatMessageInfoResponse = ChatProto.GetChatMessageInfoResponse + .newBuilder().addAllChatInfo(chatInfoList) + .build(); + MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_CHAT_MESSAGE_REPONSE_VALUE, getChatMessageInfoResponse, true); + } + + /** + * 发送聊天 + * @param iSession + * @param chatType + * @param message + */ + public void sendChatMessage(ISession iSession, int chatType, String message,int friendId) throws Exception { + int uid = iSession.getUid(); + User user = UserManager.getUser(uid); + long nowTime = System.currentTimeMillis(); + switch (chatType){ + case 1: //世界 + ChatProto.ChatInfo chatInfo = CBean2Proto.getChatInfoBuilder(user,message,nowTime); + MessageCache.addWordMsg(chatInfo); + break; + case 2: //公会 + chatInfo = CBean2Proto.getChatInfoBuilder(user,message,nowTime); + MessageCache.addGuildMsg(chatInfo); + break; + case 3: //好友 + RedisUtil.getInstence().hset(GameApplication.serverId +RedisKey.CUser_Chat+friendId,uid +"#"+ nowTime,message, -1); + break; + } + MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.SEND_CHAT_INFO_RESPONSE_VALUE, null, true); + } + + + /** + * 系统消息跑马灯 + */ + public static void sendSysChatMessage(String message,int type,int startTime, int endTime, int priorityLevel, int frequency) { + ChatProto.ChatInfo chatInfo = CBean2Proto.getSysChatInfoBuilder(message,type,startTime,endTime,priorityLevel,frequency); + MessageCache.addSystemMsg(chatInfo); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/ChatWorldMessage.java b/serverlogic/src/main/java/com/ljsd/jieling/chat/messge/ChatWorldMessage.java similarity index 60% rename from serverlogic/src/main/java/com/ljsd/jieling/logic/chat/ChatWorldMessage.java rename to serverlogic/src/main/java/com/ljsd/jieling/chat/messge/ChatWorldMessage.java index 7044edabb..d9b7df635 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/ChatWorldMessage.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/chat/messge/ChatWorldMessage.java @@ -1,13 +1,12 @@ -package com.ljsd.jieling.logic.chat; - +package com.ljsd.jieling.chat.messge; import com.ljsd.jieling.protocols.ChatProto; public class ChatWorldMessage { private long messsageId; - private ChatProto.ChatIndication msg; + private ChatProto.ChatInfo msg; - public ChatWorldMessage(long messsageId, ChatProto.ChatIndication msg) { + public ChatWorldMessage(long messsageId, ChatProto.ChatInfo msg) { this.messsageId = messsageId; this.msg = msg; } @@ -20,11 +19,11 @@ public class ChatWorldMessage { this.messsageId = messsageId; } - public ChatProto.ChatIndication getMsg() { + public ChatProto.ChatInfo getMsg() { return msg; } - public void setMsg(ChatProto.ChatIndication msg) { + public void setMsg(ChatProto.ChatInfo msg) { this.msg = msg; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/LoopQueue.java b/serverlogic/src/main/java/com/ljsd/jieling/chat/messge/LoopQueue.java similarity index 96% rename from serverlogic/src/main/java/com/ljsd/jieling/logic/chat/LoopQueue.java rename to serverlogic/src/main/java/com/ljsd/jieling/chat/messge/LoopQueue.java index e076d6ef8..af2758171 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/LoopQueue.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/chat/messge/LoopQueue.java @@ -1,4 +1,4 @@ -package com.ljsd.jieling.logic.chat; +package com.ljsd.jieling.chat.messge; import java.lang.reflect.Array; import java.util.ArrayList; @@ -26,7 +26,7 @@ public class LoopQueue { private long diffTime ; private int initLength =20; - public LoopQueue(int maxlen,int getMaxLen, long diffTime) { + public LoopQueue(int maxlen, int getMaxLen, long diffTime) { this.maxlen = maxlen; queueList = (Item[])Array.newInstance(Item.class, maxlen); for(int i=0; i SGameSetting.getGameSetting().getWorldTalking()){ - MessageUtil.sendErrorResponse(iSession,0, MessageTypeProto.MessageType.SWITCH_WORLDCHANNEL_RESPONSE_VALUE,"参数错误"); - return; - } - //移除自己所在的频道。 - - } - - public void sendChatInfo(ISession iSession, ChatProto.SendChatInfoRequest sendChatInfoRequest) { - } - - -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/ChatRedisKeyUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/ChatRedisKeyUtil.java deleted file mode 100644 index 7d3ae6a69..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/ChatRedisKeyUtil.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ljsd.jieling.logic.chat; - -/** - * Created by Administrator on 2016/3/17. - */ -public class ChatRedisKeyUtil { - - private static String separator = "_" ; - private static String worldMessage = "wmsg" ; - private static String unionMessage = "umsg" ; - private static String privateMessage = "pmsg" ; - private static String systemMessage = "smsg" ; - private static String endTailed = "key"; - private static String sendMessage = "send"; - - public static String getWorldMessageKey(){ - return worldMessage+separator+endTailed; - } - - public static String getUnionMessageKey(int unionId){ - return unionMessage+separator+unionId+separator+endTailed; - } - - public static String getPrivateMessageKey(String sender, String targetUid) { - return privateMessage + separator + sender + separator + targetUid + separator + endTailed; - } - - // 存谁给 targetUid 发送过消息 - public static String getPrivateSenderKey(int targetUid) { - return privateMessage + separator + targetUid + separator + endTailed; - } - - //暂时不用 - public static String getSystemMessageKey(){ - return systemMessage+separator+endTailed; - } - - // 存sendUid 给谁发送过消息 - public static String getTargetSenderKey(int sendUid) { - return sendMessage + separator + sendUid + separator + endTailed; - } - -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/MessageChatCache.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/MessageChatCache.java deleted file mode 100644 index 8c7c5ad1d..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/MessageChatCache.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ljsd.jieling.logic.chat; - - -import com.ljsd.jieling.network.session.ISession; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.util.HashMap; -import java.util.Map; - -public class MessageChatCache { - private static final Logger LOGGER = LoggerFactory.getLogger(MessageChatCache.class); - private static final int capuatiy =200; - private static final int msgInterval = 24*3600*1000; - private static final int perCaught= 50; - - public static Map worldMsgMap = new HashMap<>(); - public static LoopQueue sysMsg = new LoopQueue(capuatiy,perCaught,msgInterval); - public static LoopQueue redEnvelopeMsg = new LoopQueue(capuatiy,perCaught,msgInterval); - - - //type 0:系统 1:世界聊天 - public static void getMessage(ISession session){ - - - } - public static void addWordMsg(int channel,ChatWorldMessage wordMessage){ - if(!worldMsgMap.containsKey(channel)){ - worldMsgMap.put(channel,new LoopQueue(capuatiy, perCaught, msgInterval)); - } - worldMsgMap.get(channel).push(wordMessage,wordMessage.getMesssageId()); - } - - public static void addSystemMsg(ChatWorldMessage sysMessage){ - sysMsg.push(sysMessage,sysMessage.getMesssageId()); - } - - public static void addRedEnvelopeMsg(ChatWorldMessage sysMessage){ - redEnvelopeMsg.push(sysMessage,sysMessage.getMesssageId()); - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/MessageType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/MessageType.java deleted file mode 100644 index 779b5c482..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/chat/MessageType.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ljsd.jieling.logic.chat; - -/** - * Created by Administrator on 2016/2/26. - */ -public enum MessageType { - - SystemMsg(0), - WorldMsg(1), - UnionMsg(2), - TeamMsg(3), - PrivateMsg(4); - - private final int value; - - private MessageType(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - - - public static String findByValueString(int value) { - switch (value) { - case 0: - return "system_msg"; - case 1: - return "world_msg"; - case 2: - return "union_Msg"; - case 3: - return "team_Msg"; - case 4: - return "private_msg"; - default: - return null; - } - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisCleanRecordThread.java b/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisCleanRecordThread.java deleted file mode 100644 index 12b392e8f..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisCleanRecordThread.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ljsd.jieling.mq; - -import com.ljsd.jieling.db.redis.RedisUtil; -import org.slf4j.LoggerFactory; - - -public class RedisCleanRecordThread extends Thread{ - private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(RedisCleanRecordThread.class); - - private String topic; - private String type; - private int deleteNums; - - public RedisCleanRecordThread(String topic, String type,int deleteNums) { - this.topic = topic; - this.type = type; - this.deleteNums = deleteNums; - } - - @Override - public void run() { - try { - // RedisUtil.getInstence().removeZSetRange(type,topic,deleteNums); - }catch (Exception e){ - LOGGER.error("e",e); - } - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisRecord.java b/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisRecord.java deleted file mode 100644 index d85663264..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisRecord.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.ljsd.jieling.mq; - -public class RedisRecord { - private String key; - private String value; - private String topic; - - public RedisRecord(String topic,String key, String value) { - this.topic = topic; - this.key = key; - this.value = value; - - } - - public String value(){ - return value; - } - - public String key(){ - return key; - } - - public String getTopic() { - return topic; - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisRecordSendThread.java b/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisRecordSendThread.java deleted file mode 100644 index 81b580995..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/mq/RedisRecordSendThread.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.ljsd.jieling.mq; - -import com.google.gson.Gson; -import com.ljsd.jieling.db.redis.RedisUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.redis.core.DefaultTypedTuple; -import org.springframework.data.redis.core.ZSetOperations; - -import java.util.*; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingQueue; - -public class RedisRecordSendThread extends Thread{ - private static final Logger LOGGER = LoggerFactory.getLogger(RedisRecordSendThread.class); - private final BlockingQueue redisRecords = new ArrayBlockingQueue(500); - private Gson gson = new Gson(); - public static RedisRecordSendThread getInstance() { - return Instance.instance; - } - - public static class Instance { - public final static RedisRecordSendThread instance = new RedisRecordSendThread(); - } - - private RedisRecordSendThread(){ - - } - - @Override - public void run() { - while (true){ - dowork(); - } - } - private void dowork() { - try { - List willSend = new ArrayList<>(); - redisRecords.drainTo(willSend,10); - if(willSend.isEmpty()){ - try { - Thread.sleep(2); - return; - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - Set> result = new HashSet<>(willSend.size()); - Map>> map = new HashMap<>(); - for(RedisRecord redisRecord : willSend){ - String itemInfo = gson.toJson(redisRecord); - String topic = redisRecord.getTopic(); - long increment = RedisUtil.getInstence().increment(topic+"_num"); - if(!map.containsKey(topic)){ - map.put(topic,new LinkedHashSet<>()); - } - map.get(topic).add(new DefaultTypedTuple(itemInfo,(double)increment)); - } - for(Map.Entry>> item : map.entrySet()){ - String topic = item.getKey(); - Set> value = item.getValue(); - RedisUtil.getInstence().zsetAddAall(topic,value); - } - - }catch (Exception e){ - LOGGER.error("the exception",e); - } - } - public void addEntry(RedisRecord redisRecord){ - redisRecords.add(redisRecord); - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/mq/consumeer/RedisChatConsumeHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/mq/consumeer/RedisChatConsumeHandler.java deleted file mode 100644 index 2de6264ae..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/mq/consumeer/RedisChatConsumeHandler.java +++ /dev/null @@ -1,102 +0,0 @@ -//package com.ljsd.jieling.mq.consumeer; -// -//import com.google.common.util.concurrent.ThreadFactoryBuilder; -//import com.google.gson.Gson; -//import com.jmfy.xianxia.AreaManager; -//import com.jmfy.xianxia.core.GlobalsDef; -//import com.jmfy.xianxia.core.util.RedisUtil; -//import com.jmfy.xianxia.kafka.RedisCleanRecordThread; -//import com.jmfy.xianxia.kafka.RedisConsumeHandler; -//import com.jmfy.xianxia.kafka.RedisRecord; -//import com.jmfy.xianxia.redisProperties.RedisUserKey; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.data.redis.core.StringRedisTemplate; -// -//import java.util.Set; -//import java.util.concurrent.*; -// -//public class RedisChatConsumeHandler extends Thread{ -// private static final Logger LOGGER = LoggerFactory.getLogger(RedisConsumeHandler.class); -// -// private long start; -// private StringRedisTemplate stringRedisTemplate; -// private static String topic; -// -// private ExecutorService executors; -// -// private int nums; -// -// -// -// -// private Gson gson = new Gson(); -// -// public static RedisChatConsumeHandler getInstance() { -// return Instance.instance; -// } -// -// public static class Instance { -// public final static RedisChatConsumeHandler instance = new RedisChatConsumeHandler(); -// } -// -// -// private RedisChatConsumeHandler(){ -// -// } -// -// @Override -// public void run() { -// while (true){work();} -// } -// -// public void init(int workerNum){ -// topic = "msg_chat_"+ AreaManager.areaId; -// Long msgNum = RedisUtil.getInstence().getObject(RedisUserKey.RedisRecordMQ, topic+"_num", Long.class, GlobalsDef.REDIS_OVER_TIME); -// if(msgNum == null) { -// msgNum = 0L; -// } -// -// start =msgNum+1; -// ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("RedisConsumeHandler-%d").build(); -// executors = new ThreadPoolExecutor(workerNum, -// workerNum, 0L, TimeUnit.MILLISECONDS, -// new ArrayBlockingQueue(10000), -// threadFactory, new ThreadPoolExecutor.CallerRunsPolicy()); -// this.start(); -// } -// -// public void work(){ -// try { -// Set result = RedisUtil.getInstence().getZset(RedisUserKey.RedisRecordMQ,topic,start, start + 30); -// if(result == null || result.isEmpty()){ -// try { -// Thread.sleep(20); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// return; -// } -// start = result.size() + start; -// for(String key : result){ -// RedisRecord redisRecord = gson.fromJson(key, RedisRecord.class); -// if (!redisRecord.value().isEmpty()) { -// nums++; -// executors.submit(new MessageWorker(redisRecord)); -// } -// } -// if(nums>100){ -// nums=0; -// executors.submit(new RedisCleanRecordThread(topic,RedisUserKey.RedisRecordMQ,50)); -// } -// }catch (Exception e){ -// LOGGER.error("the exception",e); -// } -// -// } -// -// public static void resubsribe(){ -// String changeTopics = "msg_chat_" + AreaManager.areaId; -// topic = changeTopics; -// } -//} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/mq/consumeer/RedisConsumeHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/mq/consumeer/RedisConsumeHandler.java deleted file mode 100644 index d66b284a8..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/mq/consumeer/RedisConsumeHandler.java +++ /dev/null @@ -1,213 +0,0 @@ -//package com.ljsd.jieling.mq.consumeer; -// -//import com.google.common.util.concurrent.ThreadFactoryBuilder; -//import com.google.gson.Gson; -//import com.ljsd.jieling.core.GlobalsDef; -//import com.ljsd.jieling.db.redis.RedisUtil; -//import com.ljsd.jieling.exception.ErrorCode; -//import com.ljsd.jieling.mq.RedisCleanRecordThread; -//import com.ljsd.jieling.mq.RedisRecord; -//import com.ljsd.jieling.mq.work.PushWorker; -//import com.ljsd.jieling.network.server.ProtocolsManager; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.data.redis.cache.RedisCache; -//import org.springframework.data.redis.core.StringRedisTemplate; -// -//import java.util.ArrayList; -//import java.util.Set; -//import java.util.concurrent.*; -// -//public class RedisConsumeHandler extends Thread{ -// private static final Logger LOGGER = LoggerFactory.getLogger(RedisConsumeHandler.class); -// -// private long start; -// private StringRedisTemplate stringRedisTemplate; -// private static String topic; -// -// private ExecutorService executors; -// private int nums; -// private String idipTopic; -// private long idipStart; -// private int idipNums; -// -// private Gson gson = new Gson(); -// private ArrayList delayMessages = new ArrayList(); -// private int curDelayMessageIndex = -1; -// -// public static RedisConsumeHandler getInstance() { -// return Instance.instance; -// } -// -// public static class Instance { -// public final static RedisConsumeHandler instance = new RedisConsumeHandler(); -// } -// -// private static class DelayMessage { -// public String topKey; -// public String topValue; -// public long firstDealTime; -// } -// -// private RedisConsumeHandler(){ -// -// } -// -// @Override -// public void run() { -// while (true){ -// work(); -// } -// } -// -// public void init(int workerNum){ -// topic = "msg_"+ Server; -// idipTopic = Application.serverId + ":idip"; -// Long msgNum = RedisUtil.getInstence().getObject(RedisUserKey.RedisRecordMQ, topic+"_num", Long.class, GlobalsDef.REDIS_OVER_TIME); -// if(msgNum == null){ -// msgNum =-1L; -// } -// start =msgNum+1; -// -// Long idipMsgNum = RedisUtil.getInstence().getObject(RedisUserKey.RedisRecordIdipMQ, idipTopic+"_num", Long.class, GlobalsDef.REDIS_OVER_TIME); -// if(idipMsgNum == null){ -// idipMsgNum =-1L; -// } -// idipStart =idipMsgNum+1; -// ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("RedisConsumeHandler-%d").build(); -// executors = new ThreadPoolExecutor(workerNum, -// workerNum, 0L, TimeUnit.MILLISECONDS, -// new ArrayBlockingQueue(10000), -// threadFactory, new ThreadPoolExecutor.CallerRunsPolicy()); -// start(); -// } -// -// -// //优先处理idip消息 -// public boolean processIdIpMsg(){ -// Set result = RedisUtil.getInstence().getZset(RedisUserKey.RedisRecordIdipMQ,idipTopic,idipStart, idipStart + 30); -// if(result == null || result.isEmpty()){ -// return false; -// } -// idipStart = result.size() + idipStart; -// for(String key : result){ -// RedisRecord redisRecord = gson.fromJson(key, RedisRecord.class); -// if (!redisRecord.value().isEmpty()) { -// idipNums++; -// Runnable worker = getWorkerByTopic(redisRecord); -// if (worker != null) { -// String[] split = redisRecord.value().split(":"); -// if (RedisUserKey.Kick_Old_Key.equals(split[0])) { -// KafkaConsumerHandler.DelayMessage delayMessage = new KafkaConsumerHandler.DelayMessage(); -// delayMessage.topKey = split[0]; -// delayMessage.topValue = redisRecord.value(); -// delayMessage.firstDealTime = System.currentTimeMillis() / 1000; -// delayMessages.add(delayMessage); -// } -// executors.submit(worker); -// } -// } -// } -// if(idipNums>30){ -// idipNums=0; -// executors.submit(new RedisCleanRecordThread(topic,RedisUserKey.RedisRecordIdipMQ,20)); -// } -// return true; -// } -// -// private void processKickMsg(){ -// if (delayMessages.size() != 0) { -// for (int i = 0; i < delayMessages.size(); i++) { -// KafkaConsumerHandler.DelayMessage delayMessage = delayMessages.get(i); -// String topValue = delayMessage.topValue; -// String[] split = topValue.split(":"); -// if (System.currentTimeMillis() / 1000 > (delayMessage.firstDealTime + Integer.parseInt(split[2]))) { -// curDelayMessageIndex = i; -// kickOldUser(Integer.parseInt(split[1]), Integer.parseInt(split[3])); -// delayMessages.remove(curDelayMessageIndex); -// } -// } -// } -// } -// -// public void work(){ -// try { -// processKickMsg(); -// if(!processIdIpMsg()){ -// Set result = RedisUtil.getInstence().getZset(RedisUserKey.RedisRecordMQ,topic,start, start + 30); -// if(result == null || result.isEmpty()){ -// try { -// Thread.sleep(200); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// return; -// } -// start = result.size() + start; -// for(String key : result){ -// RedisRecord redisRecord = gson.fromJson(key, RedisRecord.class); -// if (!redisRecord.value().isEmpty()) { -// Runnable worker = getWorkerByTopic(redisRecord); -// if (worker != null) { -// nums++; -// executors.submit(worker); -// } -// } -// } -// if(nums>100){ -// nums=0; -// executors.submit(new RedisCleanRecordThread(topic,RedisUserKey.RedisRecordMQ,50)); -// } -// } -// -// }catch (Exception e){ -// LOGGER.error("the exception",e); -// } -// -// } -// -// private Runnable getWorkerByTopic(RedisRecord record) { -// if (record.key().startsWith("tlog")) { -// return new TLogWorker(record); -// } -// if (record.key().startsWith("push")) { -// return new PushWorker(record); -// } -//// else if (topic.startsWith("")){ -//// return null; -//// } -// -// return null; -// } -// -// public static void resubsribe(){ -// String changeTopics = "msg_" + AreaManager.areaId; -// topic = changeTopics; -// } -// -// private void kickOldUser(int uid, int type) { -// //type 0:全服玩家踢下线 1:单服玩家踢下线 -// LOGGER.info("idipKickOldUser-->uid={},type={}", uid, type); -// if (type == 0) { -// kickOldAllUser(); -// } else { -// PlayerLogic.getInstance().kickOldOneUser(uid); -// } -// } -// -// private void kickOldAllUser() { -// Set onlineUserId = OnlineUserLogics.getOnlineIdSet(); -// LOGGER.info("kickOldAllUser-->onlineNum={}", onlineUserId.size()); -// for (Integer userId : onlineUserId) { -// if (OnlineUserLogics.isOnline(userId)) { -// ProtocolsManager.getInstance().kickOldUser(userId, "", -// ErrorCode.IDIP_KIC_OLD, "IDIP_KIC_OLD!!!", 0); -// //清除缓存 -// ProtocolsManager.getInstance().cleanResponseCache(userId, true); -// RedisCache.cleanCache(userId); -// } -// } -// } -// -// -//} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/mq/work/ChatMsgWorker.java b/serverlogic/src/main/java/com/ljsd/jieling/mq/work/ChatMsgWorker.java deleted file mode 100644 index 6c1be588f..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/mq/work/ChatMsgWorker.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ljsd.jieling.mq.work; - -import com.ljsd.jieling.mq.RedisRecord; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ChatMsgWorker implements Runnable { - - private static final Logger LOGGER = LoggerFactory.getLogger(ChatMsgWorker.class); - - //private ConsumerRecord consumerRecord; - - private RedisRecord consumerRecord; - - public ChatMsgWorker(RedisRecord consumerRecord) { - this.consumerRecord = consumerRecord; - } - - @Override - public void run() { - try{ - /* if (consumerRecord.key().equals(MyKafkaConstance.PRIVATE_MSG)) { - - ChatSendUtils.getInstance().sendToFrontendPrivate(consumerRecord.value()); - LOGGER.debug("run->msg={};consume private", consumerRecord.value()); - - } else if (consumerRecord.key().equals(MyKafkaConstance.SYSTEM_MSG)) { - - ChatSendUtils.sendToFrontendSystem(consumerRecord.value()); - LOGGER.debug("run->msg={};consume system", consumerRecord.value()); - - } else if (consumerRecord.key().equals(MyKafkaConstance.WORLD_MSG)) { - LOGGER.debug("run->msg={};receive world", consumerRecord.value()); - ChatSendUtils.sendToFrontendWorld(consumerRecord.value()); - - } else if (consumerRecord.key().equals(MyKafkaConstance.UNION_MSG)) { - ChatSendUtils.sendToFrontendFamily(consumerRecord.value()); - LOGGER.debug("run->msg={};consume union", consumerRecord.value()); - } else if (consumerRecord.key().equals(MyKafkaConstance.UNION_SYSTEM_MSG)) { - ChatSendUtils.sendToFrontendFamilySystem(consumerRecord.value()); - LOGGER.debug("run->msg={};consume union system", consumerRecord.value()); - }else if (consumerRecord.key().equals(MyKafkaConstance.TEAM_MSG)) { - ChatSendUtils.sendToFrontendTeam(consumerRecord.value()); - LOGGER.debug("run->msg={};consume team ", consumerRecord.value()); - }*/ - - }catch (Exception e){ - LOGGER.error("run->msg={}", e.getMessage(), e); - } - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/mq/work/PushWorker.java b/serverlogic/src/main/java/com/ljsd/jieling/mq/work/PushWorker.java deleted file mode 100644 index 41b321216..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/mq/work/PushWorker.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.ljsd.jieling.mq.work; - - -import com.ljsd.jieling.mq.RedisRecord; - -import com.ljsd.jieling.protocols.ChatProto; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - - - - -public class PushWorker implements Runnable { - - private static final Logger LOGGER = LoggerFactory.getLogger(PushWorker.class); - - - private RedisRecord consumerRecord; - - public PushWorker(RedisRecord consumerRecord) { - this.consumerRecord = consumerRecord; - } - - @Override - public void run() { - try { - Thread.currentThread().setName("PushWorker"); - String[] valueArray = consumerRecord.value().split(":"); - String key = valueArray[0]; - LOGGER.info("PushWorker key={},valueArray={}", key, consumerRecord.value()); - } catch (Exception e) { - LOGGER.error("run->msg={}", e.getMessage(), e); - } - } - - - private ChatProto.ChatIndication getChatIndicationProto(int serverId, String valueArray) { - String[] split = valueArray.split("\\|"); - ChatProto.ChatIndication chatIndication = ChatProto.ChatIndication.newBuilder() - .setSenderId(1001) - .setSenderServerId(serverId) - .setSenderName("IDIP") - .setSenderlevel(100) - .setSenderimg("i_h3_41") - .setSendervip(10) - .setTimes(Integer.parseInt(split[0])) - .setMsgType(0) - .setMsg(split[2]) - .setIsFamilySystem(2) - .setEndTime(Integer.parseInt(split[1])) - .setPriorityLevel(Integer.parseInt(split[3])) - .setFrequency(Integer.parseInt(split[4])) - .setIsSystem(Integer.parseInt(split[6])) - .setClientVersion(split[7]) - .build(); - return chatIndication; - } -} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index bcca340a6..f54ccd3bb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -5,7 +5,9 @@ import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.handler.map.TemporaryItems; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.protocols.ChatProto; import com.ljsd.jieling.protocols.CommonProto; +import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ; import java.util.ArrayList; import java.util.List; @@ -211,4 +213,34 @@ public class CBean2Proto { .setRank(rank) .build(); } + + + public static ChatProto.ChatInfo getChatInfoBuilder(User user,String message,long time) { + ChatProto.ChatInfo.Builder chatInfo = ChatProto.ChatInfo.newBuilder(); + PlayerManager playerInfoManager = user.getPlayerInfoManager(); + chatInfo.setSenderId(Integer.parseInt(user.getId())); + chatInfo.setSenderName(playerInfoManager.getNickName()); + chatInfo.setSenderlevel(playerInfoManager.getLevel()); + chatInfo.setSendervip(playerInfoManager.getVipLevel()); + chatInfo.setTimes(time); + chatInfo.setMsg(message); + chatInfo.setHead(playerInfoManager.getHead()); + chatInfo.setFrame(playerInfoManager.getFamilyId()); + return chatInfo.build(); + } + + public static ChatProto.ChatInfo getSysChatInfoBuilder(String message,int type,int startTime, int endTime, int priorityLevel, int frequency) { + ChatProto.ChatInfo.Builder chatInfo = ChatProto.ChatInfo.newBuilder(); + chatInfo.setTimes(System.currentTimeMillis()); + chatInfo.setMsg(message); + chatInfo.setType(type); + if (type == 1){ + chatInfo.setStartTime(startTime); + chatInfo.setEndTime(endTime); + chatInfo.setPriorityLevel(priorityLevel); + chatInfo.setFrequency(frequency); + } + return chatInfo.build(); + + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ChatSendUtils.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ChatSendUtils.java deleted file mode 100644 index c6331bb4a..000000000 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ChatSendUtils.java +++ /dev/null @@ -1,245 +0,0 @@ -package com.ljsd.jieling.util; - - -import com.ljsd.jieling.core.GlobalsDef; -import com.ljsd.jieling.logic.OnlineUserManager; -import com.ljsd.jieling.logic.chat.ChatRedisKeyUtil; -import com.ljsd.jieling.logic.chat.MessageType; -import com.ljsd.jieling.netty.NettyGameSession; -import com.ljsd.jieling.protocols.ChatProto; -import io.netty.channel.Channel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.redis.core.StringRedisTemplate; -import java.io.UnsupportedEncodingException; -import java.util.*; -import java.util.concurrent.TimeUnit; - -/** - * Created by Administrator on 2016/1/26. - */ -public class ChatSendUtils { - - private static final Logger LOGGER = LoggerFactory.getLogger(ChatSendUtils.class); - - private static ChatSendUtils instance; - - public static ChatSendUtils getInstance(){ - if (instance == null) { - instance = new ChatSendUtils(); - } - return instance; - } - - private StringRedisTemplate redisTemplate; - - - - - public static void sendToFrontendWorld(String msg) { - if (msg == null || msg.isEmpty()) { - return; - } - String[] msgArray = msg.split("#"); - ChatProto.ChatIndication chatIndication = getChatProto(msgArray); - // MessageChatCache.addWordMsg(new ChatWorldMessage(Long.parseLong(msgArray[16]),Long.parseLong(msgArray[17]),chatIndication)); - // MessageChatCache.addWordMsg(new ChatWorldMessage(Long.parseLong(msgArray[16]),chatIndication)); - } - - - public void sendToFrontendPrivate(String msg) { - if (msg == null || msg.isEmpty()) { - return; - } - String[] msgArray = msg.split("#"); - ChatProto.ChatIndication chatIndication = getChatProto(msgArray); - - NettyGameSession mySession = OnlineUserManager.getSessionByUid(Integer.parseInt(msgArray[0])); - NettyGameSession targetSession = OnlineUserManager.getSessionByUid(Integer.parseInt(msgArray[9])); - if (mySession != null) { - sendPrivateMsgIndication(mySession.getCtx().channel(), chatIndication); - } - if (targetSession != null) { - sendPrivateMsgIndication(targetSession.getCtx().channel(), chatIndication); - } - persistLeaveMessage(msgArray[0],msgArray[9],msg); -// else { -// persistLeaveMessage(msgArray[0],msgArray[9],msg); -// persistLeaveMessage(msgArray[9],msgArray[0],msg); -// } - } - - - - public static void sendToFrontendFamily(String msg) { - - } - - - - private void persistLeaveMessage(String myId, String targetId, String msg){ - String sendersKey = ChatRedisKeyUtil.getPrivateSenderKey(Integer.parseInt(targetId)); - String targetSenderKey = ChatRedisKeyUtil.getTargetSenderKey(Integer.parseInt(myId)); - List senderList = redisTemplate.opsForList().range(sendersKey, 0, -1); - List rangeList = redisTemplate.opsForList().range(targetSenderKey, 0, -1); - addChatToRedis(myId, sendersKey, senderList); - addChatToRedis(targetId, targetSenderKey, rangeList); - String key = ChatRedisKeyUtil.getPrivateMessageKey(myId, targetId); - List msgList = redisTemplate.opsForList().range(key, 0, -1); - if (msgList.size() > 10) { - redisTemplate.opsForList().rightPop(key); - } - redisTemplate.opsForList().leftPush(key, msg); - } - - private void addChatToRedis(String targetId, String targetSenderKey, List rangeList) { - if (!rangeList.isEmpty()){ - String ranger = rangeList.get(0); - if (!ranger.contains(targetId)){ - redisTemplate.opsForList().rightPop(targetSenderKey); - redisTemplate.opsForList().leftPush(targetSenderKey, ranger + "#" + targetId); - } - }else{ - redisTemplate.opsForList().leftPush(targetSenderKey, targetId); - } - if (targetSenderKey.contains("send")){ - redisTemplate.expire(targetSenderKey, GlobalsDef.REDIS_OVER_TIME,TimeUnit.SECONDS); - } - } - - public static void sendToFrontendSystem(String msg) { - if (msg == null || msg.isEmpty()) { - return; - } - String[] msgArray = msg.split("\\|"); - ChatProto.ChatIndication chatIndication = getSystemChatProto(msgArray); - // MessageChatCache.addSystemMsg(new ChatWorldMessage(Long.parseLong(msgArray[14]),Long.parseLong(msgArray[15]),chatIndication)); - // MessageChatCache.addSystemMsg(new ChatWorldMessage(Long.parseLong(msgArray[14]),chatIndication)); - } - - private static void sendPrivateMsgIndication(Channel targetChannel, ChatProto.ChatIndication chatIndication) { - targetChannel.writeAndFlush(chatIndication); - } - - - public List getOffLineChatInfo(int userId, int serverId, MessageType messageType) throws UnsupportedEncodingException { - List chatIndications = new ArrayList<>(); - List msgs = null; - if (messageType == MessageType.PrivateMsg) { - String sendersKey = ChatRedisKeyUtil.getPrivateSenderKey(userId); - List senderList = redisTemplate.opsForList().range(sendersKey, 0, -1); - if (senderList.isEmpty()){ - return chatIndications; - } - String sender = senderList.get(0); - String[] senderArray = sender.split("#"); - for (String suid : senderArray){ - String key = ChatRedisKeyUtil.getPrivateMessageKey(suid, userId+""); - List messageByte = redisTemplate.opsForList().range(key,0,-1); - if (messageByte==null || messageByte.isEmpty()){ - continue; - } - if (msgs == null) { - msgs = new ArrayList<>(); - } - Collections.sort(messageByte); - msgs.addAll(messageByte); - // delete - redisTemplate.delete(key); - } - // delete senders - redisTemplate.delete(sendersKey); - } else if (messageType == MessageType.WorldMsg) { - String key = ChatRedisKeyUtil.getWorldMessageKey(); - msgs = redisTemplate.opsForList().range(key, 0, -1); - } else if (messageType == MessageType.SystemMsg) { - String key = ChatRedisKeyUtil.getSystemMessageKey(); - msgs = redisTemplate.opsForList().range(key, 0, -1); - }else if (messageType == MessageType.TeamMsg){ - } - if (msgs==null || msgs.isEmpty()){ - return chatIndications; - } - for (String msg : msgs) { - String[] msgArray = msg.split("#"); - ChatProto.ChatIndication chatIndication = getChatProto(msgArray); - chatIndications.add(chatIndication); - } - return chatIndications; - } - - private static ChatProto.ChatIndication getChatProto(String[] msgArray) { - int msgType = Integer.parseInt(msgArray[7]); - ChatProto.ChatIndication chatIndication = ChatProto.ChatIndication.newBuilder() - .setSenderId(Integer.parseInt(msgArray[0])) - .setSenderServerId(Integer.parseInt(msgArray[1])) - .setSenderName(msgArray[2]) - .setSenderlevel(Integer.parseInt(msgArray[3])) - .setSenderimg(msgArray[4]) - .setSendervip(Integer.parseInt(msgArray[5])) - .setTimes(Long.parseLong(msgArray[6])) - .setMsgType(Integer.parseInt(msgArray[7])) - .setMsg(msgArray[8]) - .setTargetId(Integer.parseInt(msgArray[9])) - .setVoiceMsg(msgArray[11]) - .setVoiceTime(Integer.parseInt(msgArray[12])) - .setUnionID(msgArray[13]) - .setFrame(Integer.parseInt(msgArray[14])) - .setHead(Integer.parseInt(msgArray[15])) - .setArenaIcon(msgArray[18]) - .setArenaRank(Integer.parseInt(msgArray[19])) - .setMsgChildType(Integer.parseInt(msgArray[20])) - .build(); - if( msgType == 0 || msgType == 1){ - chatIndication = chatIndication.toBuilder().setMessageId(Long.parseLong(msgArray[16])).build(); - } - /* if(chatIndication.getMsgChildType() == GlobalsDef.RED_MSG){ - ChatProto.ChatIndication redChatbuild = ChatProto.ChatIndication.newBuilder().mergeFrom(chatIndication).setMsgType(9).build(); - MessageChatCache.addRedEnvelopeMsg(new ChatWorldMessage(Long.parseLong(msgArray[16]),redChatbuild)); - }*/ - return chatIndication; - } - - - private static ChatProto.ChatIndication getGuildSysChatProto(String msg, String guildId) { - ChatProto.ChatIndication chatIndication = ChatProto.ChatIndication.newBuilder() - .setSenderId(0) - .setSenderServerId(0) - .setSenderName("") - .setSenderlevel(0) - .setSenderimg("") - .setSendervip(0) - .setTimes(0) - .setMsgType(2) - .setMsg(msg) - .setTargetId(0) - .setVoiceMsg("") - .setVoiceTime(0) - .setUnionID(guildId) - .setFrame(0) - .setIsFamilySystem(1) - .build(); - return chatIndication; - } - - - private static ChatProto.ChatIndication getSystemChatProto(String[] msgArray) { - ChatProto.ChatIndication chatIndication = ChatProto.ChatIndication.newBuilder() - .setSenderId(Integer.parseInt(msgArray[0])) - .setSenderServerId(Integer.parseInt(msgArray[1])) - .setSenderName(msgArray[2]) - .setSenderlevel(Integer.parseInt(msgArray[3])) - .setSenderimg(msgArray[4]) - .setSendervip(Integer.parseInt(msgArray[5])) - .setTimes(Long.parseLong(msgArray[6])) - .setMsgType(Integer.parseInt(msgArray[7])) - .setMsg(msgArray[8]) - .setVoiceMsg(msgArray[11]) - .setVoiceTime(Integer.parseInt(msgArray[12])) - .setPlayCount(Integer.parseInt(msgArray[13])) - .setMessageId(Long.parseLong((msgArray[14]))) - .build(); - return chatIndication; - } - -} diff --git a/test/src/main/java/ExcelUtils.java b/test/src/main/java/ExcelUtils.java index c3d0ba63d..279762424 100644 --- a/test/src/main/java/ExcelUtils.java +++ b/test/src/main/java/ExcelUtils.java @@ -8,7 +8,7 @@ import java.util.*; public class ExcelUtils { private static boolean isWrite = true; - private static String excelPath ="C:/ljsd/demo/tmp/base_data/"; //excel 文件 + private static String excelPath ="C:/ljsd/demo/tmp/"; //excel 文件 private static String path = "conf/server/"; private static Set oldFileNames = new HashSet<>(); private static String javaFilePath = "serverlogic/src/main/java/com/ljsd/jieling/config/"; diff --git a/test/src/main/java/network/client/NettyClient.java b/test/src/main/java/network/client/NettyClient.java index 41efd1034..d49a2b3a4 100644 --- a/test/src/main/java/network/client/NettyClient.java +++ b/test/src/main/java/network/client/NettyClient.java @@ -2,10 +2,7 @@ package network.client; import com.google.protobuf.*; import com.ljsd.jieling.netty.cocdex.Tea; -import com.ljsd.jieling.protocols.CommonProto; -import com.ljsd.jieling.protocols.HeroInfoProto; -import com.ljsd.jieling.protocols.MessageTypeProto; -import com.ljsd.jieling.protocols.PlayerInfoProto; +import com.ljsd.jieling.protocols.*; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.EventLoopGroup; @@ -15,13 +12,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class NettyClient { private static final Logger LOGGER = LoggerFactory.getLogger(NettyClient.class); - private static int uid = 10003124; + private static int uid = 10003663; private static int msgIndex = 1; private static int token=543242; @@ -45,10 +43,15 @@ public class NettyClient { //--------------------------------------------------------------------------------------------------------- handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.LOGIN_REQUEST_VALUE)); + handler.sendRequest_jieling(makeFinalMessage(getChatInfo(), MessageTypeProto.MessageType.GET_CHAT_MESSAGE_REQUEST_VALUE)); + handler.sendRequest_jieling(makeFinalMessage(sendChatInfo(), MessageTypeProto.MessageType.SEND_CHAT_INFO_REQUEST_VALUE)); + //获取商店信息 +// handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.GET_STARE_INFOS_REQUEST_VALUE)); +// handler.sendRequest_jieling(makeFinalMessage(buyStoreItem(), MessageTypeProto.MessageType.BUY_STORE_ITEM_REQUEST_VALUE)); // for (int i = 0; i < 100; i++){ // handler.sendRequest_jieling(makeFinalMessage(gameMessage, MessageTypeProto.MessageType.RANDOMNAME_REQUEST_VALUE)); // } - handler.sendRequest_jieling(makeFinalMessage(reName(), MessageTypeProto.MessageType.RENAME_REQUEST_VALUE)); +// handler.sendRequest_jieling(makeFinalMessage(reName(), MessageTypeProto.MessageType.RENAME_REQUEST_VALUE)); // handler.sendRequest_jieling(makeFinalMessage(getHero(), MessageTypeProto.MessageType.GET_HEROINFO_REQUEST_VALUE)); // handler.sendRequest_jieling(makeFinalMessage(getRandomHero(), MessageTypeProto.MessageType.HERO_RAND_REQQUEST_VALUE)); // handler.sendRequest_jieling(makeFinalMessage(gmRequest(11001), MessageTypeProto.MessageType.GM_REQUEST_VALUE)); @@ -70,6 +73,33 @@ public class NettyClient { // handler.sendRequest_jieling(makeFinalMessage(createEquip(3001), MessageTypeProto.MessageType.WORKSHOP_EQUIP_CREATE_REQUEST_VALUE)); + } + + private static MessageLite getChatInfo() { + ChatProto.GetChatMessageInfoRequest getChatMessageInfoRequest = ChatProto.GetChatMessageInfoRequest.newBuilder() + .setChatType(1) + .build(); + return getChatMessageInfoRequest; + + } + + private static MessageLite sendChatInfo() { + ChatProto.SendChatInfoReqest sendChatInfoReqest = ChatProto.SendChatInfoReqest.newBuilder() + .setChatType(1) + .setMessage("lalalaal") + .setFriendId(1) + .build(); + return sendChatInfoReqest; + } + + private static MessageLite buyStoreItem() { + PlayerInfoProto.BuyStoreItemRequest buyStoreItemRequest = PlayerInfoProto.BuyStoreItemRequest.newBuilder() + .setStoreId(1) + .setItemId(2) + .setItemNum(1) + .build(); + return buyStoreItemRequest; + } private static MessageLite reName() { @@ -108,6 +138,7 @@ public class NettyClient { private static byte[] makeFinalMessage(MessageLite request, int msgNum) { byte[] messageData = request.toByteArray(); + System.out.println(Arrays.toString(messageData)); byte[] packetData = new byte[messageData.length + 16]; Tea.intToByte(packetData, 0, uid); //uid Tea.intToByte(packetData, 4, token); //token From c3ba340c11f8579f7ab361999818f5b010f632fb Mon Sep 17 00:00:00 2001 From: wangyuan Date: Wed, 5 Jun 2019 15:25:06 +0800 Subject: [PATCH 2/3] fix --- luafight/Modules/Battle/Logic/Base/Effect.lua | 20 ++++++++++++++----- .../Modules/Battle/Logic/Base/RoleData.lua | 16 +++++++++------ luafight/Modules/Battle/Logic/Base/Skill.lua | 3 +-- .../Modules/Battle/Logic/Misc/BattleUtil.lua | 4 ++-- luafight/Modules/Battle/Logic/RoleLogic.lua | 12 +++++++++++ .../jieling/handler/GetPlayerInfoHandler.java | 2 +- .../jieling/logic/dao/UserMissionManager.java | 3 +++ 7 files changed, 44 insertions(+), 16 deletions(-) diff --git a/luafight/Modules/Battle/Logic/Base/Effect.lua b/luafight/Modules/Battle/Logic/Base/Effect.lua index 1ff2a9d37..b41f63aa7 100644 --- a/luafight/Modules/Battle/Logic/Base/Effect.lua +++ b/luafight/Modules/Battle/Logic/Base/Effect.lua @@ -260,15 +260,25 @@ local effectList = { end end) end, - --吸取[a]%的[b],持续[c]秒 - --a[float],b[属性],c[float] + --吸取[a]%的[b],持续[c]秒(属于增益),累积不高于自身该属性的[d]% + --a[float],b[属性],c[float],d[float] [16] = function(caster, target, args, interval) local f1 = args[1] - local dt = args[2] + local pro = args[2] local f2 = args[3] + local f3 = args[4] BattleLogic.WaitForTrigger(interval, function () - target:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[dt], f1, 4)) - caster:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[dt], f1, 2)) + --计算上限值 + local total = caster.data:GetOrginData(propertyList[pro]) * (1 + f3) + --计算预期吸取后的值 + local targetValue = caster:GetRoleData(propertyList[pro]) + target:GetRoleData(propertyList[pro]) * f1 + --计算有效吸收值 + local delta = min(targetValue, total) - caster:GetRoleData(propertyList[pro]) + + if delta > 0 then + target:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro], delta, 3)) + caster:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro], delta, 1)) + end end) end, --造成[a]%的[b]伤害,如果是[c],有[d]%必定暴击 diff --git a/luafight/Modules/Battle/Logic/Base/RoleData.lua b/luafight/Modules/Battle/Logic/Base/RoleData.lua index ab8a992c7..446865b55 100644 --- a/luafight/Modules/Battle/Logic/Base/RoleData.lua +++ b/luafight/Modules/Battle/Logic/Base/RoleData.lua @@ -3,11 +3,8 @@ RoleData.__index = RoleData local max = math.max local floor = math.floor function RoleData.New() - local instance = {role=0, data={0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0}} + local instance = {role=0, data={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0}, + orginData={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0}} setmetatable(instance, RoleData) return instance end @@ -16,6 +13,7 @@ function RoleData:Init(role, data) self.role = role for i=1, #data do self.data[i] = floor(data[i] * 100000 + 0.5) / 100000 --进行精度处理,避免前后端计算不一致 + self.orginData[i] = floor(data[i] * 100000 + 0.5) / 100000 --进行精度处理,避免前后端计算不一致 end end @@ -25,6 +23,12 @@ function RoleData:GetData(name) end end +function RoleData:GetOrginData(name) + if self.orginData[name] then + return self.orginData[name] + end +end + function RoleData:SetValue(name, value) if self.data[name] then local delta = self.data[name] @@ -51,7 +55,7 @@ end function RoleData:AddPencentValue(name, pencent) if self.data[name] then - return self:AddValue(name, self.data[name] * pencent) + return self:AddValue(name, self.orginData[name] * pencent) end return 0 end diff --git a/luafight/Modules/Battle/Logic/Base/Skill.lua b/luafight/Modules/Battle/Logic/Base/Skill.lua index 015906934..1669ccb5e 100644 --- a/luafight/Modules/Battle/Logic/Base/Skill.lua +++ b/luafight/Modules/Battle/Logic/Base/Skill.lua @@ -139,18 +139,17 @@ function Skill:Cast() BattleLogic.SetAggro(self.owner) if not self.isTeamSkill then + local time = max(8-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 1.5) if self.owner.superSkill == self then self.sp = 0 self.spPass = floor(self.cd * BattleLogic.GameFrameRate) BattleLogic.AddMP(self.owner.camp, 10) if self.owner.skill then local skill = self.owner.skill - local time = max(8-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 1.5) skill.sp = 0 skill.spPass = floor(time * BattleLogic.GameFrameRate) end else - local time = max(8-self.owner:GetRoleData(RoleDataName.Speed)/(8*(self.owner:GetRoleData(RoleDataName.Level)+10)), 1.5) self.sp = 0 self.spPass = floor(time * BattleLogic.GameFrameRate) BattleLogic.AddMP(self.owner.camp, 8) diff --git a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua index 666d5de67..fb7d83236 100644 --- a/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua +++ b/luafight/Modules/Battle/Logic/Misc/BattleUtil.lua @@ -91,8 +91,8 @@ function BattleUtil.ChooseTarget(role, chooseId) end) elseif chooseWeight == 7 then BattleUtil.Sort(arr, function(a, b) - local r1 = a:GetRoleData(RoleDataName.MagicDefence) - local r2 = b:GetRoleData(RoleDataName.MagicDefence) + local r1 = a:GetSkillCD() + local r2 = b:GetSkillCD() if sort == 1 then return r1 > r2 else return r1 < r2 end end) end diff --git a/luafight/Modules/Battle/Logic/RoleLogic.lua b/luafight/Modules/Battle/Logic/RoleLogic.lua index 2944543ab..2613ce601 100644 --- a/luafight/Modules/Battle/Logic/RoleLogic.lua +++ b/luafight/Modules/Battle/Logic/RoleLogic.lua @@ -122,6 +122,18 @@ function RoleLogic:CanCastSkill() return self.enable and not self.ctrl_slient and not self.IsDebug and BattleLogic.GetSkillUsable(self.camp) end +function RoleLogic:GetSkillCD() + local cd = 0 + if self.skill and not self.superSkill then + cd = max(self.skill.spPass - self.skill.sp, 0) + elseif not self.skill and self.superSkill then + cd = max(self.superSkill.spPass - self.superSkill.sp, 0) + elseif self.skill and self.superSkill then + cd = max(self.skill.spPass - self.skill.sp, 0) + max(self.superSkill.spPass - self.superSkill.sp, 0) + end + return cd +end + function RoleLogic:GetRoleData(property) local tarPro = self.data:GetData(property) local item diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index 4fa5b1827..aff360940 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -61,7 +61,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ //竞技场免费次数刷新 ArenaLogic.getInstance().flushFreeUseTimes(user); PlayerLogic.getInstance().vipflushEveryDay(user); - user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH); + user.getUserMissionManager().onGameEvent(user, GameEvent.DAILY_REFRESH,0); } playerInfoManager.setLoginTime(TimeUtils.now()); Map guidePoints = playerInfoManager.getGuidePoints(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index 7b9d78c0c..5e9f7300a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -40,6 +40,9 @@ public class UserMissionManager extends MongoBase { Set missionIds = SDailyTasksConfig.config.keySet(); int type = (int)parm[0]; if(type == 0){ + if( dailyMissionIdsType.getDoingMissionIds().isEmpty() && dailyMissionIdsType.getFinishMissionIds().isEmpty() && dailyMissionIdsType.getRewardedMissionIds().isEmpty() ){ + return; + } dailyMissionIdsType.getDoingMissionIds().clear(); dailyMissionIdsType.getFinishMissionIds().clear(); dailyMissionIdsType.getRewardedMissionIds().clear(); From 3d32285959b47cf2af59c39d8cd6768e85a9d8da Mon Sep 17 00:00:00 2001 From: wangyuan Date: Wed, 5 Jun 2019 15:29:15 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix=E6=8A=BD=E5=8D=A1=E6=AC=A1=E6=95=B0?= =?UTF-8?q?=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/logic/activity/ActivityLogic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index c011babfd..a3805609d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -350,7 +350,7 @@ public class ActivityLogic { int count = secretBoxManager.getCount(); int[][] randDrop = new int[randCount][]; - for(int i=0;i