From 14e86450a4569b80adbea869413da408f4155da2 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Fri, 25 Oct 2019 11:57:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=91=E9=A9=AC=E7=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/core/HandlerLogicThread.java | 2 +- .../com/ljsd/jieling/db/redis/RedisKey.java | 1 + .../com/ljsd/jieling/db/redis/RedisUtil.java | 16 +++++- .../jieling/exception/ErrorCodeException.java | 2 +- .../java/com/ljsd/jieling/globals/Global.java | 2 +- .../com/ljsd/jieling/kefu/Cmd_sendmsg.java | 52 +++++++++++++++++-- .../ljsd/jieling/logic/dao/PlayerManager.java | 2 +- .../ljsd/jieling/thread/task/MinuteTask.java | 2 + .../com/ljsd/jieling/util/MessageUtil.java | 32 ++++++++++++ 9 files changed, 102 insertions(+), 9 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java b/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java index 102d19731..3f5cc0afb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/HandlerLogicThread.java @@ -171,7 +171,7 @@ public class HandlerLogicThread extends Thread{ //内部codeErr统一处理 if(e instanceof ErrorCodeException){ int errCode = ErrorUtil.getExceptionErrorCodeValue(e); - LOGGER.error("\nuser:"+ session.getUid()); + LOGGER.error("\nAn unusual ErrorCodeException occurred for the user::use"+ session.getUid()); if (errCode <= 0) { //打印堆栈定位错误 LOGGER.error(ErrorUtil.getExceptionStackTraceFileLineAndMethod(e)); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 4693bae98..5d435fe5b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -186,6 +186,7 @@ public class RedisKey { public static final String MATCH_SERVER_INFO = "MATCH_SERVER_INFO"; public static final String LOGIC_SERVER_INFO = "LOGIC_SERVER_INFO"; public static final String BLOODY_SERVER_INFO = "BLOODY_SERVER_INFO"; + public static final String SYSMSG = "SYSMSG"; public final static String CDKEY = "CDKEY"; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index e57792d78..d32290027 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -713,12 +713,12 @@ public class RedisUtil { } //操作sortset score<<32+time - public void zsetAddOneOffsetByTime(String key, String uid, int score){ + public void zsetAddOneOffsetByTime(String key, String value, int score){ for (int i = 0; i < MAX_TRY_TIMES; i++) { try { long s= (long)score<<40; long sort = s+(0xFFFFFFFFFFL-(int)(System.currentTimeMillis()/1000)); - redisTemplate.opsForZSet().add(key, uid, sort); + redisTemplate.opsForZSet().add(key, value, sort); return; } catch (Exception e) { TimeUtils.sleep(FAILED_SLEEP); @@ -795,6 +795,18 @@ public class RedisUtil { return null; } + public Set> getZsetRangeWithScores(String type,String key, long start, long end){ + String rkey = getKey(type, key); + for (int i = 0; i < MAX_TRY_TIMES; i++) { + try { + return redisTemplate.opsForZSet().rangeWithScores(rkey, start, end); + } catch (Exception e) { + TimeUtils.sleep(FAILED_SLEEP); + } + } + return null; + } + public Long getZSetreverseRank(String type,String key, String value){ String rkey = getKey(type,key); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCodeException.java b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCodeException.java index 63e05d7ae..67dee2372 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCodeException.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCodeException.java @@ -56,7 +56,7 @@ public class ErrorCodeException extends Exception { } public String toString() { - return "[CODE: " + this.errorCode.code() + "][" + this.errorCode.message() + "] " + super.getMessage(); + return "[CODE: " + this.errorCode.code() + "][" + this.errorCode.message() + "][" +((super.getMessage()==null)?"":super.getMessage())+ "][" +((params!=null&¶ms.size()!=0)?params.toString():"")+"] "; } public List getParams() { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java index 3367cb1fc..bfbbf9c76 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java @@ -57,7 +57,7 @@ public interface Global { int RENAME_SIZE_ERROR = 10003; int SHOW_TIPS_ERROR = 20000; - //跑马灯状态 + //跑马灯状态 需要配表 int LUCKY_LUCK = 1; //吉运 int DILIGENT = 2; //勤勉 int LUCKCAT = 3; //招财猫 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_sendmsg.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_sendmsg.java index 1ca6fa531..540d4b0c1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_sendmsg.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_sendmsg.java @@ -1,20 +1,66 @@ package com.ljsd.jieling.kefu; +import com.google.gson.Gson; +import com.ljsd.GameApplication; import com.ljsd.jieling.chat.logic.ChatLogic; +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.globals.Global; import com.ljsd.jieling.network.server.ProtocolsManager; +import com.ljsd.jieling.protocols.ChatProto; +import com.ljsd.jieling.util.CBean2Proto; +import config.SSpecialConfig; public class Cmd_sendmsg extends GmAbstract { @Override public boolean exec(String[] args) throws Exception { - if (args.length != 1) { + if (args.length < 3) { return false; } - String content = args[0]; - ChatLogic.getInstance().sendSysChatMessage(content, Global.GMMSG, 0, 0, 0, 0, 0, 0); + + int speed = Integer.valueOf(args[0]); + int multime = Integer.valueOf(args[1]); + double sendTime = args.length <= 3 ? 0 : Float.valueOf(args[2]); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 3; i < args.length; i++) { + if (i != 3) { + stringBuilder.append(" "); + } + stringBuilder.append(args[i]); + } + + String content = stringBuilder.toString(); + Gson gson = new Gson(); + ChatProto.ChatInfo.Builder chatInfo = ChatProto.ChatInfo.newBuilder(); + chatInfo.setItemId(0); + chatInfo.setMessageId(0); + chatInfo.setTimes(System.currentTimeMillis()); + chatInfo.setMsg(content); + chatInfo.setType(0); + chatInfo.setMessageType(Global.GMMSG); + + if (speed <= 0) { + chatInfo.setSpeed(SSpecialConfig.getIntegerValue(SSpecialConfig.LAMP_TEXT_SPEED)); + } else { + chatInfo.setSpeed(speed); + } + if (multime <= 0) { + chatInfo.setMultiple(1); + } else { + chatInfo.setMultiple(multime); + } + + if (sendTime != 0f) { + String key = RedisKey.getKey(RedisKey.SYSMSG, "", false); + RedisUtil.getInstence().zsetAddOne(key, gson.toJson(chatInfo), sendTime); + } else { + long messageId = RedisUtil.getInstence().increment(GameApplication.serverId + RedisKey.CHAT_SYS_MSG_ID + GameApplication.serverId); + chatInfo.setMessageId(messageId); + MessageCache.addSystemMsg(chatInfo.build(), messageId); + } + return true; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index 1a2870a5b..606abe2bb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -127,7 +127,7 @@ public class PlayerManager extends MongoBase { } public void setNickName(String nickName) throws Exception { - // updateString("nickName", nickName); + updateString("nickName", nickName); this.nickName = nickName; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java index c80e6946c..9cb8353f4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java @@ -25,6 +25,7 @@ import com.ljsd.jieling.logic.question.QuestionLogic; import com.ljsd.jieling.logic.store.BuyGoodsLogic; import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.network.server.ProtocolsManager; +import com.ljsd.jieling.util.MessageUtil; import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,6 +48,7 @@ public class MinuteTask extends Thread { LOGGER.info("online use num::"+ OnlineUserManager.sessionMap.entrySet().size()); HotfixUtil.getInstance().doWork("../conf/hotfix.json"); ActivityLogic.getInstance().checkActiviyStatus(); + MessageUtil.checkAndSendMsg(); STableManager.updateTablesWithTableNames(true); ActivityLogic.getInstance().checkSecretBoxSeason(); StoreLogic.checkGlobalStore(false); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java index 6540d2b88..73a5082c7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java @@ -1,9 +1,14 @@ package com.ljsd.jieling.util; +import com.google.gson.Gson; import com.google.protobuf.GeneratedMessage; +import com.ljsd.GameApplication; +import com.ljsd.jieling.chat.messge.MessageCache; import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.core.SimpleTransaction; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCodeException; import com.ljsd.jieling.exception.ErrorUtil; import com.ljsd.jieling.globals.Global; @@ -17,6 +22,7 @@ import com.ljsd.jieling.protocols.*; import config.SErrorCodeEerverConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.redis.core.ZSetOperations; import java.util.ArrayList; import java.util.Arrays; @@ -347,4 +353,30 @@ public class MessageUtil { */ List combine(List list); } + + public static void checkAndSendMsg(){ + Set> adventureBossRankInfo= RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.SYSMSG,"", 0,-1); + int rank = 0; + long current = System.currentTimeMillis(); + for(ZSetOperations.TypedTuple item : adventureBossRankInfo){ + if(item.getScore()<=current){ + try { + long messageId = RedisUtil.getInstence().increment(GameApplication.serverId + RedisKey.CHAT_SYS_MSG_ID+ GameApplication.serverId); + ChatProto.ChatInfo.Builder builder= new Gson().fromJson(item.getValue(),ChatProto.ChatInfo.Builder.class); + builder.setMessageId(messageId); + MessageCache.addSystemMsg(builder.build(),messageId); + }catch (Exception e){ + LOGGER.error(e+""); + return; + } + rank++; + }else { + return; + } + } + if(rank>0){ + String key = RedisKey.getKey(RedisKey.SYSMSG, "", false); + RedisUtil.getInstence().removeZSetRangeByRank(key, 0, rank); + } + } }