VOID* 혹은 CHAR*의 위력을 유감없이 발휘하는 부분은
머니머니해도 소켓으로 날라온 데이터를 상황에 맞게끔 캐스팅할 때일 것이다.
(그러나 이러한 캐스팅도 길이가 고정되어 있지 않을 때는 좆tothe망이다.
바로 string이나 vector, list, map...등을 그래도 전송할 때 좌절한다.)
요즘은 어찌된 영문으로 XML로 패킷을 주고 받고 있는 중이다.
말이 XML이지 결론적으로 스트링을 그대로 사용하고 있으며, 실제로 클라이언트는 stream으로 받고 있다.
시간 사정 상, JSON이나 직렬화까진 구현하지 못하고 그냥 스트림으로 스트링을 사용하고 있는데,
솔직히 처음에는 굉장히 쉬운 작업일꺼라 생각했었다.
그러나 좀 해보니 스트링만 주고 받기도 골치아픈 일이 몇가지 존재함을 느낀다.
우선 인코딩 문제.
클라이언트가 윈도우가 아니라서 EUR-KR을 사용할 수 없으니 무조건 UTF-8이다.
FLEX도 그러하니 어찌보면 너무나 당연한 일인데 초기 작업시 이 사실을 깜빡 잊어 한글을 제대로 표현할수 없었다.
XML에서 한글이 깨지니 당연히 XML을 정상적으로 파싱할수 없었고 이벤트도 제대로 발생시킬수 없었다.
기본적인 인코딩 문제를 잊고 삽질 꽤나 했고 세종대왕 원망도 많이 헀었다.
구글링하다가 인코딩 문제인 것을 알았고 몇분만에 예전에 만들어둔 코드로 뚝딱 붙였다.
...너무나 허무하였다.
두번째는 클래스 설계에 대한 문제.
CUser에서 상속받은 CGameUser 같은 것은 보편적인 상속짓을 하는데,
최종 결과가 클래스가 아니고 XML이니 XML 팩토리 비슷무리한 것이 필요해진다.
아직 XML 팩토리(?)는 만들지 않고 클래스내에서 XML로 변환하고 있는데 구조적으로 어떤게 맞는지 더 생각해봐야겠다.
세번째는 역시 XML의 파싱.
JSON을 아직 구현하지 못했는데 빨랑 해야한다. =_=);;;
만들게 되면 좀 쉬게 고쳐서 강좌성 포스트나 몇개 적어봐야지.
네번째는 굳히 스트링 때문은 아니고 이 기종간의 데이터형 문제다.
은근히 귀찮다... . ㅠㅠ
결론적으로 하루 정도 고민하고 설계하면 전부 해결될 것이고 기술적으로 결코 어렵지 않은 것들인데
10년간 몸에 익은 C++ 클래스와 STL에서 순수 XML로 옮겨가니 몇가지 삐걱이는 것이 느껴져 뻘글을 적어보았다.
