마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

소켓통신 실시간 온라인 게임 구조

0 추천
 
소켓 온라인 게임을 만들때 여러분은 어떤 구조로 만드시는지 경험/조언을 듣고자 질문을 올립니다.
 
 
실시간 온라인 "모두의 마블" 게임을 만든다고 가정하겠습니다.
 
서버와, 클라이언트가 서로 정보를 주고 받는 단 하나의 통로는 소켓이 되겠지요?
서버의 입장에서는.. a 라는 사람은 지금 로비에 있습니다.
그런데 갑자기 a 라는 사람이 "주사위를 던진다" 라는 패킷을 보냅니다. ( 주사위던지는 패킷은 로비가 아닌 게임에서 주고받는 패킷입니다. )
그럼 서버는 이 패킷을 무시 하던가, 아니면 사용자를 끊어버리던지 처리를 하겠지요.
 
 
자 그럼 코드로 해보면..
 
 

void onSocketData( JSONOBject data ) {
    switch( data.getString("packetType") ) {
        case "주사위를 던진다":
            if( isLobby() ) disconnect(); // 로비에서 주사위를 던져?
            throwDice();
            break;
        case "로비에 입장":

            break;
        case "로비에서대화":
            if( !isLobby() ) disconnect(); //지금 로비에 있지 않는데 로비대화 패킷?
            chat();
            break;
    }
}


 

요런 형태가 되겠지요.

위에 보면 상황별로 if가 계속 들어갑니다.
 
packet 종류가 늘어나면 switch 구문도 엄청 길어질거구요..
 
그래서 지금 저의 고민은... 
상황에 따라 listen 해야 하는 패킷이 있고, 듣지 말아야 할 패킷(비정상 패킷) 이 있습니다.
이것을 어떤 구조로 해야 아름다운 구조가 될지 여러분의 조언을 듣고 싶습니다.
 
 
박봉배 (730 포인트) 님이 2015년 5월 7일 질문
그런 경우라면, performance의 이점은 좀 줄어들겠지만 packetType을 이용해서 reflection을 사용해서 특정 처리 클래스나 메소드를 호출하면 어떨까요?
아니면 어노테이션을 packetType에 따라 정의해서 호출할 수도 있을 것 같습니다.
eg)
@Process(packetType=1)
private void handleRoleDice(){

}

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...