diff --git a/robots/majiang/robot_mj_cs/src/main/java/robot/mj/EXGameController.java b/robots/majiang/robot_mj_cs/src/main/java/robot/mj/EXGameController.java index 70eee00..e8b2e16 100644 --- a/robots/majiang/robot_mj_cs/src/main/java/robot/mj/EXGameController.java +++ b/robots/majiang/robot_mj_cs/src/main/java/robot/mj/EXGameController.java @@ -239,8 +239,14 @@ public class EXGameController extends GameController { //机器人房间映射关系 RobotUser robotUser = getRobotRoomInfo(String.valueOf(robotId)); - - Thread.sleep(5000); + if (robotUser.getRoomId() == null) { + robotUser.setCurrentRoomId(Integer.parseInt(roomId)); + robotUser.setClient(client); + } + System.out.println(roomId); + System.out.println(Integer.parseInt(roomId)); + System.out.println(robotUser.getCurrentRoomId()); + Thread.sleep(2000); params.putString("session","{user}:"+robotId+ "," + robotSession); //发送加入房间请求到game_mj_cs client.send(Config.JOIN_ROOM_CS, params, response -> { @@ -265,6 +271,17 @@ public class EXGameController extends GameController { * 根据机器人ID获取其所在的房间信息 */ public static RobotUser getRobotRoomInfo(String robotId) { + RobotUser robotUser = robotRoomMapping.get(robotId); + if (robotUser ==null && robotUser.getRoomId() == null) { + RobotUser robotUserCopy = new RobotUser(); + robotUserCopy.setRobotId(robotId); + robotUserCopy.setPassword("123456"); + robotUserCopy.setGameHost("8.138.242.190"); + robotUserCopy.setGamePort("6311"); + robotUserCopy.setRobotGroupid("330800"); + robotUserCopy.setRobotPid("10"); + return robotUserCopy; + } return robotRoomMapping.get(robotId); } @@ -282,7 +299,7 @@ public class EXGameController extends GameController { public static TaurusClient getCsMjGameServerConnection(String connecId) { TaurusClient taurusClient = robotConnectionManager.getGameClient(connecId); System.out.println("根据机器人ID和连接ID获取长沙麻将游戏服务器连接 client: = "+taurusClient); - if (taurusClient != null) { + if (taurusClient != null && taurusClient.isConnected()) { log.debug("成功获取游戏服务器连接,connecId: {}", connecId); return taurusClient; } diff --git a/robots/majiang/robot_mj_cs/src/main/java/robot/mj/EXMainServer.java b/robots/majiang/robot_mj_cs/src/main/java/robot/mj/EXMainServer.java index 84713f4..1c832e1 100644 --- a/robots/majiang/robot_mj_cs/src/main/java/robot/mj/EXMainServer.java +++ b/robots/majiang/robot_mj_cs/src/main/java/robot/mj/EXMainServer.java @@ -40,10 +40,9 @@ public class EXMainServer extends MainServer{ startNetEventThread(); // 2. 启动连接检查定时任务 - startConnectionCheckScheduler(); - + //startConnectionCheckScheduler(); //测试 - Jedis jedis2 = Redis.use("group1_db2").getJedis(); + /*Jedis jedis2 = Redis.use("group1_db2").getJedis(); String robotskey = "g{"+330800+"}:play:"+10; Map maprobot = jedis2.hgetAll(robotskey); for(Map.Entry entry : maprobot.entrySet()) { @@ -100,8 +99,7 @@ public class EXMainServer extends MainServer{ } } - }, 0, 5 ,TimeUnit.SECONDS); - + }, 0, 5 ,TimeUnit.SECONDS);*/ //5、干活 log.info("长沙麻将机器人服务器已启动"); log.info("服务器将监听端口 {} 用于接收robot_mgr管理协议", gameSetting.port); @@ -120,7 +118,7 @@ public class EXMainServer extends MainServer{ robotConnectionManager.checkIsConnect(robotUser); } - Thread.sleep(2000); + Thread.sleep(8000); } catch (InterruptedException e) { break; } catch (Exception e) { diff --git a/robots/majiang/robot_mj_cs/src/main/java/robot/mj/handler/HuNanChangSha.java b/robots/majiang/robot_mj_cs/src/main/java/robot/mj/handler/HuNanChangSha.java index 3b24de9..07d2b71 100644 --- a/robots/majiang/robot_mj_cs/src/main/java/robot/mj/handler/HuNanChangSha.java +++ b/robots/majiang/robot_mj_cs/src/main/java/robot/mj/handler/HuNanChangSha.java @@ -1834,6 +1834,7 @@ public class HuNanChangSha { * @return */ public String shanchuchuguopai(ITObject param) { + System.out.println("对面吃碰删除出过的牌组"); if (param == null) { return null; } @@ -1846,23 +1847,25 @@ public class HuNanChangSha { Integer playerid = param.getInt("playerid"); - String sql2 = String.format("SELECT id FROM `account` WHERE jiqiren=9998"); - try { - ITArray robotId2 = DataBase.use().executeQueryByTArray(sql2); - List robotIdsList = new ArrayList<>(); + //Redis中获取机器人ID列表 + List robotIdsList = new ArrayList<>(); - for (int j = 0; j < robotId2.size(); j++) { - robotIdsList.add(robotId2.getTObject(j).getInt("id")); + //Redis中获取当前活跃的机器人连接信息 + try (Jedis jedis = Redis.use("group1_db2").getJedis()) { + //从Redis中获取所有在线的机器人ID + java.util.Set allKeys = jedis.keys("{robot}:*"); + for (String key : allKeys) { + robotIdsList.add(Integer.valueOf(key.replace("{robot}:",""))); } + } - if (!robotIdsList.contains(playerid)) { - if (type == 2 || type == 3 || type == 5 || type == 1) { // 碰,杠 - getChuGuoCardInhand().remove(Integer.valueOf(card)); - } + if (!robotIdsList.contains(playerid)) { + System.out.println("playerid "+playerid); + System.out.println("type "+type); + if (type == 2 || type == 3 || type == 5 || type == 1) { // 碰,杠 + System.out.println("进入对面吃牌 机器人出的牌需要删除这张牌"); + getChuGuoCardInhand().remove(Integer.valueOf(card)); } - - } catch (SQLException e) { - e.printStackTrace(); } return null; diff --git a/robots/majiang/robot_mj_cs/src/main/java/robot/mj/network/TaurusTcpListener.java b/robots/majiang/robot_mj_cs/src/main/java/robot/mj/network/TaurusTcpListener.java new file mode 100644 index 0000000..b1aaa18 --- /dev/null +++ b/robots/majiang/robot_mj_cs/src/main/java/robot/mj/network/TaurusTcpListener.java @@ -0,0 +1,113 @@ +package robot.mj.network; + +import com.robot.MainServer; +import com.taurus.core.entity.ITObject; +import com.taurus.core.entity.TObject; +import com.taurus.core.util.Logger; +import com.taurus.permanent.data.Session; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * TCP监听器 + */ +public class TaurusTcpListener { + private static final Logger log = Logger.getLogger(TaurusTcpListener.class); + + private AtomicInteger connectionCount = new AtomicInteger(0); + private volatile boolean running = false; + + /** + * 启动TCP监听 + */ + public void start() { + if (running) { + log.warn("TCP监听已在运行中"); + return; + } + + try { + running = true; + log.info("基于Taurus框架的TCP监听已启动"); + + + } catch (Exception e) { + log.error("启动Taurus TCP监听失败", e); + } + } + + /** + * 停止TCP监听 + */ + public void stop() { + if (!running) { + return; + } + + try { + running = false; + log.info("Taurus TCP监听已停止"); + } catch (Exception e) { + log.error("停止Taurus TCP监听时发生错误", e); + } + } + + /** + * 处理新连接的欢迎消息 + */ + public void sendWelcomeMessage(Session session) { + try { + ITObject welcomeMsg = TObject.newInstance(); + welcomeMsg.putString("type", "welcome"); + welcomeMsg.putString("message", "连接到长沙麻将机器人服务器"); + welcomeMsg.putInt("server_id", 7701); + welcomeMsg.putLong("timestamp", System.currentTimeMillis()); + + MainServer.instance.sendResponse(0, 0, welcomeMsg, session); + + log.debug("已发送欢迎消息 - SessionId: {}", session.getId()); + + } catch (Exception e) { + log.error("发送欢迎消息失败", e); + } + } + + /** + * 处理客户端消息的通用方法 + */ + public void processAndRespond(Session session, ITObject requestData, int gid) { + try { + + ITObject response = TObject.newInstance(); + response.putString("type", "response"); + response.putTObject("original_data", requestData); + response.putBoolean("processed", true); + response.putLong("timestamp", System.currentTimeMillis()); + + //发送响应 + MainServer.instance.sendResponse(gid, 0, response, session); + + log.info("已发送响应 - SessionId: {}", session.getId()); + + } catch (Exception e) { + log.error("处理客户端消息时发生错误", e); + + //发送错误响应 + ITObject errorResponse = TObject.newInstance(); + errorResponse.putString("type", "error"); + errorResponse.putString("message", "处理请求时发生错误: " + e.getMessage()); + errorResponse.putLong("timestamp", System.currentTimeMillis()); + + MainServer.instance.sendResponse(gid, 1, errorResponse, session); + } + } + + + public boolean isRunning() { + return running; + } + + public int getConnectionCount() { + return connectionCount.get(); + } +} \ No newline at end of file diff --git a/robots/majiang/robot_mj_cs/target/classes/robot/mj/EXGameController.class b/robots/majiang/robot_mj_cs/target/classes/robot/mj/EXGameController.class index 28e0b72..c3d2168 100644 Binary files a/robots/majiang/robot_mj_cs/target/classes/robot/mj/EXGameController.class and b/robots/majiang/robot_mj_cs/target/classes/robot/mj/EXGameController.class differ diff --git a/robots/majiang/robot_mj_cs/target/classes/robot/mj/EXMainServer.class b/robots/majiang/robot_mj_cs/target/classes/robot/mj/EXMainServer.class index e78cfd8..d3cc1b7 100644 Binary files a/robots/majiang/robot_mj_cs/target/classes/robot/mj/EXMainServer.class and b/robots/majiang/robot_mj_cs/target/classes/robot/mj/EXMainServer.class differ diff --git a/robots/majiang/robot_mj_cs/target/classes/robot/mj/RobotConnectionManager$3.class b/robots/majiang/robot_mj_cs/target/classes/robot/mj/RobotConnectionManager$3.class index d1f4408..d201d23 100644 Binary files a/robots/majiang/robot_mj_cs/target/classes/robot/mj/RobotConnectionManager$3.class and b/robots/majiang/robot_mj_cs/target/classes/robot/mj/RobotConnectionManager$3.class differ diff --git a/robots/majiang/robot_mj_cs/target/classes/robot/mj/RobotConnectionManager.class b/robots/majiang/robot_mj_cs/target/classes/robot/mj/RobotConnectionManager.class index 91a154a..6b50d9a 100644 Binary files a/robots/majiang/robot_mj_cs/target/classes/robot/mj/RobotConnectionManager.class and b/robots/majiang/robot_mj_cs/target/classes/robot/mj/RobotConnectionManager.class differ diff --git a/robots/majiang/robot_mj_cs/target/classes/robot/mj/business/AccountBusiness.class b/robots/majiang/robot_mj_cs/target/classes/robot/mj/business/AccountBusiness.class new file mode 100644 index 0000000..6b467ac Binary files /dev/null and b/robots/majiang/robot_mj_cs/target/classes/robot/mj/business/AccountBusiness.class differ diff --git a/robots/majiang/robot_mj_cs/target/classes/robot/mj/handler/HuNanChangSha.class b/robots/majiang/robot_mj_cs/target/classes/robot/mj/handler/HuNanChangSha.class index 2be5201..9aac05f 100644 Binary files a/robots/majiang/robot_mj_cs/target/classes/robot/mj/handler/HuNanChangSha.class and b/robots/majiang/robot_mj_cs/target/classes/robot/mj/handler/HuNanChangSha.class differ diff --git a/robots/majiang/robot_mj_cs/target/classes/robot/mj/info/RobotUser.class b/robots/majiang/robot_mj_cs/target/classes/robot/mj/info/RobotUser.class new file mode 100644 index 0000000..0580c90 Binary files /dev/null and b/robots/majiang/robot_mj_cs/target/classes/robot/mj/info/RobotUser.class differ diff --git a/robots/majiang/robot_mj_cs/target/classes/robot/mj/network/TaurusTcpListener.class b/robots/majiang/robot_mj_cs/target/classes/robot/mj/network/TaurusTcpListener.class new file mode 100644 index 0000000..00f50a5 Binary files /dev/null and b/robots/majiang/robot_mj_cs/target/classes/robot/mj/network/TaurusTcpListener.class differ diff --git a/robots/majiang/robot_mj_cs/target/classes/taurus/util/ROBOTEventType.class b/robots/majiang/robot_mj_cs/target/classes/taurus/util/ROBOTEventType.class new file mode 100644 index 0000000..182bde5 Binary files /dev/null and b/robots/majiang/robot_mj_cs/target/classes/taurus/util/ROBOTEventType.class differ