修改红中部分log信息

master
zhouwei 2026-03-04 17:18:21 +08:00
parent 4ccc1f3382
commit f05b0c2641
4 changed files with 76 additions and 41 deletions

View File

@ -392,11 +392,6 @@ public class EXGameController extends GameController {
robotConnectionManager.disconnectFromGameServer(connecId); robotConnectionManager.disconnectFromGameServer(connecId);
} }
}, 15, TimeUnit.SECONDS); }, 15, TimeUnit.SECONDS);
//15秒后还没有建立映射关系 加入可能失败
if (robotRoomMapping.get(robotUser.getConnecId()) == null) {
log.info("机器人{}加入房间{}超时,清理临时状态", robotId, roomId);
robotConnectionManager.disconnectFromGameServer(connecId);
}
} catch (Exception e) { } catch (Exception e) {
log.error("机器人加入房间超时", e); log.error("机器人加入房间超时", e);
} }

View File

@ -9,7 +9,8 @@ import com.taurus.core.events.IEventListener;
import com.taurus.core.plugin.redis.Redis; import com.taurus.core.plugin.redis.Redis;
import com.taurus.core.util.ICallback; import com.taurus.core.util.ICallback;
import com.taurus.core.util.StringUtil; import com.taurus.core.util.StringUtil;
import org.apache.log4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import robot.mj.business.AccountBusiness; import robot.mj.business.AccountBusiness;
import robot.mj.handler.HuNanHongZhong; import robot.mj.handler.HuNanHongZhong;
import robot.mj.info.RobotUser; import robot.mj.info.RobotUser;
@ -31,8 +32,8 @@ import static robot.mj.thread.ThreadPoolConfig.scheduleDelay;
*/ */
public class RobotConnectionManager { public class RobotConnectionManager {
private static final Map<String, HuNanHongZhong> huNanHongZhongInstances = new ConcurrentHashMap<>(); private final Map<String, HuNanHongZhong> huNanHongZhongInstances = new ConcurrentHashMap<>();
private static final Logger log = Logger.getLogger(RobotConnectionManager.class); private static final Logger log = LoggerFactory.getLogger(RobotConnectionManager.class);
//记录活跃连接 用于资源清理判断 //记录活跃连接 用于资源清理判断
private static final Set<String> activeConnections = ConcurrentHashMap.newKeySet(); private static final Set<String> activeConnections = ConcurrentHashMap.newKeySet();
@ -106,6 +107,7 @@ public class RobotConnectionManager {
return client; return client;
} catch (Exception e) { } catch (Exception e) {
log.error("连接到游戏服务器时发生异常: " + connecId, e);
return null; return null;
} }
} }
@ -114,7 +116,7 @@ public class RobotConnectionManager {
* *
*/ */
public void disconnectFromGameServer(String connecId) { public void disconnectFromGameServer(String connecId) {
log.info("开始主动断开连接: {"+connecId+"}"); log.info("开始主动断开连接{}", connecId);
RobotUser robotUser = robotRoomMapping.remove(connecId); RobotUser robotUser = robotRoomMapping.remove(connecId);
//标记连接为非活跃 //标记连接为非活跃
@ -130,28 +132,31 @@ public class RobotConnectionManager {
//清理所有集合数据以释放内存 //清理所有集合数据以释放内存
instance.getHongZhongCardInhand().clear(); instance.getHongZhongCardInhand().clear();
instance.getChuGuoCardInhand().clear(); instance.getChuGuoCardInhand().clear();
log.info("清理HuNanHongZhong集合数据: " + connecId); log.info("清理 HuNanHongZhong 集合数据:{}", connecId);
} }
//移除实例 //移除实例
huNanHongZhongInstances.remove(connecId); huNanHongZhongInstances.remove(connecId);
log.info("清理完成,当前活跃连接数: " + activeConnections.size() + ", 实例数: " + huNanHongZhongInstances.size()); log.info("清理完成,当前活跃连接数{}, 实例数:{}", activeConnections.size(), huNanHongZhongInstances.size());
} }
if (robotUser != null) { if (robotUser != null) {
TaurusClient client = robotUser.getClient(); TaurusClient client = robotUser.getClient();
if (client != null) { if (client != null) {
try { try {
//先检查连接状态,再断开
if (client.isConnected()) { if (client.isConnected()) {
client.killConnection(); client.killConnection();
log.info("客户端连接已强制断开:{}", connecId);
} else {
log.info("客户端连接已经断开:{}", connecId);
} }
log.info("客户端主动断开连接完成: {"+connecId+"}");
} catch (Exception e) { } catch (Exception e) {
log.error("断开客户端连接时发生异常: " + connecId + ", 错误: " + e.getMessage()); log.error("断开客户端连接时发生异常{}, 错误:{}", connecId, e.getMessage());
} }
} else { } else {
log.info("客户端连接不存在: {"+connecId+"}"); log.info("客户端连接不存在{}", connecId);
} }
//同时清理机器人房间映射 //同时清理机器人房间映射
@ -192,6 +197,7 @@ public class RobotConnectionManager {
IEventListener messageListener = new IEventListener() { IEventListener messageListener = new IEventListener() {
@Override @Override
public void handleEvent(Event event) { public void handleEvent(Event event) {
try {
//获取 msg //获取 msg
Message message = (Message) event.getParameter("msg"); Message message = (Message) event.getParameter("msg");
@ -199,11 +205,14 @@ public class RobotConnectionManager {
//回调协议号 //回调协议号
String command = message.command; String command = message.command;
//根据玩法ID处理不同的回调 //根据玩法 ID 处理不同的回调
if (StringUtil.isNotEmpty(command)) { if (StringUtil.isNotEmpty(command)) {
//直接处理协议 //直接处理协议
handleProtocol(command, message, client, connecId); handleProtocol(command, message, client, connecId);
} }
} catch (Exception e) {
log.error("处理游戏协议时发生异常connecId: {}, command: {}", connecId, ((Message)event.getParameter("msg")).command, e);
}
} }
}; };
@ -214,6 +223,9 @@ public class RobotConnectionManager {
Message message = (Message) event.getParameter("msg"); Message message = (Message) event.getParameter("msg");
SocketCode code = (SocketCode) event.getParameter("code"); SocketCode code = (SocketCode) event.getParameter("code");
if (code == SocketCode.Connect) {
log.info("连接建立成功connecId: {}", connecId);
}
} }
}; };
@ -393,7 +405,7 @@ public class RobotConnectionManager {
huNanHongZhong.getChuGuoCardInhand().clear(); huNanHongZhong.getChuGuoCardInhand().clear();
log.info("红中结算"); log.info("红中结算");
Integer type = param.getInt("type"); Integer type = param.getInt("type");
if (type == 1 || type == 2) { //为1 为大结算 为2为解散,都需要恢复数据 if (type == 1 || type == 2) { //为1为大结算 为2为解散
//更新机器人剩余数量 //更新机器人剩余数量
updateLeftoverRobot(Integer.parseInt(robotUser.getRobotId())); updateLeftoverRobot(Integer.parseInt(robotUser.getRobotId()));

View File

@ -23,7 +23,7 @@ import static robot.mj.thread.ThreadPoolConfig.getBusinessThreadPool;
public class HuNanHongZhong { public class HuNanHongZhong {
private static final Logger log = LoggerFactory.getLogger(HuNanHongZhong.class); private static final Logger log = LoggerFactory.getLogger(HuNanHongZhong.class);
public static int hongZhongCard = 0; public int hongZhongCard = 0;
//红中麻将手牌 //红中麻将手牌
private final List<Integer> hongZhongCardInhand = new ArrayList<>(); private final List<Integer> hongZhongCardInhand = new ArrayList<>();
@ -32,15 +32,14 @@ public class HuNanHongZhong {
private final List<Integer> hongZhongchuguopai = new ArrayList<>(); private final List<Integer> hongZhongchuguopai = new ArrayList<>();
// 玩家座位号 // 玩家座位号
public static int seat = 0; public int seat = 0;
public static int playerId = 0;
public int playerId = 0;
// 会话标识 // 会话标识
public static String session = ""; public String session = "";
// 访问令牌 // 访问令牌
public static String token = ""; public String token = "";
private static HongZhongSuanFaTest hongZhongSuanFaTest = new HongZhongSuanFaTest(); private static HongZhongSuanFaTest hongZhongSuanFaTest = new HongZhongSuanFaTest();
@ -55,6 +54,30 @@ public class HuNanHongZhong {
return hongZhongchuguopai; return hongZhongchuguopai;
} }
public int getSeat() {
return seat;
}
public void setSeat(int seat) {
this.seat = seat;
}
public int getPlayerId() {
return playerId;
}
public void setPlayerId(int playerId) {
this.playerId = playerId;
}
public int getHongZhongCard() {
return hongZhongCard;
}
public void setHongZhongCard(int hongZhongCard) {
this.hongZhongCard = hongZhongCard;
}
/** /**
@ -176,8 +199,9 @@ public class HuNanHongZhong {
if (param == null) { if (param == null) {
return null; return null;
} }
hongZhongCard = param.getInt("card"); //使用实例变量
log.info("出牌广播: {}", hongZhongCard); setHongZhongCard(param.getInt("card"));
log.info("出牌广播:{}", getHongZhongCard());
log.info("座位号:{}的用户出牌:{}", param.getInt("seat"), param.getInt("card")); log.info("座位号:{}的用户出牌:{}", param.getInt("seat"), param.getInt("card"));
} }
return null; return null;
@ -267,6 +291,10 @@ public class HuNanHongZhong {
for (int i = 0; i < cardList.size(); i++) { for (int i = 0; i < cardList.size(); i++) {
hongZhongCardInhand.add(cardList.getInt(i)); hongZhongCardInhand.add(cardList.getInt(i));
} }
//设置座位号
setSeat(param.getInt("seat"));
setPlayerId(param.getInt("player"));
if (hongZhongCardInhand.size() > 13) { if (hongZhongCardInhand.size() > 13) {
outCard(client); outCard(client);
log.info("机器人:{}为庄家,需要出牌, 牌为:{}", param.getInt("seat"), hongZhongCardInhand.get(0)); log.info("机器人:{}为庄家,需要出牌, 牌为:{}", param.getInt("seat"), hongZhongCardInhand.get(0));
@ -391,7 +419,7 @@ public class HuNanHongZhong {
hongZhongSuanFaTest.separateAndAnalyzeHand(hongZhongCardInhand); hongZhongSuanFaTest.separateAndAnalyzeHand(hongZhongCardInhand);
// 红中麻将出牌 // 红中麻将出牌
String hongzhongOutCard = hongZhongSuanFaTest.outCardSuanFa(hongZhongCardInhand, hongZhongCard); String hongzhongOutCard = hongZhongSuanFaTest.outCardSuanFa(hongZhongCardInhand, getHongZhongCard());
// String hongzhongOutCard = hongZhongSuanFaTest.outCardSuanFa(list, hongZhongCard); // String hongzhongOutCard = hongZhongSuanFaTest.outCardSuanFa(list, hongZhongCard);
ITObject params = TObject.newInstance(); ITObject params = TObject.newInstance();
int cardToOut; int cardToOut;
@ -456,7 +484,7 @@ public class HuNanHongZhong {
log.debug("删除出过的牌组 card: {}", card); log.debug("删除出过的牌组 card: {}", card);
log.debug("删除出过的牌组 type: {}", type); log.debug("删除出过的牌组 type: {}", type);
log.debug("删除出过的牌组 from_seat: {}", from_seat); log.debug("删除出过的牌组 from_seat: {}", from_seat);
log.debug("机器人 seat: {}", seat); log.debug("机器人 seat: {}", getSeat());
if (type == 2 || type == 3 || type == 5) { // 碰,杠 if (type == 2 || type == 3 || type == 5) { // 碰,杠
getChuGuoCardInhand().remove(Integer.valueOf(card)); getChuGuoCardInhand().remove(Integer.valueOf(card));

View File

@ -35,7 +35,7 @@ public class ThreadPoolConfig {
//添加定时任务线程池 //添加定时任务线程池
private static final ScheduledExecutorService SCHEDULED_EXECUTOR_SERVICE = private static final ScheduledExecutorService SCHEDULED_EXECUTOR_SERVICE =
new ScheduledThreadPoolExecutor(2, new ThreadFactory() { new ScheduledThreadPoolExecutor(10, new ThreadFactory() {
private final AtomicInteger threadNumber = new AtomicInteger(1); private final AtomicInteger threadNumber = new AtomicInteger(1);
@Override @Override
public Thread newThread(Runnable r) { public Thread newThread(Runnable r) {