우리가 #5에서 만들어 주었던 PacketManager를 자동화를 해주는 부분을 할 것이다.
그래서 PacketFormat에다가 PacketManager내용 옮기도록 하자.
이런식으로 다 긁어 온다음에
자동화 할부분을 보면은
의외로 많이 없는것을 알 수 있다.
Register부분만 자동화 부분이 들어가야 한다는 말인데
여기 {0}번은 패킷 등록
패킷등록의 {0}에 들어갈
{0}은 패킷이름이다
그래서 managerFormat을 어느정도 맞춰 주었으면 다시 Program에 가가지고
이렇게 추가하고
Main에서
이렇게 추가를 해주도록 하자.
그리고
이런이름으로 생성을 해주면 된다.
그리고 이제 남은것은 managerRegister를 패킷을 돌면서 계속 추가를 해줘야 한다.
그래서
여기 제일 밑에서 추가를 해주도록 하자.
이까지 한다음에 PacketGenerator빌드 한다음 배치파일 클릭하면되는데
그전에 배치파일도 수정을 좀 해주어야 한다.
이런식으로 PacketManager를 각각경로에 똑같이 복사를 해주도록 하겠다.
그리고 빌드 > 배치파일 실행하면 이제
이렇게 뜨는데 에라가 난 부분이 많다!
using 빠졌는데 추가 packetFormat에 추가 ㄱㄱ
추가를 해주고
PacketHandler같은 경우는 빨간줄 뜨는게 정상이다.
수정하고 다시 빌드 > 배치 실행하면 잘 갱신이 된다.
그리고 PacketHandler의 namespace server 삭제를 해주도록 하자.
그러면 빨간줄 하나 없이지고
TestPacketHandler는 우리가 정의를 안해주어서 그런것이다.
Handler에서 같이 정의를 해주면된다.
이렇게 이름 맞춰주면된다.
그러면 이제는 PDL에다가 뭔가
패킷을 추가를 한다음에
그다음에는 까먹지 않고 PacketHandler에다가 해당 패킷의 Handler함수를 추가를 해주어야 한다.
그리고 이때까지 Server에다가 manager랑 Handler다 만들어 줬으니
Dummy에도 똑같이 만들어 주도록 하자. (Handler만)
그래서
이상태에서
이렇게 하고
테스트를 해보면
이렇게 잘 뜬다.
이제 이렇게 해서 진짜 윤곽이 어느정도 잡히게되었다.
이렇게해서
PacketHandler로 실제 packet을 넘기는 것 까지는
굉장히 잘 처리를 하고 있고
유용 && 편리하다.
그런데 하나 더 수정해야 할 부분이 있는데
원래 패킷은 양방향이 아니라
거의 모든 것이 "클라"에서 "서버"로 요청을 보낸다.
그런데 지금은 Dummy > PacketHandler에서
이런식으로 (비워놓더라도) 선언을 해줘야 한다는 부분이 찝찝하다.
그리고 두번째 문제는
패킷이름과 용도에 관한 문제인데
패킷이름을 명확히 해야하고 Handler에 등록할때도 꼭 필요한것들만 등록을 하고
쏘는것도 필요한 패킷만 하도록 해야한다.
그래서 다양한 방법이 있는데 이렇게 usage로 어떻게 사용할 것인지 넣어줘도 되고
그런데
좀 간단간단한 방법이 있는데
C_어쩌구 하면 클라에서 서버로
S_어쩌구 하면 서버에서 클라로
이런식이다.
그래서 Server > PacketManager에서 자동화를 할때
이런 부분에서
C_가 붙은 애들만 등록을 해야되는 것이고
반대로 Dummy의 PacketManager같은 경우에는
S_붙은 애들만 등록을 해줘야 한다.
그래서 이 작업을 간단하게 추가를 해주도록 하겠다.
이것을 가장 간단하게 하는 부분은
PacketGenerator > Program에 가가지고
packetName을 어떤 것인지를 구분을 해가지고
분리를 해서 파일을 만드는 것이다.
그래서 이렇게 두개의 파일로 구분을 하기 위해 이렇게 하고
밑에서 파일 만드는 부분에서도
이렇게 구분을 해주도록 하자.
그다음 아래로 내려간다음에
이런식으로 해주었는데
여기서 한번더 구분을 해주도록 하겠다.
그래서 이런식으로 구분을 해서 각각의 register에다가 등록을 해주도록 하자.
그리고
이녀석은 삭제 ㄱㄱ
그리고 배치파일 수정 ㄱㄱ
이상태에서
배치 실행 ㄱㄱ
하면 이렇게 생성된것을 볼 수 있다.
파일은 이렇게 놔두도록 하자.
그리고 배치파일 실행을 하면
serverPacketManager에서는 C_가 붙은 애들만
clientPacketManager에서는
S_가 붙은 애들만 등록이 될 것이다.
빨간줄이 뜨는데
이렇게 바뀜에 따라서 PacketHandler를 조금 수정을 해주기는 해야된다.
이렇게 바꾸고,
밑에 Test는 필요 없으니 삭제 ㄱㄱ
그리고 이런식으로 다 수정을 해주어야 한다.
그리고 clientPacketmanager랑 클라 Handler는
이렇게 수정을 해주도록 하자.
이다음 빌드 > 실행 > 에러나는 부분 수정 ㄱㄱ
별건 아니고 ServerSession에서 이렇게 수정 ㄱㄱ
테스트 해보면 잘된다.
이렇게 자동화가 거의 끝났다.
우리가 패킷을 직렬화 했던 부분을 보면
가장 기초적이고 가장 간단하게 만든 것이다.
사실은 직렬화를 할떄 이거보다 성능이 훨씬 더 뛰어나게 만들 수 있다는 얘기이다.
우리가 매번마다 영억을 찝어주고 채크를 하고 이런식으로 하고 있었지만
다른 우아한 방법이 있지만 그것은 너무 고급주제고
나중에 C++서버를 다룰때 그런 방법들을 알아 볼 것이다.
인디게임 수준이라면 이정도도 굉장히 훌륭하고 충분쓰하다.
나중에 이런 우리가 한땀한땀 만드는 패킷이 아니라
구글프로터?버프? 라던가 플랫버퍼를 사용한다고 하더라도
우리가 이때까지했던 이런과정들을 거친다는 것은
알고있으면된다.
-끝-