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 @@ - - - - - - - - - + + + + + + + + +