From f6b9e7c87583ed9eec2eaa6c465f95e9a372a941 Mon Sep 17 00:00:00 2001
From: zhouwei <849588297@qq.com>
Date: Wed, 4 Feb 2026 19:19:56 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/compiler.xml | 26 +
.idea/encodings.xml | 35 +
.idea/jarRepositories.xml | 20 +
.idea/misc.xml | 19 +
game_web/robot_mgr/.idea/jarRepositories.xml | 5 +
game_web/robot_mgr/.idea/pom.xml.iml | 9 +
.../src/main/java/com/group/MainServer.java | 2 +-
.../group/robot/connect/RobotDisconnect.java | 25 +-
.../robot/handler/RobotConnectionHandler.java | 70 +-
.../group/robot/matcher/RoomWanfaMatcher.java | 15 +-
.../src/main/webapp/config/taurus-core.xml | 22 +-
.../src/main/webapp/logs/web_main.log | 24 +
.../target/classes/com/group/MainServer.class | Bin 6916 -> 6917 bytes
.../group/robot/connect/RobotDisconnect.class | Bin 6387 -> 6154 bytes
.../handler/RobotConnectionHandler$3.class | Bin 1207 -> 1207 bytes
.../handler/RobotConnectionHandler$4.class | Bin 1186 -> 1170 bytes
.../handler/RobotConnectionHandler.class | Bin 16737 -> 13444 bytes
.../robot/matcher/RoomWanfaMatcher.class | Bin 16645 -> 16521 bytes
.../robot_mj_cs/config/game-config.xml | 4 +-
.../robot_mj_cs/config/taurus-core.xml | 18 +-
.../main/java/robot/mj/EXGameController.java | 139 +--
.../src/main/java/robot/mj/EXMainServer.java | 104 +++
.../java/robot/mj/RobotConnectionManager.java | 833 ++++++++----------
.../robot/mj/business/AccountBusiness.java | 380 ++++++++
.../java/robot/mj/handler/HuNanChangSha.java | 83 +-
.../java/robot/mj/info/RobotRoomInfo.java | 66 --
.../main/java/robot/mj/info/RobotUser.java | 195 ++++
.../main/java/taurus/util/ROBOTEventType.java | 13 +
.../classes/robot/mj/EXGameController.class | Bin 10895 -> 12663 bytes
.../classes/robot/mj/EXMainServer.class | Bin 3321 -> 7027 bytes
.../robot/mj/RobotConnectionManager$1.class | Bin 2281 -> 1986 bytes
.../robot/mj/RobotConnectionManager$2.class | Bin 2699 -> 1097 bytes
.../robot/mj/RobotConnectionManager$3.class | Bin 1084 -> 1084 bytes
.../robot/mj/RobotConnectionManager.class | Bin 28733 -> 27689 bytes
.../robot/mj/handler/HuNanChangSha.class | Bin 26526 -> 26175 bytes
.../classes/robot/mj/info/RobotRoomInfo.class | Bin 1793 -> 0 bytes
36 files changed, 1361 insertions(+), 746 deletions(-)
create mode 100644 .idea/compiler.xml
create mode 100644 .idea/encodings.xml
create mode 100644 .idea/jarRepositories.xml
create mode 100644 game_web/robot_mgr/.idea/pom.xml.iml
create mode 100644 robots/majiang/robot_mj_cs/src/main/java/robot/mj/business/AccountBusiness.java
delete mode 100644 robots/majiang/robot_mj_cs/src/main/java/robot/mj/info/RobotRoomInfo.java
create mode 100644 robots/majiang/robot_mj_cs/src/main/java/robot/mj/info/RobotUser.java
create mode 100644 robots/majiang/robot_mj_cs/src/main/java/taurus/util/ROBOTEventType.java
delete mode 100644 robots/majiang/robot_mj_cs/target/classes/robot/mj/info/RobotRoomInfo.class
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..d177bb0
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..885a634
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..57d58a3
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e208459..7552612 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,24 @@
+
+
+
+
diff --git a/game_web/robot_mgr/.idea/jarRepositories.xml b/game_web/robot_mgr/.idea/jarRepositories.xml
index 712ab9d..af6ee75 100644
--- a/game_web/robot_mgr/.idea/jarRepositories.xml
+++ b/game_web/robot_mgr/.idea/jarRepositories.xml
@@ -16,5 +16,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/game_web/robot_mgr/.idea/pom.xml.iml b/game_web/robot_mgr/.idea/pom.xml.iml
new file mode 100644
index 0000000..dfa92c3
--- /dev/null
+++ b/game_web/robot_mgr/.idea/pom.xml.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/game_web/robot_mgr/src/main/java/com/group/MainServer.java b/game_web/robot_mgr/src/main/java/com/group/MainServer.java
index 43ab0cd..bd0914e 100644
--- a/game_web/robot_mgr/src/main/java/com/group/MainServer.java
+++ b/game_web/robot_mgr/src/main/java/com/group/MainServer.java
@@ -116,7 +116,7 @@ public class MainServer extends Extension {
}
Map gameRobotConfig = new HashMap<>();
- gameRobotConfig.put(10, 1);
+ gameRobotConfig.put(10, 10);
gameRobotConfig.put(22, 0);
int robotIndex = 0;
diff --git a/game_web/robot_mgr/src/main/java/com/group/robot/connect/RobotDisconnect.java b/game_web/robot_mgr/src/main/java/com/group/robot/connect/RobotDisconnect.java
index 500cb5a..eae1367 100644
--- a/game_web/robot_mgr/src/main/java/com/group/robot/connect/RobotDisconnect.java
+++ b/game_web/robot_mgr/src/main/java/com/group/robot/connect/RobotDisconnect.java
@@ -83,10 +83,8 @@ public class RobotDisconnect {
}
//更新Redis2中的机器人start状态为0
- updateRedis2StartStatus(robotId, 0);
+ updateRobotDB(robotId, 0);
- //更新机器人状态为可用
- updateDatabaseStatus(robotId);
log.info("机器人 {} 断开连接流程完成", robotId);
} catch (Exception e) {
log.error("统一断开机器人 {} 连接时发生异常", robotId, e);
@@ -109,27 +107,20 @@ public class RobotDisconnect {
}
}
- /**
- * 更新数据库状态
- */
- private void updateDatabaseStatus(int robotId) {
- try {
- String sql = String.format("UPDATE `account` SET start = %d WHERE id = %d", 0, robotId);
- DataBase.use().executeUpdate(sql);
- log.debug("数据库已更新机器人 {} 状态为可用", robotId);
- } catch (Exception e) {
- log.error("更新机器人 {} 数据库状态失败", robotId, e);
- }
- }
+
/**
- * 更新Redis2中机器人的start状态
+ * 更新redis及数据库状态
*/
- private void updateRedis2StartStatus(int robotId, int startValue) {
+ private void updateRobotDB(int robotId, int startValue) {
try (Jedis jedis2 = Redis.use("group1_db2").getJedis()) {
String gRobotKey = "{grobot}:" + robotId;
jedis2.hset(gRobotKey, "start", String.valueOf(startValue));
log.debug("Redis2已更新机器人 {} 的start状态为 {}", robotId, startValue);
+
+ String sql = String.format("UPDATE `account` SET start = %d WHERE id = %d", startValue, robotId);
+ DataBase.use().executeUpdate(sql);
+ log.debug("数据库已更新机器人 {} 状态为可用", robotId);
} catch (Exception e) {
log.error("更新机器人 {} Redis2 start状态失败", robotId, e);
}
diff --git a/game_web/robot_mgr/src/main/java/com/group/robot/handler/RobotConnectionHandler.java b/game_web/robot_mgr/src/main/java/com/group/robot/handler/RobotConnectionHandler.java
index 27e3f9c..ca803ae 100644
--- a/game_web/robot_mgr/src/main/java/com/group/robot/handler/RobotConnectionHandler.java
+++ b/game_web/robot_mgr/src/main/java/com/group/robot/handler/RobotConnectionHandler.java
@@ -221,64 +221,6 @@ public class RobotConnectionHandler {
}
}
-
- /**
- * 超时检查 6秒没有玩家加入 则退出房间
- * @param robot 机器人信息
- */
- public void readyTimeRobotExit(RobotInfo robot, Object joinRoomLock) {
- CompletableFuture.runAsync(() -> {
- try {
- Thread.sleep(6000);
- log.info("机器人 {} 准备时间超过6秒且房间人数不足,退出房间", robot.getRobotId());
- TaurusClient client = robotClients.get(robot.getRobotId());
-
- if (client != null) {
- //发送离开房间协议
- ITObject param = new TObject();
- param.putString("robotId", String.valueOf(robot.getRobotId()));
- param.putString("connecId", robotConnectionIds.get(robot.getRobotId()));
- System.out.println("readyTimeRobotExit 2005 client: "+ robotConnectionIds.get(robot.getRobotId()));
- client.send("2005", param, response -> {
- log.debug("机器人 {} 发送离开房间请求", robot.getRobotId());
- });
- } else {
- log.warn("机器人 {} 连接不存在或未激活,跳过离开房间操作", robot.getRobotId());
- }
-
- //机器人退出空房间 增加leftover_robot数量
- if (joinRoomLock != null) {
- synchronized (joinRoomLock) {
- increaseLeftoverRobot(robot);
- }
- } else {
- increaseLeftoverRobot(robot);
- }
- } catch (InterruptedException e) {
- log.debug("超时检查线程被中断: {}", robot.getRobotId());
- Thread.currentThread().interrupt();
- }
- });
- }
-
- /**
- * 增加leftover_robot数量 机器人退出空房间的情况
- */
- private void increaseLeftoverRobot(RobotInfo robot) {
- try (Jedis jedis11 = Redis.use("group1_db11").getJedis();Jedis jedis2 = Redis.use("group1_db2").getJedis()) {
- String playKey = "g{" + robot.getGroupId() + "}:play:" + robot.getWanfaId();
- jedis11.hincrBy(playKey, "leftover_robot", 1);
-
- jedis2.hset("{grobot}:" + robot.getRobotId(), "start", "0");
-
- robotManager.markLeftoverRobotRecovered(robot.getRobotId());
- robotManager.roomProcessingFinish(robot.getRoomId());
- log.debug("机器人 {} 退出空房间,增加leftover_robot,群组={}, 玩法={}", robot.getRobotId(), robot.getGroupId(), robot.getWanfaId());
- } catch (Exception e) {
- log.error("增加Redis leftover_robot时异常,群组={}, 玩法={}", robot.getGroupId(), robot.getWanfaId(), e);
- }
- }
-
/**
* 发送初始化协议
*/
@@ -328,7 +270,7 @@ public class RobotConnectionHandler {
}
}, 10000);
- client.send("2002", readyParam, response -> {
+ client.send("1002", readyParam, response -> {
boolean success = response != null && response.returnCode == 0;
if (!future.isDone()) {
future.complete(success);
@@ -340,9 +282,9 @@ public class RobotConnectionHandler {
}
/**
- * 异步发送准备消息给指定机器人,返回CompletableFuture
+ * 异步发送准备消息给指定机器人
*/
- public CompletableFuture sendReadyMessageAsyncCompletable(RobotInfo robot) {
+ public CompletableFuture sendReadyMessage(RobotInfo robot) {
CompletableFuture future = new CompletableFuture<>();
TaurusClient client = robotClients.get(robot.getRobotId());
@@ -356,7 +298,7 @@ public class RobotConnectionHandler {
readyParam.putString("robotId", String.valueOf(robot.getRobotId()));
readyParam.putString("connecId", robotConnectionIds.get(robot.getRobotId()));
- // 设置超时机制
+ //超时机制
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
@@ -365,9 +307,9 @@ public class RobotConnectionHandler {
future.completeExceptionally(new RuntimeException("Ready message timeout"));
}
}
- }, 10000); // 10秒超时
+ }, 10000);
- client.send("2003", readyParam, response -> {
+ client.send("1003", readyParam, response -> {
boolean success = response != null && response.returnCode == 0;
if (!future.isDone()) {
future.complete(success);
diff --git a/game_web/robot_mgr/src/main/java/com/group/robot/matcher/RoomWanfaMatcher.java b/game_web/robot_mgr/src/main/java/com/group/robot/matcher/RoomWanfaMatcher.java
index 7a189e3..24cc429 100644
--- a/game_web/robot_mgr/src/main/java/com/group/robot/matcher/RoomWanfaMatcher.java
+++ b/game_web/robot_mgr/src/main/java/com/group/robot/matcher/RoomWanfaMatcher.java
@@ -164,7 +164,7 @@ public class RoomWanfaMatcher {
synchronized (roomSpecificLock) {
if (!processingRooms.contains(roomId)) {
processingRooms.add(roomId);
- robotJoinRoom(robot, true);
+ robotJoinRoom(robot);
}
}
} else {
@@ -175,7 +175,7 @@ public class RoomWanfaMatcher {
synchronized (roomSpecificLock) {
if (!processingRooms.contains(roomId)) {
processingRooms.add(roomId);
- robotJoinRoom(robot, false);
+ robotJoinRoom(robot);
}
}
}
@@ -191,10 +191,9 @@ public class RoomWanfaMatcher {
/**
* 机器人加入房间
- * @param isRobot 是否是机器人创建房间
* @param robot 机器人实例
* */
- private void robotJoinRoom(RobotInfo robot, boolean isRobot) {
+ private void robotJoinRoom(RobotInfo robot) {
String roomId = robot != null ? robot.getRoomId() : null;
Object roomSpecificLock = robotManager.getRoomLock(roomId);
synchronized (roomSpecificLock) {
@@ -225,7 +224,7 @@ public class RoomWanfaMatcher {
if (joinSuccess) {
System.out.println("机器人"+robot.getRobotId()+" 加入了房间 机器人状态 :" + robot.isConnecting());
//准备阶段
- return robotConnectionHandler.sendReadyMessageAsyncCompletable(finalRobotInfo);
+ return robotConnectionHandler.sendReadyMessage(finalRobotInfo);
} else {
System.out.println("robotJoinRoomInternal机器人加入了房间 失败 :" + robot.isConnecting());
//加入失败 释放机器人
@@ -237,10 +236,6 @@ public class RoomWanfaMatcher {
System.out.println("robotJoinRoomInternal机器人准备 房间 机器人状态 :" + robot.isConnecting());
roomToRobotMap.put(roomId, finalRobotInfo.getRobotId());
updateRobotStatusRedis(finalRobotInfo);
- if (isRobot) {
- //6秒没有玩家加入 则退出房间
- //robotConnectionHandler.readyTimeRobotExit(finalRobotInfo, robotManager.getRoomLock(roomId));
- }
} else {
System.out.println("robotJoinRoomInternal机器人准备 房间 失败 :" + robot.isConnecting());
//准备失败时释放机器人
@@ -284,7 +279,7 @@ public class RoomWanfaMatcher {
*/
private void onRoomCreated(RobotInfo robot) {
try {
- robotJoinRoom(robot, true);
+ robotJoinRoom(robot);
} catch (Exception e) {
if (robot != null) {
robotConnectionHandler.disconnectRobot(robot.getRobotId());
diff --git a/game_web/robot_mgr/src/main/webapp/config/taurus-core.xml b/game_web/robot_mgr/src/main/webapp/config/taurus-core.xml
index 0f1f1d1..6a2ced8 100644
--- a/game_web/robot_mgr/src/main/webapp/config/taurus-core.xml
+++ b/game_web/robot_mgr/src/main/webapp/config/taurus-core.xml
@@ -43,14 +43,14 @@
db1
com.mysql.cj.jdbc.Driver
- jdbc:mysql://8.134.76.43:8060/wb_game
+ jdbc:mysql://8.138.242.190:8060/wb_game
root
6KYnXJjGhxNceF8e
@@ -93,15 +93,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/game_web/robot_mgr/src/main/webapp/logs/web_main.log b/game_web/robot_mgr/src/main/webapp/logs/web_main.log
index ce380d5..4e126fd 100644
--- a/game_web/robot_mgr/src/main/webapp/logs/web_main.log
+++ b/game_web/robot_mgr/src/main/webapp/logs/web_main.log
@@ -8,3 +8,27 @@ taurus.client.io.TSocketException
at taurus.client.io.SocketTcp$2.run(SocketTcp.java:70)
at java.lang.Thread.run(Thread.java:750)
04 二月 2026 | 12:58:54,539 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : ExceptionOnReceive
+04 二月 2026 | 15:17:53,519 | INFO | main | core.plugin.PluginService | | plugin[database] load success!
+04 二月 2026 | 15:17:53,705 | INFO | main | core.plugin.PluginService | | plugin[redis] load success!
+04 二月 2026 | 15:17:54,557 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : Connect
+04 二月 2026 | 15:21:54,810 | INFO | main | core.plugin.PluginService | | plugin[database] load success!
+04 二月 2026 | 15:21:54,969 | INFO | main | core.plugin.PluginService | | plugin[redis] load success!
+04 二月 2026 | 15:21:55,825 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : Connect
+04 二月 2026 | 15:22:52,765 | INFO | main | core.plugin.PluginService | | plugin[database] load success!
+04 二月 2026 | 15:22:52,925 | INFO | main | core.plugin.PluginService | | plugin[redis] load success!
+04 二月 2026 | 15:22:53,492 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : Connect
+04 二月 2026 | 16:09:30,082 | INFO | main | core.plugin.PluginService | | plugin[database] load success!
+04 二月 2026 | 16:09:30,332 | INFO | main | core.plugin.PluginService | | plugin[redis] load success!
+04 二月 2026 | 16:09:39,482 | INFO | main | core.plugin.PluginService | | plugin[database] load success!
+04 二月 2026 | 16:09:39,659 | INFO | main | core.plugin.PluginService | | plugin[redis] load success!
+04 二月 2026 | 16:09:40,020 | INFO | main | client.business.AccountBusiness | | id:101777 login
+04 二月 2026 | 16:09:40,240 | INFO | main | client.business.AccountBusiness | | ==========> password111 = 123456
+04 二月 2026 | 16:09:42,684 | INFO | main | client.business.AccountBusiness | | id:101999 login
+04 二月 2026 | 16:09:42,691 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : Connect
+04 二月 2026 | 16:09:42,696 | INFO | main | client.business.AccountBusiness | | ==========> password111 = 123456
+04 二月 2026 | 16:09:44,507 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : Connect
+04 二月 2026 | 16:09:44,647 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : Connect
+04 二月 2026 | 16:09:44,806 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : Connect
+04 二月 2026 | 16:09:44,817 | INFO | main | client.business.AccountBusiness | | id:104637 login
+04 二月 2026 | 16:09:44,830 | INFO | main | client.business.AccountBusiness | | ==========> password111 = 123456
+04 二月 2026 | 16:09:46,408 | INFO | NetEvent-Thread | client.io.SocketEngine | | status : Connect
diff --git a/game_web/robot_mgr/target/classes/com/group/MainServer.class b/game_web/robot_mgr/target/classes/com/group/MainServer.class
index 3cc6077d38189b6e6c67904000bf32bb73157b7b..976bb59d8711f3410506234c8d8030f719821cd4 100644
GIT binary patch
delta 296
zcmX|+KTASU7{-6^HMM(*D2SVrs4YRz64(a_q)ljRX^=K`kO~sCtEOdLvBIs=9sBN(B|NaLLBZd4*1S>Z?^>|OB?nZ=Q6o>C
zGp=+8+|uAl=$SSzbok(gPfaIu`O$kyXe&I}CXbepvIz89WgV9b`64ER*4l5-SFYPR=lwh*cj$gyJDDX3vS5|q#yPh{ICU5yK?Z?3r2S0xE7)NTmddq*5r0rGV3(TB-F~
zEX~R^DlJWPq(x~}+bN|z%WScQveZhm=-fAhMtywTf4}#>|D6BMp|r()gRlSn>~;YC
zgl0mbLSn9ot8q;fJeX%fu~gc1_K)nJZ)f;fm#!r
zu|;`92DTcg>!=*hn0OY?nRp)C3~V=0UmGtfJ)Np~F#93#g2amwFG;-2)1CERJGo88
z>}mPsg%e8(O3H@~70{D2GkaYu5LM*5MiNW5#|J?wTq(}pMQL8FEDv0K0_DlMs)
zot8JP;7o}REPRNMBtEwA2|jg3>SIp(42=?dEqsnIcw-Cu@TGcw0KRj6(9^x&QzrTbwfO-*T9}Dh7Op~xbCoZ}_o9U+UVW7>&iDyGTR6zuZ1-h)
ze?g;T$}{@@ibEED#bE(iZO<;wpJ!V*g5Lz%78g!0FPU3dnpdhCWZ`%GAuz;QCp$Yg
z$Z1`oD)|)*RNL%aS$TeGIeVI_$6peEtIuqf0+tZMabAuYAhMieF+b0w-(!n+vG2MvaMgmdwDVyPo
zuY>svl03+%!BAVLOY`^Cw?XE5RVX`G3+UM)B>y+JlO6ppmowPkbwZA~OyqHNW{NCP
z7LirF=|XY4ScYz*Oe_$zF_q&k9ZwS;*yn
z>8#BaYgn}jQ&^uXw&D`eKzlFkeU!gY9!4HiCoe-3o+1L-xDWfHJqn4lOg(v
z1Yo?xj9Co(>E}3wIU){_BT>9!qrX=j+J(^G)`YD;hm_o{=*$+LhFVVv>>WPJ^iY|UBLp>r^xDONqrix!}WSMP>4gk?cQ-onc}SWe)&(YFZ7
z1~w4J9ua!#T8GLVNVh@U4Qe?1^y^%`m@*od3
zu@+adNMq7zE*CUz+1SDbYKj5m0yRYdHJgntKfEph#=&gn?!Fc{6yE=b(`XfLNeM=~
zP-@{IFqAkZ@&vwyVGKQH1j8nOOc=wl!q!?K>>q(pA*ZJXbpL>aI-C{4z%X`aw;EuE
zOg6iX-wwN#9pqrU^IeBQwy%z_1)&`ru0B^gIsPn5-GT86-A<`4=)(v&-vk%efniq~
zUAj#tdBE&0|H_Uf3$zFeq{?OV
delta 2655
zcmZWr4SZE)8UMfco^#)G&(2)C8)N6kN+yg3Y_KszI1m+~Zpqg+6DQcbw_OKpI@kv=
z5igSnL9z6NsfeXPlS)3^x|>5>S=Xu`e`M+QP
z=l?$2?y}d)6DQvucpAWL5jG*wDRGO5Ex0v|0JfUA4GHCKlju_RcJmm2IgaHom8u*byR_^g4?smwhl?uBdO^VqAr`!eta+;89k6?sra68j81q@4W*
z9#-~?Cb#&K`aGgOj~e*0i32z&@f8!3(XF<6OyZD%uc{5cX5i}*kDHi|P6LOPJ)%BG
z4IESU2?IT9ey@RV7)ToEGtrMHO$^|;iKp=X69%3(FlgYL2EL_o&nWn}4SdJIcYAWg
zmOx$?_a-kALlVzQd{5&0Jb-&3=&Z=?Slh}QN|m|k4v;lhnIEwPsNtKyw*NUI1g!AW<4R+9e%3qQnlEm*U{2qUB$LmWbzKl~6uUI&Z6mMqXRh+T#NBoI*v`~vbyW90L
z<1hHDg}-5gdt9#w{+;%$K0opgoVC!5n=G`U-NJf?=Y^(CdDg-|aZ(^>U36n~W^?rB
z#+g^IX>HjQjWx$DyoP^S_%~0vD^wMH9jDyk(9F^|@E;3r;7tL!)mh&h?Q|@h!+!-X
zYL4I7-m)>?THmVpvG5lD=a$PZH)PDnXE`jqjS(rpYY8Dmz!E{Bxm8BR)Z)~>-qd|Z
zQx6TCe&DfJ1_mZ>**Y<`_h@R*;nM@|tGkn_ZC$4i96Qr{&^;=1O%f<{ON4}UpOcsN
z+-fWo!st03J`(8JV9gV5?nSBKxZ*0eI&+-+OlFNJcV7&byCqqfn9-Vf+|&8r`dXK5>wxc&2uu&3%M_4UsAnVL`4H%
z<~mU$Hm7YDkGn_QEB0ct*etdSj&Z#>BnI$7&!(6k5W_;*lsKa-f>_S)qbPQ3B29@p
zu@KjZ8m!`)6`a3H974V5!wpJxNX8M-&n3wmA@F=+S{x3~*AMQ>q(
zL_@7a{2b&6S`n7GQBa0xlvu;C#9E1Upppxx*dr)|d=CJ`#xt(ur;@)T$bmVANcd}j
z=Z^b0ZG;EX#{j?ziKZr|BaHJI`eG4hD3&mfI2@VQkM|{!?P$W$k7IgWA4(#nNz9m#
z#LP$;odP;Zlsh3?vqO9(fic8sTwp^>yrMkcFv
zTO#f3VsjhwcIZGSE1aFJ`#M06w3O~l?rbQ5|>
z*7La8lS(D&osLqDV%*roL9|dH8Zi?+foMpO$x(&StM?T`Psu_(-C<8PK~EOTVUBRu
z&}fmA3jV*y#s%pyh*w|D&jE{A+(K@UU|aPoiyy|*kHkh&v5CoBnBI)J=p=Dl
zJo2WIsC*Pq`7s`JE`9Z;6erbVj8&)KlzKE0fla(sJ|X;rk(TQTUdmvyFOucUb(wIq
zQME2eBH_tZsZ=ku^~i^)mW4@t*uUdPF1U*)Bwn?22rHB%^C)&Ibum@SX6A`;t{>uJ
zw(c-E=!A&A_&juul5@J1N}>~!C~=av%p>ok7i?HMs@NKKnmP*8V$*L<+YVl88~;z*
z$#F9oRAb;l>>nf97i<@2-Ht+R#|)yYu!HC>qIVFx6Z;c%9_D{MN!;O)zL0zsqL_df
z+gBL(cr7hRj8DH3NZ%O!eWNXnv5lT!RUwurnbxIyNxIK?t>_Ah(QifB>1HM8d#&u<
hE)-NjmHd
diff --git a/game_web/robot_mgr/target/classes/com/group/robot/handler/RobotConnectionHandler$4.class b/game_web/robot_mgr/target/classes/com/group/robot/handler/RobotConnectionHandler$4.class
index cb161e898caeb832cbd7aafcedd4c40f152af66d..c76c1a89d14365bbee7370344165969e07e7fb7b 100644
GIT binary patch
delta 49
zcmZ3)If-+_ZYBYN;?%s9pwz^aO5fDt;>7gLx0w_f8TBXsWsc=EV&GylW{_qyot(^K
F4*;MO4yXVC
delta 65
zcmbQlxrlSaZYBkV;?%s9pwz^aO5fDt;>7e+$KuMoWas?cf}GTn#H5_fr{Vc=rSWsqjfpB&6$4*(IX73Kf{
diff --git a/game_web/robot_mgr/target/classes/com/group/robot/handler/RobotConnectionHandler.class b/game_web/robot_mgr/target/classes/com/group/robot/handler/RobotConnectionHandler.class
index 992ca282717216cb4e34c9343ae5f780e9765070..00ea643b3a63ad2fcf8630ef79b9164bdf24400a 100644
GIT binary patch
delta 5045
zcmb_g2UHa27XH53WoOtOWEntMilPV#3nF$=(U@lJooG}7N-PmENHq0rdNp-Y)EHxo
z=_XMzt3WiSXnL=v8B4g}5_n%!>&r8lb@16HNo;!cP_kOpsdoSQc^Fq%aY~Bu_
zx0V$TAAa{@30igh;e`vWYUO|;e=2g&i$jErNJTWAF0U-Ns%5vAarAhp)35-x^D&Wr
zMUr${UL-TwV2Y2aY_ATcSs*jKn9j_Q&Mbo+bawP2i#h6OCxe}J=6aFC9D`j9<{8X4
z*i~KcX0X6up&AA)Xc0!m>Q;AyB}$SWib1I&Jr(Jt)_UvgqqDCUz0qp0pM2S0kpW(W
zdb3QuHqhW8orAp?q>hvu9OC0p9%Z1#;4p(ntGA9Zc&z#!XYhCnE{;@uM|nA#W0Wpq
z4ZN!^jWe*vz>{7~;CKVy>71Z*q8AedS5ER`GAG9g;PS7lU-(bt6oVBO+?=X&n!KZq
zo#e$#PBu8*LL8?mv}X#`tTeD)=g9`EEO4isd?QG^|J&a;^}OO|IlEI#-#zm8%K=u)4a2#SQgUi$>Qp%&nWfIMKt~
z{9GfS+x_^;$mj`}vZ{@v@(Mhug0r>6F`
zWTTgC>@{&a)|z+_57{$POM?7Jo%~qmCni6|qbB$9Go7ECcnVL8!1dyFBWuny`31kU
zx1{EG7L3FUU-KK2-$L}=ugG^0oWJM2CVvpj4y6Xu#gvC#Yi#v=(aYqI+---_hKzdz
z+eFeiRkbxbe=_+Ce-$_4Zzelnorzs&HqnG;!KYH^?HXU6z+<{*m|DE%Rn9Cv
zXdiT^w3om-Ea#-T^>s_Dsu$GQucYVN{=jaRPc!YW1I0{e%*c=g-mWn}^K>$?aaGnd
z+6!`)#rcWO-6WQB8*@5sBatLVVbzDJ;sikV^CVmuG$F~A1zEq>n@r8-c@QI0!6?qTu
z+XuV$VTRqi+dIs(6AQ*vEs?~iV}uGZ8D&61Q@$1?96_v*v4)j0m&lCGSIJz0G&Wx?
zbBR;utoVq0Q{
zq7)mjQAWU-QI=}735{~2Gb*qd4~wYk;cjr72Qf)rcK(MC2`jgbEjqSF)=oMadW0KEf_R)3kHuVw#uy`O&IDz
zv2~O+EIK;61-)gvk6bw>jDFU!LS%fLe8L#u912>;7Z){SI0V8IDmDs37eWf#eCeHl
zPsEEp6+QPM8()YQeTfo$g#q{)Gw}@;;0Fh1S1*;VCM&*$%d2|I{5JcTlSGwRu
zyd(&|EO#OqLY;p_&MUMH@BngkF>oXwz3L$US`_)}DDsUhm@Ycc7_BT24BNjJCfGxI
z#s8fh{{Ltn279Ihc4ZsbCx@bFSN#R;zDN+q$$|9W(u?OJhh0#>JOtTITDk&EV{zBE-=RJM9sDua|`
z?8ZClF}tpB&(N&4_*af2``l|;v5f-hjsv+1=Kjdrpj;>&Cu84{kq(*2)K7)Qoy|#b5~-N`p(;o
z`3@+jHerE=GLK4~wb57)c$%=#4RQ49UC0gwJYm!Yv%**u%nsu;wH$0hy(ZRI*-&X-
zC>8>%kicrBah7O58+{n6!62T3VVr~GITxci4^z0n(R#SZm4+esz|o?HTAe4=V^z9WSueMG9%
zfql{Z9S>LHP)RC&`s2N-LvlQ_bU^ZdDUBu4B#SgDB29adChdQfCgfF3TNI*dkyd$E
zwp7r}pyL}U$_-8zpduBtKq{ylh}gKDd?DSR5BsIyeeZ}8X&|y4L&>HTL1mOk1K|R*
z#3a%wM)~!GRwhG9xGh*B8BJ4_ArjvnXZMDp`mEOR}X~I-#Sk!
z{Z^bG#s$`e)s**00ZtOsHLDgjI>R-Ec%jlxjZ3UQo^{x
zx>Cjg*;m~|7|SA+B8ufwyLE6@M(o;Eaw;lCdB?}fv*
z|F@<;{%=fg;3xbXy`SaWmdNsT_5OmIf&3@|;qRuo+u&J#GoSsTt1W1|_dQ8h>W6G*fs0{{R3
literal 16737
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
- 8.134.76.43
- 8.134.76.43
+ 8.138.242.190
+ 8.138.242.190
8701
7701
10
diff --git a/robots/majiang/robot_mj_cs/config/taurus-core.xml b/robots/majiang/robot_mj_cs/config/taurus-core.xml
index 04a186f..12b5989 100644
--- a/robots/majiang/robot_mj_cs/config/taurus-core.xml
+++ b/robots/majiang/robot_mj_cs/config/taurus-core.xml
@@ -38,15 +38,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+