ÃֽŠ°Ô½Ã±Û(JAVA)
2018.06.29 / 21:41

[JAVA / ³×Æ®¿öÅ©] ¸ÖƼ·ë ±¸Á¶¿¡ ´ëÇÏ¿©(°ÔÀÓ&äÆà ¹æ ¿©·¯°³)

aichatbot
Ãßõ ¼ö 252

¸ÖƼ ·ë ±¸Á¶¶ó´Â °Í¿¡ ´ëÇØ ÀÌÇØ´Â ÇÏ°í ÀÖÁö¸¸ ±¸Çö¿¡ ¾Ö¸¦ ¸Ô¾ú´ø ±â¾ïÀÌ ÀÖ´Ù.


À̴ äÆà À̶ó´øÁö, °ÔÀÓ¿¡ Åë¿ëµÇ´Â °³³äÀ¸·Î


ÇϳªÀÇ ¹æÀ» °¡Áö´Â °ÔÀÓ°ú äÆÃÀ̶ó¸é »ó°üÀº ¾øÀ¸³ª, ¿©·¯°³ÀÇ ¹æÀ» °¡Á®¾ßÇÏ´Â ÇÁ·Î±×·¥¿¡¼­´Â ±¸ÇöÀ» ÇØÁÖ¾î¾ß ÇÑ´Ù.


ÀÏ´Ü Á¢¼ÓÇÏ´Â °¢°¢ÀÇ À¯Àú¸¶´Ù ¼ÒÄÏÀ» °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù.


¼­¹ö¿¡¼­´Â ¿©·¯°³ÀÇ ¼ÒÄÏÀ» »ý¼ºÇÏ¿© Ŭ¶óÀ̾ðÆ®¸¦ ÇÒ´çÇÏ°Ô µÇ°í,


±× ¼ÒÄÏÀ» ¹æ(Room) °³³ä¿¡ ¸Â°Ô ºÐ¹èÇØÁÖ¸é °£´ÜÇÏ°Ô ±¸ÇöÀÌ µÈ´Ù.


¿¹¸¦ µé¾î ¸ÞÀΠŬ·¡½º°¡ ÀÖ´Ù°í ÇßÀ» ¶§ ¸ÖƼ·ë ±¸Á¶¸¦ À§Çؼ­ µÎ°³ÀÇ Å¬·¡½º°¡ ´õ ÇÊ¿äÇÏ°Ô µÈ´Ù.


ÆíÀÇ»ó °£´ÜÇÏ°Ô


RoomManager, GameRoom


À̶ó´Â À̸§À¸·Î Á¤ÇÑ´Ù°í °¡Á¤ÇÏÀÚ.


±¸Á¶´Â ´ÙÀ½°ú °°´Ù.


±×¸²ÀÌ ¸¹ÀÌ ½ÉÇÃÇϱäÇѵ¥.. Àü´ÞÇÏ°íÀÚ ÇÏ´Â Àǹ̴ Àü´ÞµÇ¾úÀ¸¸®¶ó ¹ÏÀ½.


Ŭ·¡½º´Â ±âº»ÀûÀ¸·Î ÃÑ 3°³°¡ ÇÊ¿äÇÏ´Ù


°ÔÀÓ¼­¹ö¸¦ ±âÁØÀ¸·Î Àâ¾ÒÀ» ¶§(äÆü­¹ö³ª °ÔÀÓ¼­¹ö³ª »ç½Ç ±×³É À̸§¸¸ ´Ù¸¦»Ó)


RoomManager

GameRoom

GameUser


ÀÌÁ¤µµ°¡ ÇÊ¿äÇÏ°Ú´Ù.


°¢ Ŭ·¡½ºÀÇ ¿ªÇÒÀº ´ÙÀ½°ú °°´Ù.


RoomManager : RoomÀÇ »ý¼º/»èÁ¦¸¦ °ü¸®Çϴ Ŭ·¡½ºÀÌ´Ù. RoomÀ» ¿©·¯°³ °¡Áú ¼ö ÀÖÀ½

GameRoom : °ÔÀÓ ³»ÀÇ ·ÎÁ÷(°ÔÀÓ ÁøÇà °ü·Ã)À» ó¸®Çϱâ À§ÇÑ Å¬·¡½ºÀÌ´Ù.  GameUser¸¦ ¿©·¯°³ °¡Áú ¼ö ÀÖÀ½

GameUser : Ŭ¶óÀ̾ðÆ®ÀÇ °íÀ¯ÇÑ Á¤º¸(´Ð³×ÀÓ, ¾ÆÀÌÅÛ, Ç÷¹À̾î Á¤º¸ µî)¸¦ °¡Áö´Â Ŭ·¡½ºÀ̸ç, Áß¿äÇÑ °ÍÀº "¼ÒÄÏ" À» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù.


¿¹¸¦ µé¾î A, B , C¶ó´Â ¹æÀÌ ÀÖÀ» ¶§


°¢ ¹æ¿¡¼­ ÀϾ´Â ÀÏÀº ´Ù¸¥ ¹æ¿¡¼­ ¾Ë ÇÊ¿ä°¡ ¾ø´Ù.


A¿¡¼­ µÎ »ç¿ëÀÚ°¡ äÆÃÀ» ÇÏ°í ÀÖÀ» ¶§ A¹æ¿¡ ¼ÓÇÑ »ç¿ëÀÚµé ³¢¸®¸¸ µ¥ÀÌÅ͸¦ ÁÖ°í¹ÞÀ¸¸é µÈ´Ù.


ÀÌ ¶§ äÆÃÀÇ ´Ü°è´Â ´ÙÀ½°ú °°ÀÌ ÀÌ·ç¾îÁø´Ù.



(À¯ÀúA , À¯ÀúB, À¯Àú C)°¡ ·ë A¿¡ ¼ÓÇØÀÖ´Ù.


À¯Àú A : Hello World Àü¼ÛÇÏ°íÀÚ ÇÔ


À¯Àú A -> ¼­¹ö·Î Hello world ¹®ÀÚ¿­ ¼Û½Å -> ¼­¹ö¿¡¼­´Â A°¡ ¼ÓÇÑ ·ë Ŭ·¡½º¿¡ ±× Á¤º¸¸¦ Àü´ÞÇÏ°Ô µÊ -> Àü´Þ¹ÞÀº ¹®ÀÚ¿­À» A·ë¿¡ ¼ÓÇÑ »ç¿ëÀڵ鿡°Ô Broadcast(À¯ÀúµéÀÌ °¡Áö°í ÀÖ´Â ¼ÒÄÏ Á¤º¸¸¦ ÂüÁ¶ÇÏ¸é ¹Ù·Î º¸³¾ ¼ö ÀÖ´Ù)


ÀÌ·±½ÄÀ¸·Î ±¸¼ºÇÏ°Ô µÈ´Ù¸é °¢ ¹æ¿¡ ¼ÓÇÑ »ç¿ëÀÚµé ³¢¸®¸¸ µ¥ÀÌÅ͸¦ ÁÖ°í ¹ÞÀ» ¼ö ÀÖ´Ù.


Ŭ·¡½º¸¦ Á÷Á¢ ÀÛ¼ºÇؼ­ ¿Ã¸®´Â °Ç ´ÙÀ½¿¡ Çϵµ·ÏÇÏ°í..


°£´ÜÇÏ°Ô ÀÌ·±½ÄÀÌ¸é µÉ°Å°°´Ù


RoomManager


List<GameRoom> roomList;


·Î °ÔÀÓ·ëÀÇ ¸®½ºÆ®¸¦ ¸¸µé°í °ü¸®ÇÏ¸ç ¹æÀ» »ý¼ºÇÏ°í Áö¿ì´Â ÇÔ¼ö¸¦ ±¸ÇöÇÑ´Ù.


GameRoom


List<GameUser> userList;

·Î À¯Àú ¸®½ºÆ®¸¦ °ü¸®ÇÏ°í À¯Àú°¡ ³ª°¬À» ¶§ ¸®½ºÆ®¿¡¼­ »©°í, Á¢¼ÓÇßÀ» ¶§ ¸®½ºÆ®¿¡ ³Ö¾îÁÖ¸é µÈ´Ù.


GameUser


ÀÌ Å¬·¡½º¿¡´Â ·Î±×ÀÎ Á¤º¸ ¹× ´Ð³×ÀÓ µîÀ» °¡Áö°í ÀÖÀ¸¸é µÈ´Ù. °ÔÀÓÀ̶ó¸é ¾ÆÀÌÅÛ Á¤º¸µéÀÌ, äÆÃÀ̶ó¸é ºÎ°¡ÀûÀΠäÆðü·Ã º¯¼öµéÀÌ Á¸Àç


 



±×·¡¼­ ¼­¹ö¿¡¼­ À¯Àú°¡ Á¢¼ÓÇؼ­ ¹æ¿¡ µé¾î°¡´Â °úÁ¤À» °£·«ÇÏ°Ô  ³ªÅ¸³»º»´Ù¸é


--¸ÞÀÎŬ·¡½º--


Socket Accept ÀÌÈÄ


Socket °´Ã¼¸¦ GameUser Ŭ·¡½º·Î »ý¼ºÀ» ÇØÁØ´Ù.


GameUser user = new GameUser(socket);


ÀÌÈÄ »ç¿ëÀÚ°¡ ¿øÇÏ´Â ¹æ¿¡ ÀÔÀåÇÏ°íÀÚ ÀÔÀå󸮸¦ ¿äûÇϸé


user.enterRoom(room); ÀÌ·±½ÄÀ¸·Î ·ë¿¡ ÀÔÀå󸮸¦ ÇÑ´Ù.


enterRoomÀÇ ÇÔ¼ö¿¡´Â


void enterRoom(GameRoom room){

this.gameRoom = room;

}


ÀÌ·±½ÄÀ¸·Î GameUser°¡ °¡Áö°í ÀÖ´Â GameRoom°´Ã¼¸¦ º¹»çÇØÁØ´Ù.


ȤÀº »õ·Î¿î ¹æÀ» »ý¼ºÇÏ°íÀÚ ÇÏ´Â ¿äûÀ» ¹Þ´Â´Ù¸é


--¸ÞÀÎŬ·¡½º--

RoomManager roomManger = new RoomManager(); // Ŭ·¡½º ½ÃÀÛ ½Ã Çѹø¸¸ »ý¼ºÇØ¾ß ÇÑ´Ù.


GameUser user = new GameUser(socket);

GameRoom room = new GameRoom();


user.enterRoom(room);

room.enterUser(user);


roomManager.createRoom(room);


ÀÌ·±½ÄÀ¸·Î ¸¸µé¸é µÉ °Í °°´Ù.


Áß¿äÇÑÁ¡Àº Room <-> User °£ ¼­·Î »óÈ£ÂüÁ¶¸¦ ÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù´Â Á¡ÀÌ°í,

RoomManager´Â RoomÀÇ ¸®½ºÆ®¸¦,

GameRoomÀº UserÀÇ ¸®½ºÆ®¸¦,


°¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.


¿¹Á¦Äڵ带 º¸µµ·Ï ÇÏÀÚ.


ÀÌ·±½ÄÀ¸·Î °£´ÜÇÏ°Ô ¼¼°¡Áö ÄÉÀ̽º¸¦ ´ë»óÀ¸·Î »ùÇÃÄڵ带 ¸¸µé¾îºÃ´Ù.


À§¿¡ ¾ð±ÞÇÑ´ë·Î, Room°ú User°£ ¼­·Î »óÈ£ÂüÁ¶¸¦ ÇÏ°í ÀÖÀ¸¸é ½±°Ô À¯Àú¿Í ·ë¿¡ Á¢±ÙÇÒ ¼ö°¡ ÀÖ´Ù.


»ùÇà ÇÁ·ÎÁ§Æ®ÀÇ ±¸¼ºÀº ³×°³ÀÇ Å¬·¡½º·Î ±¸¼ºÀ» Çß´Ù.



ÀÌ·±½ÄÀ¸·Î ¿ª½Ã ÇÑ ÆÐÅ°Áö ³»¿¡ ¹­¾î¼­ ÀÛ¼ºÀ» ÇÏ¸é µÈ´Ù.


¸Å¿ì ±âÃÊÀûÀÎ ±â´É¸¸ ´ã¾Ò±â ¶§¹®¿¡ ÇÊ¿äÇÑ ±â´ÉÀÌ ÀÖ´Ù¸é Ãß°¡Çؼ­ »ç¿ëÇÏ¸é µÉ °Í °°´Ù


ÀÌÁ¦ °ÔÀÓ·ë ±¸Á¶, ÇÁ·ÎÅäÄÝ ±¸Á¶¿¡ ´ëÇÑ Æ÷½ºÆÃÀ» ¿Ï·áÇ߱⠶§¹®¿¡


ÃßÈÄ¿¡ ÀÛ¼ºµÉ Æ÷½ºÆÃÀº "ºñµ¿±â JAVA ³×Æ®¿öÅ©" ¿¡ ´ëÇØ Æ÷½ºÆà ÇÏ°íÀÚ ÇÑ´Ù.


±×¸®°í ÃÖÁ¾ÀûÀ¸·Î ¾Õ¼± Æ÷½ºÆõéÀ» ¸ðµÎ ÀÌ¿ëÇÑ °£´ÜÇÑ »ùÇà ³×Æ®¿öÅ© ÇÁ·Î±×·¥À» ¸¸µå´Â °ÍÀÌ ¸ñÀûÀÌ´Ù.




Á¢±â


/*
 * Author : Gompang
 * Desc : ³×Æ®¿öÅ© °ÔÀÓ¿¡¼­ »ç¿ëµÇ´Â(äÆõµ Æ÷ÇÔ) ¹æ °³³ä Ŭ·¡½º
 * Blog : http://gompangs.tistory.com/
 */
package GameRoomPkg;

import java.util.ArrayList;
import java.util.List;

public class GameRoom {

    private int id; // ·ë ID
    private List userList;
    private GameUser roomOwner; // ¹æÀå
    private String roomName; // ¹æ À̸§

    public GameRoom(int roomId) { // ¾Æ¹«µµ ¾ø´Â ¹æÀ» »ý¼ºÇÒ ¶§
        this.id = roomId;
        userList = new ArrayList();
    }

    public GameRoom(GameUser user) { // À¯Àú°¡ ¹æÀ» ¸¸µé¶§
        userList = new ArrayList();
        user.enterRoom(this);
        userList.add(user); // À¯Àú¸¦ Ãß°¡½ÃŲ ÈÄ
        this.roomOwner = user; // ¹æÀåÀ» À¯Àú·Î ¸¸µç´Ù.
    }

    public GameRoom(List users) { // À¯Àú ¸®½ºÆ®°¡ ¹æÀ» »ý¼ºÇÒ
        this.userList = users; // À¯Àú¸®½ºÆ® º¹»ç

        // ·ë ÀÔÀå
        for(GameUser user : users){
            user.enterRoom(this);
        }

        this.roomOwner = userList.get(0); // ù¹ø° À¯Àú¸¦ ¹æÀåÀ¸·Î ¼³Á¤
    }

    public void enterUser(GameUser user) {
        user.enterRoom(this);
        userList.add(user);
    }

    public void enterUser(List users) {
        for(GameUser gameUser : users){
            gameUser.enterRoom(this);
        }
        userList.addAll(users);
    }

    /**
     * ÇØ´ç À¯Àú¸¦ ¹æ¿¡¼­ ³»º¸³¿
     * @param user ³»º¸³¾ À¯Àú
     */
    public void exitUser(GameUser user) {
        user.exitRoom(this);
        userList.remove(user); // ÇØ´ç À¯Àú¸¦ ¹æ¿¡¼­ ³»º¸³¿

        if (userList.size() < 1) { // ¸ðµç ÀοøÀÌ ´Ù ¹æÀ» ³ª°¬´Ù¸é
            RoomManager.removeRoom(this); // ÀÌ ¹æÀ» Á¦°ÅÇÑ´Ù.
            return;
        }

        if (userList.size() < 2) { // ¹æ¿¡ ³²Àº ÀοøÀÌ 1¸í ÀÌÇ϶ó¸é
            this.roomOwner = userList.get(0); // ¸®½ºÆ®ÀÇ Ã¹¹ø° À¯Àú°¡ ¹æÀåÀÌ µÈ´Ù.
            return;
        }
    }

    /**
     * ÇØ´ç ·ëÀÇ À¯Àú¸¦ ´Ù ÅðÀå½ÃÅ°°í »èÁ¦ÇÔ
     */
    public void close() {
        for (GameUser user : userList) {
            user.exitRoom(this);
        }
        this.userList.clear();
        this.userList = null;
    }

    // °ÔÀÓ ·ÎÁ÷

    /**
     * ÇØ´ç byte ¹è¿­À» ¹æÀÇ ¸ðµç À¯Àú¿¡°Ô Àü¼Û
     * @param data º¸³¾ data
     */
    public void broadcast(byte[] data) {
        for (GameUser user : userList) { // ¹æ¿¡ ¼ÓÇÑ À¯ÀúÀÇ ¼ö¸¸Å­ ¹Ýº¹
            // °¢ À¯Àú¿¡°Ô µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ¸Þ¼­µå È£Ãâ~
            // ex) user.SendData(data);

//			try {
//				user.sock.getOutputStream().write(data); // ÀÌ·±½ÄÀ¸·Î ¹ÙÀÌÆ®¹è¿­À» º¸³½´Ù.
//			} catch (IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
        }
    }

    public void setOwner(GameUser gameUser) {
        this.roomOwner = gameUser; // ƯÁ¤ »ç¿ëÀÚ¸¦ ¹æÀåÀ¸·Î º¯°æÇÑ´Ù.
    }

    public void setRoomName(String name) { // ¹æ À̸§À» ¼³Á¤
        this.roomName = name;
    }

    public GameUser getUserByNickName(String nickName) { // ´Ð³×ÀÓÀ» ÅëÇؼ­ ¹æ¿¡ ¼ÓÇÑ À¯Àú¸¦ ¸®ÅÏÇÔ

        for (GameUser user : userList) {
            if (user.getNickName().equals(nickName)) {
                return user; // À¯Àú¸¦ ã¾Ò´Ù¸é
            }
        }
        return null; // ã´Â À¯Àú°¡ ¾ø´Ù¸é
    }

    public GameUser getUser(GameUser gameUser) { // GameUser °´Ã¼·Î get

        int idx = userList.indexOf(gameUser);

        // À¯Àú°¡ Á¸ÀçÇÑ´Ù¸é(gameUserÀÇ equals·Î ºñ±³)
        if(idx > 0){
            return userList.get(idx);
        }
        else{
            // À¯Àú°¡ ¾ø´Ù¸é
            return null;
        }
    }

    public String getRoomName() { // ¹æ À̸§À» °¡Á®¿È
        return roomName;
    }

    public int getUserSize() { // À¯ÀúÀÇ ¼ö¸¦ ¸®ÅÏ
        return userList.size();
    }

    public GameUser getOwner() { // ¹æÀåÀ» ¸®ÅÏ
        return roomOwner;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List getUserList() {
        return userList;
    }

    public void setUserList(List userList) {
        this.userList = userList;
    }

    public GameUser getRoomOwner() {
        return roomOwner;
    }

    public void setRoomOwner(GameUser roomOwner) {
        this.roomOwner = roomOwner;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        GameRoom gameRoom = (GameRoom) o;

        return id == gameRoom.id;
    }

    @Override
    public int hashCode() {
        return id;
    }
}

Á¢±â


Á¢±â


/*
 * Author : Gompang
 * Desc : ³×Æ®¿öÅ© °ÔÀÓ¿¡¼­ »ç¿ëµÇ´Â(äÆõµ Æ÷ÇÔ) ¹æ °³³ä Ŭ·¡½º
 * Blog : http://gompangs.tistory.com/
 */
package GameRoomPkg;

import java.net.Socket;

// ½ÇÁ¦·Î °ÔÀÓÀ» Ç÷¹ÀÌÇÏ´Â À¯ÀúÀÇ Å¬·¡½ºÀÌ´Ù.

public class GameUser {

	private int id; 			// Unique ID
	private GameRoom room; 		// À¯Àú°¡ ¼ÓÇÑ ·ëÀÌ´Ù.
	private Socket sock; 		// ¼ÒÄÏ object
	private String nickName;	// ´Ð³×ÀÓ

	// °ÔÀÓ¿¡ °ü·ÃµÈ º¯¼ö ¼³Á¤
	// ...
	//

	private PlayerGameInfo.Location playerLocation; // °ÔÀÓ Á¤º¸
	private PlayerGameInfo.Status playerStatus; // °ÔÀÓ Á¤º¸

	public GameUser() { // ¾Æ¹«·± Á¤º¸°¡ ¾ø´Â ±øÅë À¯Àú¸¦ ¸¸µé ¶§
	}

    /**
     * À¯Àú »ý¼º
     * @param nickName ´Ð³×ÀÓ
     */
    public GameUser(String nickName) { // ´Ð³×ÀÓ Á¤º¸¸¸ °¡Áö°í »ý¼º
		this.nickName = nickName;
	}

    /**
     * À¯Àú »ý¼º
     * @param id ID
     * @param nickName ´Ð³×ÀÓ
     */
    public GameUser(int id, String nickName) { // UID, ´Ð³×ÀÓ Á¤º¸¸¦ °¡Áö°í »ý¼º
		this.id = id;
		this.nickName = nickName;
	}

    /**
     * ¹æ¿¡ ÀÔÀå½ÃÅ´
     * @param room  ÀÔÀåÇÒ ¹æ
     */
    public void enterRoom(GameRoom room) {
		room.enterUser(this); // ·ë¿¡ ÀÔÀå½ÃŲ ÈÄ
		this.room = room; // À¯Àú°¡ ¼ÓÇÑ ¹æÀ» ·ëÀ¸·Î º¯°æÇÑ´Ù.(Áß¿ä)
	}

    /**
     * ¹æ¿¡¼­ ÅðÀå
     * @param room ÅðÀåÇÒ ¹æ
     */
    public void exitRoom(GameRoom room){
        this.room = null;
        // ÅðÀåó¸®(È­¸é¿¡ ¸Þ¼¼Áö¸¦ Áشٴ µî)
        // ...
    }

	public void setPlayerStatus(PlayerGameInfo.Status status) { // À¯ÀúÀÇ »óŸ¦ ¼³Á¤
		this.playerStatus = status;
	}

	public void setPlayerLocation(PlayerGameInfo.Location location) { // À¯ÀúÀÇ À§Ä¡¸¦ ¼³Á¤
		this.playerLocation = location;
	}

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public GameRoom getRoom() {
        return room;
    }

    public void setRoom(GameRoom room) {
        this.room = room;
    }

    public Socket getSock() {
        return sock;
    }

    public void setSock(Socket sock) {
        this.sock = sock;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public PlayerGameInfo.Location getPlayerLocation() {
        return playerLocation;
    }

    public PlayerGameInfo.Status getPlayerStatus() {
        return playerStatus;
    }

    /*
        equals¿Í hashCode¸¦ override ÇØÁà¾ß, µ¿ÀÏÀ¯Àú¸¦ ºñ±³ÇÒ ¼ö ÀÖ´Ù
        ºñ±³ÇÒ ¶§ -> gameUser °£ equals ºñ±³, list¿¡¼­ find µî
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        GameUser gameUser = (GameUser) o;

        return id == gameUser.id;
    }

    @Override
    public int hashCode() {
        return id;
    }
}


Á¢±â


Á¢±â



/*
 * Author : Gompang
 * Desc : ³×Æ®¿öÅ© °ÔÀÓ¿¡¼­ »ç¿ëµÇ´Â(äÆõµ Æ÷ÇÔ) ¹æ °³³ä Ŭ·¡½º
 * Blog : http://gompangs.tistory.com/
 */
package GameRoomPkg;

// À¯ÀúÀÇ »óÅ ¹× ÇöÀç À§Ä¡ÇÏ°í ÀÖ´Â Àå¼Ò¸¦ ÁöÁ¤Çϱâ À§ÇÑ Enum Class
public class PlayerGameInfo {

	enum Location {
		MAP_1, MAP_2, MAP_3, MAP_4, MAP_5
	};

	enum Status {
		IDLE, BATTLE, DEAD
	};
}


Á¢±â


Á¢±â



/*
 * Author : Gompang
 * Desc : ³×Æ®¿öÅ© °ÔÀÓ¿¡¼­ »ç¿ëµÇ´Â(äÆõµ Æ÷ÇÔ) ¹æ °³³ä Ŭ·¡½º
 * Blog : http://gompangs.tistory.com/
 */
package GameRoomPkg;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

public class RoomManager {

    private static List roomList; // ¹æÀÇ ¸®½ºÆ®
    private static AtomicInteger atomicInteger;

    static {
        roomList = new ArrayList();
        atomicInteger = new AtomicInteger();
    }

    public RoomManager() {

    }

    /**
     * ºó ·ëÀ» »ý¼º
     * @return GameRoom
     */
    public static GameRoom createRoom() { // ·ëÀ» »õ·Î »ý¼º(ºó ¹æ)
        int roomId = atomicInteger.incrementAndGet();// room id ä¹ø
        GameRoom room = new GameRoom(roomId);
        roomList.add(room);
        System.out.println("Room Created!");
        return room;
    }

    /**
     * ¹æÀ» »ý¼ºÇÔ°ú µ¿½Ã¿¡ ¹æÀåÀ» ¸¸µé¾îÁÜ
     * @param owner ¹æÀå
     * @return GameRoom
     */
    public static GameRoom createRoom(GameUser owner) { // À¯Àú°¡ ¹æÀ» »ý¼ºÇÒ ¶§ »ç¿ë(À¯Àú°¡ ¹æÀåÀ¸·Î µé¾î°¨)
        int roomId = atomicInteger.incrementAndGet();// room id ä¹ø

        GameRoom room = new GameRoom(roomId);
        room.enterUser(owner);
        room.setOwner(owner);

        roomList.add(room);
        System.out.println("Room Created!");
        return room;
    }

    /**
     * À¯Àú ¸®½ºÆ®·Î ¹æÀ» »ý¼º
     * @param users ÀÔÀå½Ãų À¯Àú ¸®½ºÆ®
     * @return GameRoom
     */
    public static GameRoom createRoom(List users) {
        int roomId = atomicInteger.incrementAndGet();// room id ä¹ø

        GameRoom room = new GameRoom(roomId);
        room.enterUser(users);

        roomList.add(room);
        System.out.println("Room Created!");
        return room;
    }

    public static GameRoom getRoom(GameRoom gameRoom){

        int idx = roomList.indexOf(gameRoom);

        if(idx > 0){
            return roomList.get(idx);
        }
        else{
            return null;
        }
    }

    /**
     * Àü´Þ¹ÞÀº ·ëÀ» Á¦°Å
     * @param room Á¦°ÅÇÒ ·ë
     */
    public static void removeRoom(GameRoom room) {
        room.close();
        roomList.remove(room); // Àü´Þ¹ÞÀº ·ëÀ» Á¦°ÅÇÑ´Ù.
        System.out.println("Room Deleted!");
    }

    /**
     * ¹æÀÇ ÇöÀç Å©±â¸¦ ¸®ÅÏ
     * @return ÇöÀç size
     */
    public static int roomCount() {
        return roomList.size();
    }
}

Á¢±â


Á¢±â


package game.room.test;


import GameRoomPkg.GameRoom;
import GameRoomPkg.GameUser;
import GameRoomPkg.RoomManager;

public class GameRoomTest {

    public void roomCreateTest(){

        // #1. À¯Àú ·Î±×ÀÎ
        GameUser gameUser = new GameUser(1, "gompang");
        GameUser gameUser2 = new GameUser(2, "apple");
        GameUser gameUser3 = new GameUser(3, "banana");

        // #2. ƯÁ¤ À¯Àú°¡ ¹æÀ» ¸¸µå·Á°í ÇÔ
        GameRoom gameRoom = RoomManager.createRoom(gameUser);

        // #3. ±× ¹æ¿¡ ³ª¸ÓÁö À¯Àú°¡ µé¾î°¡·Á°í ÇÔ
        gameRoom.enterUser(gameUser2);
        gameRoom.enterUser(gameUser3);

        // -- ·ÎÁ÷ ÁøÇà~ °ÔÀÓ, äÆà µî --

        // #4. À¯Àú°¡ ¹æ¿¡¼­ ³ª°¨
        gameRoom.exitUser(gameUser2);

        // #5. ¹æÀåÀÌ ¹æ¿¡¼­ ³ª°¨ -> gameUser3ÀÌ ¹æÀåÀÌ µÊ
        gameRoom.exitUser(gameUser);

        // #6. gameUser3ÀÌ ¹æ¿¡¼­ ³ª°¨ -> size°¡ 0ÀÌ µÇ¸é¼­ ¹æÀÌ ¾ø¾îÁü
        gameRoom.exitUser(gameUser3);

        // #7. ¾Æ·¡ °á°ú´Â null ÀÌ°ÚÁö
        GameRoom room = RoomManager.getRoom(gameRoom);

        if(room != null){
            System.out.println("¹æÀÌ ¾ÆÁ÷ ÀÖ³×");
        }
        else{
            System.out.println("¹æÀÌ ¾ø¾îÁ³³×");
        }
    }

    public void roomTest(){
        // #1. À¯Àú ·Î±×ÀÎ
        GameUser gameUser = new GameUser(1, "gompang");
        GameUser gameUser2 = new GameUser(2, "apple");
        GameUser gameUser3 = new GameUser(3, "banana");

        // #2. ƯÁ¤ À¯Àú°¡ ¹æÀ» ¸¸µå·Á°í ÇÔ
        GameRoom gameRoom = RoomManager.createRoom(gameUser);

        // #3. ±× ¹æ¿¡ ³ª¸ÓÁö À¯Àú°¡ µé¾î°¡·Á°í ÇÔ
        gameRoom.enterUser(gameUser2);
        gameRoom.enterUser(gameUser3);

        // -- ¹æ ¸ðµçÀ¯Àú¿¡°Ô µ¥ÀÌÅÍ Àü¼Û --
        byte[] data = "¹æ À¯Àú¿¡°Ô broadcastÇÒ µ¥ÀÌÅÍ".getBytes();
        gameRoom.broadcast(data);

        // #4. ´©±º°¡°¡ gompangÀ̶ó´Â ´Ð³×ÀÓÀ¸·Î ¹æÀÇ À¯Àú¸¦ °Ë»öÇÔ(±Ó¼Ó¸», °Å·¡ µîÀÇ ¸ñÀûÀ¸·Î)
        GameUser gompang = gameRoom.getUserByNickName("gompang");

        // #5. ¼­¹ö¿¡¼­ ¹«¾ð°¡ÀÇ ÀÌÀ¯·Î gameRoomÀ» »èÁ¦ÇÔ(¸ðµç À¯Àú ÅðÀåó¸®)
        RoomManager.removeRoom(gameRoom);
    }

}


Á¢±â


* p.s

2017.11.30 ¼öÁ¤

 - ¸¹Àº ºÐµéÀÌ test class¸¦ Á» ´Þ¶ó°í Çϼż­.. °£¸¸¿¡ ¼Ò½ºÄÚµå Á» º¸°í ÆĶó¹ÌÅÍ¿Í Å¬·¡½º µîÀ» Á¤¸®Çؼ­ ¼öÁ¤.

 - test class Ãß°¡

 - ¼¼»ó¿¡³ª Äڵ尡 ¾ÆÁÖ ¾²·¹±â¿´½À´Ï´Ù. (Á˼ÛÇÕ´Ï´Ù) ÀÌÁ¨ ¿Ïº®ÇÏÁø ¸øÇصµ ±âº»±â´ÉÀº ÇÏ´Â ÄÚµå´Ï Âü°íÇϽñ⠹ٷ¡¿ä