클래스 구조 만드는 것에 대한 질문..

balgarac1의 이미지

첨부 파일에 프로그램의 요구 사항이 나와 있습니다.

프록시 게이트웨이를 c++ 로 짜는 과정 중에 프록시 게이트웨이에 대해서 상속과 다형성을 적용해보라는 추가 요구를 받았습니다.

지금은 프록시 게이트웨이가

class CNetwork
{
public:
 
		CNetwork();
		~CNetwork();
 
		int CNetworkRelayInit();
		int CNetworkRelayConnectDBServer();
		void CNetworkRelayMultiplexing();
 
private:
		int m_nSock;
		int m_nClntSock;
		int m_nDBSock;
		int m_FdMax, m_StrLen, m_FdNum, m_i;
		int m_nPacketSize;
		UB2 m_ubMsgType;
 
		struct sockaddr_in m_ServAddr;
		struct sockaddr_in m_ClntAddr;
		struct sockaddr_in m_DbAddr;
 
		struct timeval m_timeout;
		char m_pBuf[2048];
 
		fd_set m_reads, m_cpy_reads;
 
		socklen_t m_adrSz;
 
		// 로그인 패킷 구조
		dgt_auth_req_msg m_LoginReqMsg;
		dgt_auth_res_msg m_LoginResMsg;
 
		// SQL 패킷 구조체
		dgt_sql_req_msg m_SqlReqMsg;
		dgt_sql_res_msg m_SqlResMsg;
 
		// 종료 처리 패킷 구조체
		dgt_close_req_msg m_CloseReqMsg;
		dgt_close_res_msg m_CloseResMsg;
 
 
		// broken packet 구조체
		dgt_broken_packet_msg m_BrokenPacketMsg;
 
		// SQL 처리 시 필요한 문자열
		char m_szSqlText[2025];
		char m_szTmp[1025];
		char *m_pStr;
		int m_SqlTypeRetValue;
 
		// 소켓 기능 별로 저장할 변수
		queue<int> m_nLoginSocket;
		queue<int> m_nSqlSocket;
		queue<int> m_nCloseSocket;
 
		// 패킷 수신
		int CNetworkRelayRecvPacket(char * m_pBuf, UB2 * msgType, int *);
 
		// 패킷 식별
		void CNetworkRelayCheckMsgService(char *, UB2, int);
 
		// 로그인 요청 및 응답 중계
		void CNetworkRelayAuthService(int);
		void CNetworkRelayAuthResService();
 
		// SQL 요청 및 응답 중계
		void CNetworkRelaySqlService(int);
		void CNetworkRelaySqlResService();
 
		// 종료 요청 및 응답 중계
		void CNetworkRelayCloseService(int);
		void CNetworkRelayCloseResService();
 
		// SQL 타입 체크
		int CNetworkRelaySqlTypeCheck(char *);
 
		// 잘못 온 패킷 처리
		void CNetworkRelayBrokenPacketService();
 
};

이런 식으로 하나의 클래스 안에 만들어져 있는데

메세지가 100개 정도로 늘어나게 된다면 이런 프록시 게이트웨이 구조에서는 다소 비효율적인 구조로 처리할 수 밖에 없을 것 같아서 질문 드립니다.

어떻게 이 클래스를 분할하는 것이? 상속과 다형성을 살릴 수 있는 방향일까요??

네트워크를 처리하는 클래스와 메세지를 처리하는 클래스를 따로 갖고 있어야 할까요??

처리해야 할 메세지가 100개라면 어떤 식으로 클래스를 디자인해야 좋은 구조를 갖고 있는 프로그램이 될까요??

조언 부탁드립니다..

File attachments: 
첨부파일 크기
Image icon 1.JPG145.43 KB
Image icon 2.JPG64.19 KB
shint의 이미지

요구사항에 대한 내용이라면.
- 요청자에게 메시지 형식을 지정해주시면. 규격문서를 받아서 프로그램에서 사용하실 수 있습니다.
- 패킷 단위로 클래스를 분할해서 상속 및 구현
- 중복패킷은 전송하지 않고. 약속된 시간에 처리
- 메모리를 네트워크 하드처럼. 공유해서 원하는 정보를 READ WRITE

굳이 상속해야 할지는 잘 모르겠습니다.

[KGC2007] Thin Transaction Clients:빠르고 효과적인 게임의 보급
http://www.kocca.kr/cop/bbs/view/B0000180/1289624.do?searchCnd=3&searchWrd=Thin+Transaction+Client&cateTp1=&cateTp2=&useAt=&menuNo=200953&categorys=0&subcate=0&cateCode=&type=&instNo=0&questionTp=&uf_Setting=&recovery=&pageIndex=1

[구글 I/O 2015] 구글 I/O에서 공개된 구글의 10가지 혁신 (1)
http://it.donga.com/21330/

CDN / AOP / REST API / SOAP / XML / XAML / HTML5 / JQuery / Node.js / Ext.js
IOCP / Overlapped I/O / AsyncSocket / ACE Network

도서관. 서점에서 TCPIP 나 게임 네트워크 관련. 책 보시면 많이 있습니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

balgarac1의 이미지

잘 이해가 안되는데요.. 혹시 게임 네트워크?? 쪽 책 추천 하나만 해주실 수 있나요??

아니면 말씀해주신 것이 json 방식의 통신 방식 인가요??

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.