Quellcode durchsuchen

优化房间对象池管理

johnclot69 vor 4 Monaten
Ursprung
Commit
12b7c0de03

+ 5 - 5
incubator-game/src/main/java/com/incubator/game/room/JDGDRoom.java

@@ -58,10 +58,10 @@ public class JDGDRoom extends Room implements GRoomInterface {
                 }
 
                 // 120秒未开始直接解散
-//                if (this.data.time >= 120) {
-//                    logger.debug("解散房间...");
-//                    this.destroy();
-//                }
+                if (this.data.time >= 120) {
+                    logger.debug("解散房间...");
+                    RoomManager.getInstance().releaseRoom(this);
+                }
                 break;
             case 1:
                 // 开局
@@ -111,7 +111,7 @@ public class JDGDRoom extends Room implements GRoomInterface {
                     // 120秒未开始直接解散
 //                    if (this.data.time >= 120) {
 //                        logger.debug("解散房间...");
-//                        this.destroy();
+//                        RoomManager.getInstance().releaseRoom(this);
 //                    }
                 }
                 break;

+ 2 - 4
incubator-game/src/main/java/com/incubator/game/room/Room.java

@@ -56,15 +56,13 @@ public class Room {
     }
 
     /**
-     * 销毁房间,释放资源
+     * 销毁房间,释放资源 (对象池定期管理调用,不要手动调用)
      */
     public void destroy() {
         reset();
         this.scheduler.shutdownNow();
         this.scheduler = null;
-        // 放回池中
-        RoomManager.getInstance().roomPool.offer(this);
-        logger.debug("销毁房间 : {} 释放资源.", this.data.roomId);
+        logger.debug("Room {} has been destroyed.", this.data.roomId);
         // 清空房间数据
         this.data = null;
     }

+ 17 - 7
incubator-game/src/main/java/com/incubator/game/room/RoomManager.java

@@ -56,7 +56,7 @@ public class RoomManager {
      * @return
      */
     public Room acquireRoom(int roomType) {
-        Room room = roomPool.poll();
+        Room room = this.roomPool.poll();
         if (room == null) {
             // 创建指定类型的房间
             room = RoomFactory.createRoom(roomType);
@@ -64,12 +64,22 @@ public class RoomManager {
         return room;
     }
 
+    /**
+     * 归还房间对象
+     */
+    public void releaseRoom(Room room) {
+        if (room != null) {
+            room.reset(); // 重置房间状态
+            this.roomPool.offer(room); // 放回池中
+        }
+    }
+
     /**
      * 定期清理空闲房间
      */
     private void cleanIdleRooms() {
-        while (roomPool.size() > maxIdleRooms) {
-            Room room = roomPool.poll();
+        while (this.roomPool.size() > maxIdleRooms) {
+            Room room = this.roomPool.poll();
             if (room != null) {
                 // 销毁房间,释放资源
                 room.destroy();
@@ -81,13 +91,13 @@ public class RoomManager {
      * 关闭对象池
      */
     public void shutdown() {
-        cleaner.shutdownNow();
-        roomPool.forEach(Room::destroy);
-        roomPool.clear();
+        this.cleaner.shutdownNow();
+        this.roomPool.forEach(Room::destroy);
+        this.roomPool.clear();
     }
 
     public int getAvailableRooms() {
-        return roomPool.size();
+        return this.roomPool.size();
     }
 
     /**