Packet Generator에 대한 고찰

게임 서버 프로그래밍/네트워크 잡것들

2020. 11. 8. 20:52

정리가 잘 되지 않아서 블로그 포스팅을 하고 있다.

inflearn 강의를 듣던 중 Packet Generator와 관련해서 자동화 코드들을 익혔는데

여간 써먹기 쉽지가 않다.. 그대로 따라하는 것도 그렇지만 패킷 이외에 어떤식으로 활용해야 할지

아직까지 생각하지 못했다. 처음엔 Quest Generator처럼 퀘스트들을 자동화하면 좋겠다 생각했다.

그런데 제대로 구조를 짜지 않고 테스트만 하려고 해서 그런지 자동화를 해야하는 이유를 찾지 못하겠다.

 

자동화 과정을 보면 

 

자동화 될 부분 설정 ->XML 데이터 파싱 -> 해당 데이터를 토대로 자동화 되는 클래스 변수들이 정해짐 

-> 파일로 포맷

 

위의 과정을 거치는데 패킷의 경우 보내려는 패킷의 종류에 따라 Read,Write의 대부분이 변경되고, 보낼 데이터 변수 타입들도 제각각이니 멤버 변수도 완전히 달라진다.

 

그런데 퀘스트는 그렇지않다. 계속 착각했던게 자동화가 변수에 들어갈 값을 채워주는 녀석이 아니라는 것이다.

그 변수들을 자동으로 정의해주고 함수의 내용에 추가적인 부분을 더해주는 역할을 하는 것 뿐이다.

 

퀘스트 타입에 대해서 엄~청 옛날에 생각을 해본적이 있다. 퀘스트 완료조건에 따라서 나누었는데, 소탕이나 재료 모으기, 특정 지역 방문 등등.. 그럼 퀘스트란게 완료 조건에 따라 나누어 자동화 하는게 맞냐고 한다면 아니다. 이런 조건들은 event로 들고 있는게 낫고 처리가 제각각이라 자동화 할 수 있는 부분이 거의 없다.

 

사실 이 문제에 결론을 내지 못했다. 솔직히 말하면 와닿지 않는다. 어떻게 만드는지는 학습 했지만 왜 만드는지가 와닿지 않는다. 그건, 아직 내가 반복적으로 만들어야 하는 것들을 노가다로 만들어보지 못해서인듯하다.

 

그리고, 나는 UI에 값들을 넣어 초기화 하는 툴과 패킷 생성기가 같다는 착각을 하고 있다. 전자는 동적으로 데이터 값을 변경 시켜줄 때 사용되지만, 후자는 프로그램을 만들 때 코드를 자동 생성 해준다. 가장 간단히는 enum에 어떤 데이터가 들어갈지 결정을 해주고, 나아가서 클래스나 구조체에 어떤 변수가 들어가는지, 더 나아가서 어떤 파일에 공통적인 부분들은 그대로 복사되고 추가되야할 부분들중 일관성있게 자주 반복되는 것들을 자동화 하는 것이다.

 

그러니 사실 퀘스트에서 자동화가 필요한 부분은 퀘스트 id가 담길 enum과 해당 퀘스트가 hash_map에의해 관리된다면 hash_map에 추가하는 부분들도 자동화 될 수 있다. 퀘스트 인터페이스를 상속받는 여러 퀘스트들이 어떤식으로 이루어 지는지는 몰라도 그저 오버라이딩 되지않고 아예 새로운 함수들을 제공해야 하거나 오버라이딩 되더라도 전혀 관계없는 코드들로 이루어진다면 해당 부분은 자동화 할 수 없다. 반대로, 아예 똑같은 경우 자동화 할 이유가 없다. 객체를 만들어 값만 달리 넣어주면 되니까!

'게임 서버 프로그래밍 > 네트워크 잡것들' 카테고리의 다른 글

용량 ㅜ  (0) 2021.10.19
mysqld port 문제..  (0) 2021.10.11
Centos7 + nginx + php-fpm 설정  (0) 2021.10.04
select함수의 writefds  (0) 2020.04.16
UDP와 Select()  (0) 2020.02.27