This repository has been archived by the owner on Oct 4, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Packet Make Compare
DONGBUM, KIM edited this page Oct 26, 2017
·
1 revision
각 서버에서의 패킷 구성 코드에 대한 비교 자료
Packet sendPacket( SF_GAMEREADY_ACK );
sendPacket << byteDummyResult << byteDummyResult2 << byteStatus << byteDummyResult3 ;
sendPacket.EncryptPacket( GetCrypt() );
SendPacket( sendPacket );
- Packet 클래스에서 << 와 >> 를 연산자 오버로딩하여 사용.
- 장점
- 사용방법이 쉽다.
- 데이터의 자료형과 상관 없이 << 연산자 하나로 통일하여 입력 가능.
- 코드가 직관적.
- 단점
- 클라이언트와 서버간에 프로토콜 표준을 교환할 문서나 방법이 별도로 필요.
- 순서가 바뀔 경우 잘못된 데이터가 넘어갈 가능성이 크다.
- 입력시 데이터 자료형에 주의하여야 함.
BufferObj buffer;
SPoolAlloc::New(temp_length, buffer);
st_util::pack::InBuffer in_buffer(buffer.get_data(), SPoolAlloc::Size(buffer));
in_buffer.SetUShort(result);
in_buffer.SetUInt64(friend_user_identifier);
in_buffer.SetUShort(friend_team_name_length);
in_buffer.SetByte(friend_team_name);
uint32_t send_length = temp_length;
return MakeSendData(0xFFFF, packet_no, PTCL_NO, 0, send_length, buffer);
- 버퍼 객체에 데이터를 차례대로 쌓는다.
- 장점
- 사용방법이 비교적 쉽다.
- 코드가 직관적
- 입력시 자료형에 따라 함수가 다르므로 잘못 입력될 가능성이 적음.
- 단점
- 클라이언트와 서버간에 프로토콜 표준을 교환할 문서나 방법이 별도로 필요.
- 버퍼 이해 필요.
MAKE_TCP_PACKET_HEADER(UPDATE_MISSION_INFO_RQ, GS_CS_UPDATE_MISSION_RQ);
pMsg->nKakaoID = nKakaoID;
pMsg->mission_info = mission_info;
GAME_SVR->GetCacheConn()->SendPacket(pSockBuf->m_szBuf);
MAKE_PACKET_END();
#define MAKE_TCP_PACKET_HEADER(STRUCT, CMD)\
{\
cTcpSockBuf* pSockBuf = TCMALLOC_NEW(cTcpSockBuf);\
STRUCT* pMsg = (STRUCT*)pSockBuf->m_szBuf;\
pMsg->stHdr.nSize = sizeof(STRUCT);\
pMsg->stHdr.bEncrypt = false;\
pMsg->stHdr.nCmd = CMD
#define ADD_PACKET_SIZE(ADD_SIZE)\
pMsg->stHdr.nSize += (ADD_SIZE)
#define MAKE_PACKET_END()\
pSockBuf->ReleaseBuf();\
}
- 매크로를 이용하여 패킷 구성 코드를 작동시킨다.
- 장점
- 입력에 실수가 있다하더래도 데이터의 순서는 보장된다.
- 단점
- 패킷의 구조가 변경되거나 했을 때, 데이터를 자유롭게 입력할 수 없다.
- 패킷 모두 각각 구조체 선언 필요.