修改红中部分log信息
parent
4ccc1f3382
commit
f05b0c2641
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
//标记连接为非活跃
|
//标记连接为非活跃
|
||||||
|
|
@ -124,34 +126,37 @@ public class RobotConnectionManager {
|
||||||
//清理连接数据
|
//清理连接数据
|
||||||
if (connecId != null) {
|
if (connecId != null) {
|
||||||
HuNanHongZhong.removeFromRedis(connecId);
|
HuNanHongZhong.removeFromRedis(connecId);
|
||||||
|
|
||||||
HuNanHongZhong instance = huNanHongZhongInstances.get(connecId);
|
HuNanHongZhong instance = huNanHongZhongInstances.get(connecId);
|
||||||
if (instance != null) {
|
if (instance != null) {
|
||||||
//清理所有集合数据以释放内存
|
//清理所有集合数据以释放内存
|
||||||
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,17 +197,21 @@ public class RobotConnectionManager {
|
||||||
IEventListener messageListener = new IEventListener() {
|
IEventListener messageListener = new IEventListener() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(Event event) {
|
public void handleEvent(Event event) {
|
||||||
//获取 msg
|
try {
|
||||||
Message message = (Message) event.getParameter("msg");
|
//获取 msg
|
||||||
|
Message message = (Message) event.getParameter("msg");
|
||||||
ITObject param = message.param;
|
|
||||||
//回调协议号
|
ITObject param = message.param;
|
||||||
String command = message.command;
|
//回调协议号
|
||||||
|
String command = message.command;
|
||||||
//根据玩法ID处理不同的回调
|
|
||||||
if (StringUtil.isNotEmpty(command)) {
|
//根据玩法 ID 处理不同的回调
|
||||||
//直接处理协议
|
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,10 +405,10 @@ 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()));
|
||||||
|
|
||||||
//游戏结束后主动断开连接
|
//游戏结束后主动断开连接
|
||||||
disconnectFromGameServer(connecId);
|
disconnectFromGameServer(connecId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
||||||
|
|
@ -54,6 +53,30 @@ public class HuNanHongZhong {
|
||||||
public List<Integer> getChuGuoCardInhand() {
|
public List<Integer> getChuGuoCardInhand() {
|
||||||
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));
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue