Skip to content
This repository has been archived by the owner on Oct 4, 2019. It is now read-only.

Packet Make Compare

DONGBUM, KIM edited this page Oct 26, 2017 · 1 revision

각 서버에서의 패킷 구성 코드에 대한 비교 자료


Phoenix 서버

Packet sendPacket( SF_GAMEREADY_ACK );
sendPacket << byteDummyResult << byteDummyResult2  << byteStatus << byteDummyResult3 ;
sendPacket.EncryptPacket( GetCrypt() );
SendPacket( sendPacket );
  • Packet 클래스에서 << 와 >> 를 연산자 오버로딩하여 사용.
  • 장점
  1. 사용방법이 쉽다.
  2. 데이터의 자료형과 상관 없이 << 연산자 하나로 통일하여 입력 가능.
  3. 코드가 직관적.
  • 단점
  1. 클라이언트와 서버간에 프로토콜 표준을 교환할 문서나 방법이 별도로 필요.
  2. 순서가 바뀔 경우 잘못된 데이터가 넘어갈 가능성이 크다.
  3. 입력시 데이터 자료형에 주의하여야 함.

st_util

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);
  • 버퍼 객체에 데이터를 차례대로 쌓는다.
  • 장점
  1. 사용방법이 비교적 쉽다.
  2. 코드가 직관적
  3. 입력시 자료형에 따라 함수가 다르므로 잘못 입력될 가능성이 적음.
  • 단점
  1. 클라이언트와 서버간에 프로토콜 표준을 교환할 문서나 방법이 별도로 필요.
  2. 버퍼 이해 필요.

GD 서버

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();\
}
  • 매크로를 이용하여 패킷 구성 코드를 작동시킨다.
  • 장점
  1. 입력에 실수가 있다하더래도 데이터의 순서는 보장된다.
  • 단점
  1. 패킷의 구조가 변경되거나 했을 때, 데이터를 자유롭게 입력할 수 없다.
  2. 패킷 모두 각각 구조체 선언 필요.
Clone this wiki locally