diff --git a/src/main/java/kutaverse/game/websocket/taggame/util/TagGameMatchingQueue.java b/src/main/java/kutaverse/game/websocket/taggame/util/TagGameMatchingQueue.java index 7f2af30..c329114 100644 --- a/src/main/java/kutaverse/game/websocket/taggame/util/TagGameMatchingQueue.java +++ b/src/main/java/kutaverse/game/websocket/taggame/util/TagGameMatchingQueue.java @@ -23,25 +23,29 @@ public class TagGameMatchingQueue { private static final Random random = new Random(); private final TagGameUserService tagGameUserService; - public static void addPlayer(String userId, WebSocketSession webSocketSession){ - if(!sessionMap.containsKey(userId)) { - queueing.offer(new AbstractMap.SimpleEntry<>(userId,webSocketSession)); - sessionMap.put(userId,webSocketSession); + public static void addPlayer(String userId, WebSocketSession webSocketSession) { + if (sessionMap.containsKey(userId)) { + if(!sessionMap.get(userId).isOpen()) + sessionMap.remove(userId); + } + if (!sessionMap.containsKey(userId)) { + queueing.offer(new AbstractMap.SimpleEntry<>(userId, webSocketSession)); + sessionMap.put(userId, webSocketSession); webSocketSession.send(Mono.just(webSocketSession.textMessage("매칭 대기 중 입니다."))).subscribe(); } } - private static Map.Entry getPlayer(){ + private static Map.Entry getPlayer() { return queueing.poll(); } - public static int getQueuePlayers(){ + public static int getQueuePlayers() { return queueing.size(); } private void createGameRoom(String roomId, List> players) { - TagGameRoom tagGameRoom = new TagGameRoom(roomId,players); + TagGameRoom tagGameRoom = new TagGameRoom(roomId, players); TagGameRoomManager.addGameRoom(tagGameRoom); } @@ -56,15 +60,15 @@ private String confirmGameRoomName(List> pla @Scheduled(fixedRate = 1000) public void matchPlayers() throws InterruptedException { - while(queueing.size() >= 4){ + while (queueing.size() >= 4) { Map.Entry player1 = TagGameMatchingQueue.getPlayer(); Map.Entry player2 = TagGameMatchingQueue.getPlayer(); Map.Entry player3 = TagGameMatchingQueue.getPlayer(); Map.Entry player4 = TagGameMatchingQueue.getPlayer(); // 세션 값 확인 - if(player1.getValue().isOpen() && player2.getValue().isOpen() - && player3.getValue().isOpen() && player4.getValue().isOpen()){ + if (player1.getValue().isOpen() && player2.getValue().isOpen() + && player3.getValue().isOpen() && player4.getValue().isOpen()) { List> players = List.of(player1, player2, player3, player4); Map.Entry tagger = selectTagger(players); @@ -81,21 +85,20 @@ public void matchPlayers() throws InterruptedException { webSocketSession.send(Mono.just(webSocketMessage)).subscribe(); } Thread.sleep(5000); - tagGameUserService.initialize(players,tagger,integerList); + tagGameUserService.initialize(players, tagger, integerList); createGameRoom(gameRoom, players); - } - else{ - if(player1.getValue().isOpen()){ + } else { + if (player1.getValue().isOpen()) { MatchingQueue.requeue(player1); } - if(player2.getValue().isOpen()){ + if (player2.getValue().isOpen()) { MatchingQueue.requeue(player2); } - if(player3.getValue().isOpen()){ + if (player3.getValue().isOpen()) { MatchingQueue.requeue(player3); } - if(player4.getValue().isOpen()){ + if (player4.getValue().isOpen()) { MatchingQueue.requeue(player4); } } @@ -105,6 +108,7 @@ public void matchPlayers() throws InterruptedException { /** * 술래를 정한다 + * * @param players * @return */ diff --git a/src/main/java/kutaverse/game/websocket/taggame/util/TagGameRoom.java b/src/main/java/kutaverse/game/websocket/taggame/util/TagGameRoom.java index 5b44f5d..23d4dd3 100644 --- a/src/main/java/kutaverse/game/websocket/taggame/util/TagGameRoom.java +++ b/src/main/java/kutaverse/game/websocket/taggame/util/TagGameRoom.java @@ -16,4 +16,10 @@ public TagGameRoom(String roomId, List> play this.players = players; } + public void delete(){ + for (Map.Entry player : players) { + player.getValue().close().subscribe(); + } + } + } diff --git a/src/main/java/kutaverse/game/websocket/taggame/util/TagGameRoomManager.java b/src/main/java/kutaverse/game/websocket/taggame/util/TagGameRoomManager.java index b25f105..b06cd5c 100644 --- a/src/main/java/kutaverse/game/websocket/taggame/util/TagGameRoomManager.java +++ b/src/main/java/kutaverse/game/websocket/taggame/util/TagGameRoomManager.java @@ -16,7 +16,10 @@ public static void addGameRoom(TagGameRoom tagGameRoom) { public static TagGameRoom getGameRoom(String roomId) { return gameRooms.get(roomId); } public static void deleteGameRoom(String roomId) { - gameRooms.remove(roomId); } + TagGameRoom tagGameRoom = gameRooms.get(roomId); + tagGameRoom.delete(); + gameRooms.remove(roomId); + } }