Files
2022-10-26 12:25:11 +08:00

2816 lines
80 KiB
C++

#pragma once
///////////////////////////////////////////////////////////////////////////////////////////////////
// 국가별 기능 디파인
#ifdef _CHINA
#define _110503_CUSTOM_USERID_LENGTH // 국가별 사용자ID(계정이름) 길이 설정 사용
// 1. 중국에서 유저 계정길이를 기존 12에서 50으로 늘려달라는 요청에 의한 추가
// [TO-BE-DELETED] #define _090223_USER_ID_LENGTH_50_CHINA_ONLY_ // 중국 유저 계정 길이 50자
// 2. 또!! 중국에서 웹 상에서 유저 강제 종료 기능을 RTT에 추가 시켜 달라는 요청에 의한 추가
#define _090427_HTTP_WEB_DROP_USER // 중국 웹 상에서 유저 강제 종료 기능 연동
#endif
#ifdef _KOREA
// 썬 채널링 서비스를 통해 들어온 한게임 및 피망 계정 유저의 동접 정보를 마스터 서버로부터 수신한다(현재 국내만 적용)
#define _090901_CHANNELLING_CONNECT_USER_
#endif
#ifdef _RUSSIA
#define _110503_CUSTOM_USERID_LENGTH // 국가별 사용자ID(계정이름) 길이 설정 사용
#endif
//
///////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef DESCLEN
#define DESC_LEN 30
#endif
#ifdef _110503_CUSTOM_USERID_LENGTH
#if defined(_CHINA)
#define ID_MAX_LEN 50
#elif defined(_RUSSIA)
#define ID_MAX_LEN 24
#endif
#endif // _110503_CUSTOM_USERID_LENGTH
#ifndef ID_MAX_LEN
#define ID_MAX_LEN 24
#endif
#ifndef IP_MAX_LEN
#define IP_MAX_LEN 16
#endif
#pragma pack(1)
#define SIZEOFHDR_SUN 2 // Sun에서는 size를 2byte 차감한다.
#define SIZEOFHDR SIZEOFHDR_SUN
// 웹 감시 URL 프로토콜( 06-12-05, 김종호 )
#define DEFAULT_AGENT_NAME "RTTAgent" // 감시할 응용 프로그램의 이름
#define MAX_URL 1024 // URL 최대길이
#define MAX_FILENAME 256 // 파일이름 최대길이
//////////////////////////////////////////////////////////////////////////
// Agent Type
#define SERVERTYPE_AGENT 0x01 // RTT Agent
#define SERVERTYPE_AUTH 0x02 // AuthServer
#define SERVERTYPE_MASTER 0x04 // MasterServer
//////////////////////////////////////////////////////////////////////////
// Category
#define CATEGORY_GENERAL 0x00
#define CATEGORY_WOPS 0x01
#define CATEGORY_RTT 0x02
#define CATEGORY_HTTP 0x03
//------------------------------------------------------------------------
// Message list - WOPS
#define RTTW_CERTIFY_REQ ( CATEGORY_WOPS | 0x01 << 8 )
#define RTTW_CERTIFY_ANS ( CATEGORY_WOPS | 0x02 << 8 )
#define RTTW_DISCERTIFY_NTF ( CATEGORY_WOPS | 0x03 << 8 )
#define RTTW_SERVERLIST_REQ ( CATEGORY_WOPS | 0x04 << 8 )
#define RTTW_SERVERLIST_ANS ( CATEGORY_WOPS | 0x05 << 8 )
#define RTTW_GAMENOTICE_REQ ( CATEGORY_WOPS | 0x06 << 8 )
#define RTTW_GAMENOTICE_ANS ( CATEGORY_WOPS | 0x07 << 8 )
#define RTTW_GAMEADMINLIST_REQ ( CATEGORY_WOPS | 0x08 << 8 )
#define RTTW_GAMEADMINLIST_ANS ( CATEGORY_WOPS | 0x09 << 8 )
#define RTTW_GAMEADMINADD_NTF ( CATEGORY_WOPS | 0x0A << 8 )
#define RTTW_GAMEADMINREMOVE_NTF ( CATEGORY_WOPS | 0x0B << 8 )
#define RTTW_DROPUSER_REQ ( CATEGORY_WOPS | 0x0C << 8 )
#define RTTW_DROPUSER_ANS ( CATEGORY_WOPS | 0x0D << 8 )
#define RTTW_USERCOUNT_NTF ( CATEGORY_WOPS | 0x0E << 8 )
#define RTTW_RTTASTART_REQ ( CATEGORY_WOPS | 0x0F << 8 )
#define RTTW_RTTASTART_ANS ( CATEGORY_WOPS | 0x10 << 8 )
#define RTTW_RTTASTOP_REQ ( CATEGORY_WOPS | 0x11 << 8 )
#define RTTW_RTTASTOP_ANS ( CATEGORY_WOPS | 0x12 << 8 )
#define RTTW_RTTAPATCH_NTF ( CATEGORY_WOPS | 0x13 << 8 )
#define RTTW_SYSTEMREBOOT_NTF ( CATEGORY_WOPS | 0x14 << 8 )
#define RTTW_PROCESSCONTROL_NTF ( CATEGORY_WOPS | 0x15 << 8 )
#define RTTW_BATTLEZONEINFO_REQ ( CATEGORY_WOPS | 0x16 << 8 )
#define RTTW_BATTLEZONEINFO_ANS ( CATEGORY_WOPS | 0x17 << 8 )
#define RTTW_ARMORKIT_FINDHACK_NTF ( CATEGORY_WOPS | 0x18 << 8 )
#define RTTW_ABUSING_NTF ( CATEGORY_WOPS | 0x19 << 8 )
#define RTTW_ERRORNOTIFY_NTF ( CATEGORY_WOPS | 0x1F << 8 )
#define RTTW_CONNECTIONTYPE_NTF ( CATEGORY_WOPS | 0x20 << 8 )
#define RTTW_USERMONEY_REQ ( CATEGORY_WOPS | 0x21 << 8 )
#define RTTW_USERMONEY_ANS ( CATEGORY_WOPS | 0x22 << 8 )
#define RTTW_SERVERSHUTDOWN_REQ ( CATEGORY_WOPS | 0x23 << 8 )
#define RTTW_SERVERSHUTDOWN_ANS ( CATEGORY_WOPS | 0x24 << 8 )
#define RTTW_LAUNCHPATCHER_REQ ( CATEGORY_WOPS | 0x25 << 8 )
#define RTTW_PATCHRESULT_REQ ( CATEGORY_WOPS | 0x26 << 8 )
#define RTTW_PATCHRESULT_ANS ( CATEGORY_WOPS | 0x27 << 8 )
#define RTTW_LAUNCHPROCESS_REQ ( CATEGORY_WOPS | 0x28 << 8 )
#define RTTW_LAUNCHPROCESS_ANS ( CATEGORY_WOPS | 0x29 << 8 )
#define RTTW_FUNCRESTRICT_RELOAD_NTF ( CATEGORY_WOPS | 0x30 << 8 )
#define RTTW_FUNCRESTRICT_RELOAD_ANS ( CATEGORY_WOPS | 0x31 << 8 )
#define RTTW_AUTHIPLIST_RELOAD_REQ ( CATEGORY_WOPS | 0x32 << 8 )
#define RTTW_AUTHIPLIST_RELOAD_ANS ( CATEGORY_WOPS | 0x33 << 8 )
#define RTTW_GAMEVERSION_UPDATE_REQ ( CATEGORY_WOPS | 0x34 << 8 )
#define RTTW_GAMEVERSION_UPDATE_ANS ( CATEGORY_WOPS | 0x35 << 8 )
#define RTTW_GAMESTATISTICS_REQ ( CATEGORY_WOPS | 0x36 << 8 ) // 게임 통계 요청
#define RTTW_GAMESTATISTICS_ANS ( CATEGORY_WOPS | 0x37 << 8 ) // 게임 통계 응답
// 2006. 8. 14 김종호 패턴 추가
#define RTTW_PATTERN_RELOAD_REQ ( CATEGORY_WOPS | 0x38 << 8 ) // 보안 패턴 갱신 요청
#define RTTW_PATTERN_RELOAD_ANS ( CATEGORY_WOPS | 0x39 << 8 ) // 보안 패턴 갱신 응답
// to auth
// Armorkit dispatch command
#define RTTW_ARMORKIT_DISPATCH_NTF ( CATEGORY_WOPS | 0x40 << 8 )
#define RTTW_ARMORKIT_DISPATCH_ANS ( CATEGORY_WOPS | 0x41 << 8 )
#define RTTW_CHANGE_GUILDNAME_REQ ( CATEGORY_WOPS | 0x42 << 8 )
#define RTTW_CHANGE_GUILDNAME_ANS ( CATEGORY_WOPS | 0x43 << 8 )
#define RTTW_SEND_MESSAGE_REQ ( CATEGORY_WOPS | 0x44 << 8 )
#define RTTW_SEND_MESSAGE_ANS ( CATEGORY_WOPS | 0x45 << 8 )
#define RTTW_GMSCOMMAND_REQ ( CATEGORY_WOPS | 0xF0 << 8 )
#define RTTW_GMSCOMMAND_ANS ( CATEGORY_WOPS | 0xF1 << 8 )
//------------------------------------------------------------------------
// Message list - GENERAL
#define RTTG_CERTIFY_REQ ( CATEGORY_GENERAL | 0x01 << 8 )
#define RTTG_CERTIFY_ANS ( CATEGORY_GENERAL | 0x02 << 8 )
#define RTTG_GAMENOTICE_REQ ( CATEGORY_GENERAL | 0x03 << 8 )
#define RTTG_GAMENOTICE_ANS ( CATEGORY_GENERAL | 0x04 << 8 ) // Not using at General
#define RTTG_GAMEADMINLIST_REQ ( CATEGORY_GENERAL | 0x05 << 8 )
#define RTTG_GAMEADMINLIST_ANS ( CATEGORY_GENERAL | 0x06 << 8 )
#define RTTG_GAMEADMINADD_NTF ( CATEGORY_GENERAL | 0x07 << 8 )
#define RTTG_GAMEADMINREMOVE_NTF ( CATEGORY_GENERAL | 0x08 << 8 )
#define RTTG_DROPUSER_REQ ( CATEGORY_GENERAL | 0x09 << 8 )
#define RTTG_DROPUSER_ANS ( CATEGORY_GENERAL | 0x0A << 8 )
#define RTTG_USERCOUNT_NTF ( CATEGORY_GENERAL | 0x0B << 8 )
#define RTTG_BATTLEZONEINFO_REQ ( CATEGORY_GENERAL | 0x0C << 8 )
#define RTTG_BATTLEZONEINFO_ANS ( CATEGORY_GENERAL | 0x0D << 8 )
#define RTTG_ARMORKIT_FINDHACK_NTF ( CATEGORY_GENERAL | 0x0E << 8 )
#define RTTG_ABUSING_NTF ( CATEGORY_GENERAL | 0x0F << 8 )
#define RTTG_USERMONEY_REQ ( CATEGORY_GENERAL | 0x10 << 8 )
#define RTTG_USERMONEY_ANS ( CATEGORY_GENERAL | 0x11 << 8 )
#define RTTG_SERVERSHUTDOWN_REQ ( CATEGORY_GENERAL | 0x12 << 8 )
#define RTTG_SERVERSHUTDOWN_ANS ( CATEGORY_GENERAL | 0x13 << 8 )
#define RTTG_PATCHRESULT_REQ ( CATEGORY_GENERAL | 0x14 << 8 )
#define RTTG_PATCHRESULT_ANS ( CATEGORY_GENERAL | 0x15 << 8 )
#define RTTG_FUNCRESTRICT_RELOAD_NTF ( CATEGORY_GENERAL | 0x18 << 8 )
#define RTTG_FUNCRESTRICT_RELOAD_ANS ( CATEGORY_GENERAL | 0x19 << 8 )
#define RTTG_GAMESTATISTICS_REQ ( CATEGORY_GENERAL | 0x1B << 8 ) // 게임 통계 요청
#define RTTG_GAMESTATISTICS_ANS ( CATEGORY_GENERAL | 0x1C << 8 ) // 게임 통계 응답
#define RTTG_AUTHIPLIST_RELOAD_REQ ( CATEGORY_GENERAL | 0x20 << 8 )
#define RTTG_AUTHIPLIST_RELOAD_ANS ( CATEGORY_GENERAL | 0x21 << 8 )
#define RTTG_GAMEVERSION_UPDATE_REQ ( CATEGORY_GENERAL | 0x22 << 8 )
#define RTTG_GAMEVERSION_UPDATE_ANS ( CATEGORY_GENERAL | 0x23 << 8 )
// 2006. 8. 14 김종호 패턴 추가
#define RTTG_PATTERN_RELOAD_REQ ( CATEGORY_GENERAL | 0x24 << 8 ) // 보안 패턴 갱신 요청
#define RTTG_PATTERN_RELOAD_ANS ( CATEGORY_GENERAL | 0x25 << 8 ) // 보안 패턴 갱신 응답
#define RTTG_ARMORKIT_DISPATCH_NTF ( CATEGORY_GENERAL | 0x26 << 8 )
#define RTTG_ARMORKIT_DISPATCH_ANS ( CATEGORY_GENERAL | 0x27 << 8 )
#define RTTG_CHANGE_GUILDNAME_REQ ( CATEGORY_GENERAL | 0x28 << 8 )
#define RTTG_CHANGE_GUILDNAME_ANS ( CATEGORY_GENERAL | 0x29 << 8 )
#define RTTG_SEND_MESSAGE_REQ ( CATEGORY_GENERAL | 0x2A << 8 )
#define RTTG_SEND_MESSAGE_ANS ( CATEGORY_GENERAL | 0x2B << 8 )
#define RTTG_GMSCOMMAND_REQ ( CATEGORY_GENERAL | 0xF0 << 8 )
#define RTTG_GMSCOMMAND_ANS ( CATEGORY_GENERAL | 0xF1 << 8 )
//------------------------------------------------------------------------
// Message list - RTT( Server, Agent, Service )
#define RTTR_RESOURCE_NTF ( CATEGORY_RTT | 0x01 << 8 )
#define RTTR_RTTASTART_NTF ( CATEGORY_RTT | 0x02 << 8 )
#define RTTR_RTTASTOP_NTF ( CATEGORY_RTT | 0x03 << 8 )
#define RTTR_RTTAPATCH_NTF ( CATEGORY_RTT | 0x04 << 8 )
#define RTTR_PROCESSLIST_REQ ( CATEGORY_RTT | 0x06 << 8 )
#define RTTR_PROCESSLIST_ANS ( CATEGORY_RTT | 0x07 << 8 )
#define RTTR_PROCESSMONITOR_NTF ( CATEGORY_RTT | 0x08 << 8 )
#define RTTR_PATCHLAUNCHERINFO_NTF ( CATEGORY_RTT | 0x09 << 8 )
#define RTTR_WEB_URL_REQ ( CATEGORY_RTT | 0x0A << 8 ) // 감시 URL 요청
#define RTTR_WEB_URL_ANS ( CATEGORY_RTT | 0x0B << 8 ) // 감시 URL 전송
#define RTTR_WEB_REQUEST_NTF ( CATEGORY_RTT | 0x0C << 8 ) // 감시 URL Request 결과
#define RTTR_HEARTBEAT_NTF ( CATEGORY_RTT | 0xff << 8 )
//------------------------------------------------------------------------
// Message list - HTTP WEB
#define RTTH_DROPUSER_REQ ( CATEGORY_HTTP | 0x01 << 8 ) // 중국 웹 상에서 유저 강제 종료 요청
#define RTTH_DROPUSER_ANS ( CATEGORY_HTTP | 0x02 << 8 ) // 중국 웹 상에서 유저 강제 종료 요청 결과
//////////////////////////////////////////////////////////////////////////
// Definition
typedef struct tagSERVER_KEY
{
DWORD dwKey;
tagSERVER_KEY( const DWORD key = 0 ) { dwKey = key; }
operator DWORD() { return dwKey; }
DWORD Set( BYTE worldID, BYTE channelID, BYTE serverType, BYTE serverID )
{
memcpy( &dwKey, &worldID, sizeof(BYTE) );
dwKey <<= 8; memcpy( &dwKey, &channelID, sizeof(BYTE) );
dwKey <<= 8; memcpy( &dwKey, &serverType, sizeof(BYTE) );
dwKey <<= 8; memcpy( &dwKey, &serverID, sizeof(BYTE) );
return dwKey;
}
BYTE GetWorldID() { BYTE id; DWORD temp = dwKey; temp >>= 24; memcpy( &id, &temp, sizeof(BYTE) ); return id; }
BYTE GetChannelID() { BYTE id; DWORD temp = dwKey; temp >>= 16; memcpy( &id, &temp, sizeof(BYTE) ); return id; }
BYTE GetServerType() { BYTE id; DWORD temp = dwKey; temp >>= 8; memcpy( &id, &temp, sizeof(BYTE) ); return id; }
BYTE GetServerID() { BYTE id; memcpy( &id, &dwKey, sizeof(BYTE) ); return id; }
} SERVER_KEY, *LPSERVER_KEY;
enum eZONETYPE
{
eZONETYPE_LOBBY = 0, // 로비(배틀존)
eZONETYPE_VILLAGE, // 마을
eZONETYPE_CHARSELECT, // 캐릭터 선택
eZONETYPE_MISSION, // 미션
eZONETYPE_HUNTING, // 헌팅
eZONETYPE_QUEST, // 퀘스트
eZONETYPE_PVP, // pvp
eZONETYPE_EVENT, // 이벤트
eZONETYPE_GUILD, // 길드
eZONETYPE_SIEGE, // 공성전
eZONETYPE_FIELD, // 필드(마을 동접과 같이 표시)
eZONETYPE_CHUNTING, // 경쟁 헌팅
eZONETYPE_MAX,
};
enum eSTATISTICS_TYPE
{
// 현재 유통되는 통화량(상거래)
eSTATISTIC_MONEY_CIRCULATION,
// 생긴돈 : 돈줍기,보상받기,
eSTATISTIC_MONEY_PLUS,
// 사라진돈 : 돈버림, 하임소비
eSTATISTIC_MONEY_MINUS,
eSTATISTIC_MONEY_WAREHOUSE_PLUS,
eSTATISTIC_MONEY_WAREHOUSE_MINUS,
eSTATISTIC_JACKPOT_COUNT,
eSTATISTIC_JACKPOT_MONEY,
eSTATISTIC_FEELMISTONE_CREATE,
eSTATISTIC_FEELMISTONE_DESTROY,
eSTATISTIC_OVERMISTONE_CREATE,
eSTATISTIC_OVERMISTONE_DESTROY,
eSTATISTIC_STRENGTHMISTONE_CREATE,
eSTATISTIC_STRENGTHMISTONE_DESTROY,
eSTATISTIC_MEGAMISTONE_CREATE,
eSTATISTIC_MEGAMISTONE_DESTROY,
eSTATISTIC_ENCHANT_COUNT,
eSTATISTIC_RANKUP_COUNT,
//eSTATISTIC_COMPOSE_COUNT,
// 결정화
eSTATISTIC_CRYSTALIZE_COUNT,
// 조합관련
eSTATISTIC_COMPOSE_RING_LOW,
eSTATISTIC_COMPOSE_RING_HIGH,
eSTATISTIC_COMPOSE_NECKLACE_LOW,
eSTATISTIC_COMPOSE_NECKLACE_HIGH,
eSTATISTIC_COMPOSE_SOUL_SHEILD_LOW,
eSTATISTIC_COMPOSE_SOUL_SHEILD_HIGH,
eSTATISTIC_COMPOSE_SOUL_ARMLET_LOW,
eSTATISTIC_COMPOSE_SOUL_ARMLET_HIGH,
eSTATISTIC_COMPOSE_SOUL_WING_LOW,
eSTATISTIC_COMPOSE_SOUL_WING_HIGH,
eSTATISTIC_COMPOSE_SOUL_EYE_LOW,
eSTATISTIC_COMPOSE_SOUL_EYE_HIGH,
eSTATISTIC_COMPOSE_EXTRASTONE,
eSTATISTIC_COMPOSE_FEELMISTONE,
eSTATISTIC_COMPOSE_OVERMISTONE,
eSTATISTIC_COMPOSE_STRENGTHMISTONE,
eSTATISTIC_COMPOSE_MEGAMISTONE,
eSTATISTIC_COMPOSE_GIGAMISTONE,
eSTATISTIC_COMPOSE_PROTECTION_CRYSTAL,
eSTATISTIC_COMPOSE_SHINING_CRYSTAL,
eSTATISTIC_COMPOSE_UNIQUE_CRYSTAL,
eSTATISTIC_COMPOSE_GARNET_CRYSTAL,
eSTATISTIC_COMPOSE_NOBLESS_CRYSTAL,
eSTATISTIC_MAX,
};
typedef struct tag_Statistic
{
tag_Statistic()
{
uiEnumStatistic[eSTATISTIC_MONEY_CIRCULATION ] = 0;
uiEnumStatistic[eSTATISTIC_MONEY_PLUS ] = 0;
uiEnumStatistic[eSTATISTIC_MONEY_MINUS ] = 0;
uiEnumStatistic[eSTATISTIC_MONEY_WAREHOUSE_PLUS ] = 0;
uiEnumStatistic[eSTATISTIC_MONEY_WAREHOUSE_MINUS ] = 0;
uiEnumStatistic[eSTATISTIC_JACKPOT_COUNT ] = 0;
uiEnumStatistic[eSTATISTIC_JACKPOT_MONEY ] = 0;
uiEnumStatistic[eSTATISTIC_FEELMISTONE_CREATE ] = 1;
uiEnumStatistic[eSTATISTIC_FEELMISTONE_DESTROY ] = 2;
uiEnumStatistic[eSTATISTIC_OVERMISTONE_CREATE ] = 4;
uiEnumStatistic[eSTATISTIC_OVERMISTONE_DESTROY ] = 5;
uiEnumStatistic[eSTATISTIC_STRENGTHMISTONE_CREATE ] = 7;
uiEnumStatistic[eSTATISTIC_STRENGTHMISTONE_DESTROY ] = 8;
uiEnumStatistic[eSTATISTIC_MEGAMISTONE_CREATE ] = 10;
uiEnumStatistic[eSTATISTIC_MEGAMISTONE_DESTROY ] = 11;
uiEnumStatistic[eSTATISTIC_ENCHANT_COUNT ] = 32;
uiEnumStatistic[eSTATISTIC_RANKUP_COUNT ] = 33;
uiEnumStatistic[eSTATISTIC_CRYSTALIZE_COUNT ] = 34;
uiEnumStatistic[eSTATISTIC_COMPOSE_RING_LOW ] = 15;
uiEnumStatistic[eSTATISTIC_COMPOSE_RING_HIGH ] = 16;
uiEnumStatistic[eSTATISTIC_COMPOSE_NECKLACE_LOW ] = 17;
uiEnumStatistic[eSTATISTIC_COMPOSE_NECKLACE_HIGH ] = 18;
uiEnumStatistic[eSTATISTIC_COMPOSE_SOUL_SHEILD_LOW ] = 19;
uiEnumStatistic[eSTATISTIC_COMPOSE_SOUL_SHEILD_HIGH ] = 20;
uiEnumStatistic[eSTATISTIC_COMPOSE_SOUL_ARMLET_LOW ] = 21;
uiEnumStatistic[eSTATISTIC_COMPOSE_SOUL_ARMLET_HIGH ] = 22;
uiEnumStatistic[eSTATISTIC_COMPOSE_SOUL_WING_LOW ] = 23;
uiEnumStatistic[eSTATISTIC_COMPOSE_SOUL_WING_HIGH ] = 24;
uiEnumStatistic[eSTATISTIC_COMPOSE_SOUL_EYE_LOW ] = 25;
uiEnumStatistic[eSTATISTIC_COMPOSE_SOUL_EYE_HIGH ] = 26;
uiEnumStatistic[eSTATISTIC_COMPOSE_EXTRASTONE ] = 13;
uiEnumStatistic[eSTATISTIC_COMPOSE_FEELMISTONE ] = 3;
uiEnumStatistic[eSTATISTIC_COMPOSE_OVERMISTONE ] = 6;
uiEnumStatistic[eSTATISTIC_COMPOSE_STRENGTHMISTONE ] = 9;
uiEnumStatistic[eSTATISTIC_COMPOSE_MEGAMISTONE ] = 12;
uiEnumStatistic[eSTATISTIC_COMPOSE_GIGAMISTONE ] = 14;
uiEnumStatistic[eSTATISTIC_COMPOSE_PROTECTION_CRYSTAL] = 27;
uiEnumStatistic[eSTATISTIC_COMPOSE_SHINING_CRYSTAL ] = 28;
uiEnumStatistic[eSTATISTIC_COMPOSE_UNIQUE_CRYSTAL ] = 29;
uiEnumStatistic[eSTATISTIC_COMPOSE_GARNET_CRYSTAL ] = 30;
uiEnumStatistic[eSTATISTIC_COMPOSE_NOBLESS_CRYSTAL ] = 31;
uiEnumStatistic[eSTATISTIC_MAX ] = 0;
}
UINT uiEnumStatistic[eSTATISTIC_MAX + 1];
}Statistic;
typedef struct tag_BATTLEZONE_INFO
{
BYTE byWorldID;
BYTE byChannelID;
DWORD dwZoneCount[eZONETYPE_MAX]; // 존 개설 수
} BATTLEZONE_INFO;
namespace Protocol_RTT{
class HDRMessageID4
{
public:
BYTE byCategory;
BYTE byMessageID;
};
class HDRMessageID8
{
public:
WORD wCategory;
WORD wMessageID;
};
class MSG_HEADER4
{
public:
WORD wSize; // HEADER 크기를 제외한 Payload 사이즈
union
{
WORD wID; // Message ID
HDRMessageID4 hdrID;
};
};
class MSG_HEADER8
{
public:
DWORD dwSize; // HEADER 크기를 제외한 Payload 사이즈
union
{
DWORD dwID; // Message ID
HDRMessageID8 hdrID;
};
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : ? → RTT
// Description : RTT와 통신하는 프로그램은 RTT와 접속이 이루어진 후에 인증을 받아야한다.
class MSG_RTTW_CERTIFY_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_CERTIFY_REQ()
{
dwSize = sizeof( MSG_RTTW_CERTIFY_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_CERTIFY_REQ;
}
~MSG_RTTW_CERTIFY_REQ()
{
}
DWORD dwType; // AGENTTYPE_ define을 명시한다.
DWORD dwVersion;
};
class MSG_RTTG_CERTIFY_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_CERTIFY_REQ()
{
wSize = sizeof( MSG_RTTG_CERTIFY_REQ ) - SIZEOFHDR;
wID = RTTG_CERTIFY_REQ;
}
~MSG_RTTG_CERTIFY_REQ()
{
}
DWORD dwType; // AGENTTYPE_ define을 명시한다.
DWORD dwVersion;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : ? → RTT
// Description : RTT와 통신하는 프로그램은 RTT와 접속이 이루어진 후에 인증을 받아야한다.
class MSG_RTTW_CERTIFY_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_CERTIFY_ANS()
{
dwSize = sizeof( MSG_RTTW_CERTIFY_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_CERTIFY_ANS;
}
~MSG_RTTW_CERTIFY_ANS()
{
}
DWORD dwResult; // 0 : 인증 성공, 1 : 버젼 틀림, 2 : 등록되지 않은 Agent
DWORD dwType; // SERVERTYPE_ define을 명시한다.
DWORD dwUID; // 인증된 고유번호
};
class MSG_RTTG_CERTIFY_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_CERTIFY_ANS()
{
wSize = sizeof( MSG_RTTG_CERTIFY_ANS ) - SIZEOFHDR;
wID = RTTG_CERTIFY_ANS;
}
~MSG_RTTG_CERTIFY_ANS()
{
}
DWORD dwResult; // 0 : 인증 성공
DWORD dwType; // SERVERTYPE_ define을 명시한다.
DWORD dwUID; // 인증된 고유번호
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_A → RTT_S
// Description : RTTA에 연결된 General Server가 연결이 끊겼을 때, 해당 서버의 type을 전송한다.
class MSG_RTTW_DISCERTIFY_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_DISCERTIFY_NTF()
{
dwSize = sizeof( MSG_RTTW_DISCERTIFY_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_DISCERTIFY_NTF;
}
~MSG_RTTW_DISCERTIFY_NTF()
{
}
DWORD dwType; // SERVERTYPE_ define을 명시한다.
DWORD dwUID; // 인증된 uid값을 넣는다.
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT
// Description : 게임 서버의 채널 목록을 요청한다.
class MSG_RTTW_SERVERLIST_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_SERVERLIST_REQ()
{
dwSize = sizeof( MSG_RTTW_SERVERLIST_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_SERVERLIST_REQ;
}
~MSG_RTTW_SERVERLIST_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT → GMS
// Description : 채널 목록을 전송한다.
class MSG_RTTW_SERVERLIST_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_SERVERLIST_ANS()
{
dwSize = sizeof( MSG_RTTW_SERVERLIST_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_SERVERLIST_ANS;
memset(&szList[0], 0, sizeof(wchar_t) * 5120); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_SERVERLIST_ANS()
{
}
DWORD dwLength; // szList의 실제 문자열 길이
wchar_t szList[5120]; // 채널명1,GUID1;채널명2,GUID2;...
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT → General
// Description : 게임내 공지를 발송한다.
#define NOTICE_LENGTH 1025
class MSG_RTTW_GAMENOTICE_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_GAMENOTICE_REQ()
{
dwSize = sizeof( MSG_RTTW_GAMENOTICE_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMENOTICE_REQ;
memset(&szNotice[0], 0, sizeof(wchar_t) * (NOTICE_LENGTH-1) ); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_GAMENOTICE_REQ()
{
}
DWORD dwServerUID; // 공지를 전송할 서버의 uid.(0=전체)
DWORD dwTickPerLine; // 1라인 출력 시간간격(ms)
DWORD dwNoticeLength; // 공지 문자열의 길이
wchar_t szNotice[NOTICE_LENGTH-1]; // 공지 문자열
BYTE btRed; // 공지문자색상
BYTE btGreen; //
BYTE btBlue; //
};
class MSG_RTTG_GAMENOTICE_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_GAMENOTICE_REQ()
{
wSize = sizeof( MSG_RTTG_GAMENOTICE_REQ ) - SIZEOFHDR;
wID = RTTG_GAMENOTICE_REQ;
memset(&szNotice[0], 0, NOTICE_LENGTH); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTG_GAMENOTICE_REQ()
{
}
DWORD dwServerUID; // 공지를 전송할 서버의 uid.(0=전체)
DWORD dwTickPerLine; // 1라인 출력 시간간격(ms)
DWORD dwNoticeLength; // 공지 문자열의 길이
char szNotice[NOTICE_LENGTH]; // 공지 문자열
BYTE btRed; // 공지문자색상
BYTE btGreen; //
BYTE btBlue; //
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT → GMS
// Description : 공지가 게임서버로 전송이 완료되었는지를 통지한다.
class MSG_RTTW_GAMENOTICE_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_GAMENOTICE_ANS()
{
dwSize = sizeof( MSG_RTTW_GAMENOTICE_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMENOTICE_ANS;
}
~MSG_RTTW_GAMENOTICE_ANS()
{
}
DWORD dwError;
// Error values
// 0 : 성공
// 1 : RTT Agent와의 통신 두절
// 2 : General와의 통신 두절
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS, General → RTT
// Description : 게임내 관리자 계정 목록을 요청한다.
class MSG_RTTW_GAMEADMINLIST_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_GAMEADMINLIST_REQ()
{
dwSize = sizeof( MSG_RTTW_GAMEADMINLIST_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMEADMINLIST_REQ;
}
~MSG_RTTW_GAMEADMINLIST_REQ()
{
}
};
class MSG_RTTG_GAMEADMINLIST_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_GAMEADMINLIST_REQ()
{
wSize = sizeof( MSG_RTTG_GAMEADMINLIST_REQ ) - SIZEOFHDR;
wID = RTTG_GAMEADMINLIST_REQ;
}
~MSG_RTTG_GAMEADMINLIST_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT → GMS, General
// Description : 관리자 계정 목록을 전송한다.
class MSG_RTTW_GAMEADMINLIST_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_GAMEADMINLIST_ANS()
{
dwSize = sizeof( MSG_RTTW_GAMEADMINLIST_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMEADMINLIST_ANS;
memset(&szList[0], 0, sizeof(wchar_t) * 1024); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_GAMEADMINLIST_ANS()
{
}
DWORD dwLength; // szList에 저장된 문자열의 길이
wchar_t szList[1024]; // 계정 정보
};
class MSG_RTTG_GAMEADMINLIST_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_GAMEADMINLIST_ANS()
{
wSize = sizeof( MSG_RTTG_GAMEADMINLIST_ANS ) - SIZEOFHDR;
wID = RTTG_GAMEADMINLIST_ANS;
}
~MSG_RTTG_GAMEADMINLIST_ANS()
{
}
DWORD dwCount; // 계정 정보의 개수
// 이하 다음 데이터들이 dwCount만큼 반복
// char szAccount[ID_MAX_LEN];
// char szIP[IP_MAX_LEN];
// DWORD dwAttr;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT → General
// Description : 관리자 계정을 추가한다.
class MSG_RTTW_GAMEADMINADD_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_GAMEADMINADD_NTF()
{
dwSize = sizeof( MSG_RTTW_GAMEADMINADD_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMEADMINADD_NTF;
memset(&szAccount[0], 0, sizeof(wchar_t) * ID_MAX_LEN + 1); // 07-01-03 김종호(버퍼 초기화)
memset(&szIP[0], 0, sizeof(wchar_t) * IP_MAX_LEN); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_GAMEADMINADD_NTF()
{
}
wchar_t szAccount[ID_MAX_LEN + 1]; // 추가할 계정
wchar_t szIP[IP_MAX_LEN]; // 허용 IP
DWORD dwAttr; // 속성
};
class MSG_RTTG_GAMEADMINADD_NTF : public MSG_HEADER4
{
public:
MSG_RTTG_GAMEADMINADD_NTF()
{
wSize = sizeof( MSG_RTTG_GAMEADMINADD_NTF ) - SIZEOFHDR;
wID = RTTG_GAMEADMINADD_NTF;
memset(&szAccount[0], 0, ID_MAX_LEN + 1); // 07-01-03 김종호(버퍼 초기화)
memset(&szIP[0], 0, IP_MAX_LEN); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTG_GAMEADMINADD_NTF()
{
}
char szAccount[ID_MAX_LEN + 1]; // 추가할 계정
char szIP[IP_MAX_LEN]; // 허용 IP
DWORD dwAttr; // 속성
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT → GMS → General
// Description : 관리자 계정을 삭제한다.
class MSG_RTTW_GAMEADMINREMOVE_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_GAMEADMINREMOVE_NTF()
{
dwSize = sizeof( MSG_RTTW_GAMEADMINREMOVE_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMEADMINREMOVE_NTF;
memset(&szAccount[0], 0, sizeof(wchar_t) * ID_MAX_LEN + 1); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_GAMEADMINREMOVE_NTF()
{
}
wchar_t szAccount[ID_MAX_LEN + 1]; // 삭제할 계정
};
class MSG_RTTG_GAMEADMINREMOVE_NTF : public MSG_HEADER4
{
public:
MSG_RTTG_GAMEADMINREMOVE_NTF()
{
wSize = sizeof( MSG_RTTG_GAMEADMINREMOVE_NTF ) - SIZEOFHDR;
wID = RTTG_GAMEADMINREMOVE_NTF;
memset(&szAccount[0], 0, ID_MAX_LEN + 1); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTG_GAMEADMINREMOVE_NTF()
{
}
char szAccount[ID_MAX_LEN + 1]; // 삭제할 계정
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT → General
// Description : 임의의 메시지를 지정된 목적지로 전송한다.
class MSG_RTTW_GMSCOMMAND_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_GMSCOMMAND_REQ()
{
dwSize = sizeof( MSG_RTTW_GMSCOMMAND_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GMSCOMMAND_REQ;
memset(&szMessage[0], 0, sizeof(wchar_t) * 1024); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_GMSCOMMAND_REQ()
{
}
DWORD dwUID; // 목적 Application의 고유 번호
DWORD dwSize; // szMessage의 문자열 길이
wchar_t szMessage[1024]; // 메지시 버퍼
};
class MSG_RTTG_GMSCOMMAND_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_GMSCOMMAND_REQ()
{
wSize = sizeof( MSG_RTTG_GMSCOMMAND_REQ ) - SIZEOFHDR;
wID = RTTG_GMSCOMMAND_REQ;
}
~MSG_RTTG_GMSCOMMAND_REQ()
{
}
DWORD dwUID; // 목적 Application의 고유 번호
DWORD dwSize; // szMessage의 문자열 길이
BYTE szMessage[1024]; // 메지시 버퍼
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : General → RTT → GMS
// Description : GMS 명령의 처리 결과를 GMS로 통지한다.
class MSG_RTTW_GMSCOMMAND_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_GMSCOMMAND_ANS()
{
dwSize = sizeof( MSG_RTTW_GMSCOMMAND_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GMSCOMMAND_ANS;
memset(&szMessage[0], 0, sizeof(wchar_t) * 1024); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_GMSCOMMAND_ANS()
{
}
DWORD dwSize; // szMessage의 문자열 길이
wchar_t szMessage[1024]; // 메지시 버퍼
};
class MSG_RTTG_GMSCOMMAND_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_GMSCOMMAND_ANS()
{
wSize = sizeof( MSG_RTTG_GMSCOMMAND_ANS ) - SIZEOFHDR;
wID = RTTG_GMSCOMMAND_ANS;
}
~MSG_RTTG_GMSCOMMAND_ANS()
{
}
DWORD dwSize; // szMessage의 문자열 길이
BYTE szMessage[1024]; // 메지시 버퍼
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : General → RTT
// Description : 각 채널의 동접 수를 통지한다.
class MSG_RTTW_USERCOUNT_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_USERCOUNT_NTF()
{
dwSize = sizeof( MSG_RTTW_USERCOUNT_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_USERCOUNT_NTF;
}
~MSG_RTTW_USERCOUNT_NTF()
{
}
DWORD dwWorldID;
DWORD dwChannelID;
DWORD dwFieldUserCount;
DWORD dwFieldPCRoomCount;
DWORD dwBattleUserCount;
DWORD dwBattleZonePCRoomCount;
#ifdef _090901_CHANNELLING_CONNECT_USER_
DWORD dwHangameFieldUserCount;
DWORD dwHangameFieldPCRoomCount;
DWORD dwHangameBattleUserCount;
DWORD dwHangameBattleZonePCRoomCount;
DWORD dwPMangFieldUserCount;
DWORD dwPMangFieldPCRoomCount;
DWORD dwPMangBattleUserCount;
DWORD dwPMangBattleZonePCRoomCount;
#endif
};
class MSG_RTTG_USERCOUNT_NTF : public MSG_HEADER4
{
public:
MSG_RTTG_USERCOUNT_NTF()
{
wSize = sizeof( MSG_RTTG_USERCOUNT_NTF ) - SIZEOFHDR;
wID = RTTG_USERCOUNT_NTF;
}
~MSG_RTTG_USERCOUNT_NTF()
{
}
DWORD dwWorldID;
DWORD dwChannelID;
DWORD dwFieldUserCount;
DWORD dwFieldPCRoomCount;
DWORD dwBattleUserCount;
DWORD dwBattleZonePCRoomCount;
#ifdef _090901_CHANNELLING_CONNECT_USER_
DWORD dwHangameFieldUserCount;
DWORD dwHangameFieldPCRoomCount;
DWORD dwHangameBattleUserCount;
DWORD dwHangameBattleZonePCRoomCount;
DWORD dwPMangFieldUserCount;
DWORD dwPMangFieldPCRoomCount;
DWORD dwPMangBattleUserCount;
DWORD dwPMangBattleZonePCRoomCount;
#endif
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → General
// Description : 개설된 배틀존의 정보를 요청한다.
class MSG_RTTG_BATTLEZONEINFO_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_BATTLEZONEINFO_REQ()
{
wSize = sizeof( MSG_RTTG_BATTLEZONEINFO_REQ ) - SIZEOFHDR;
wID = RTTG_BATTLEZONEINFO_REQ;
}
~MSG_RTTG_BATTLEZONEINFO_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : General → RTTA
// Description : 개설된 배틀존의 정보를 보낸다.
class MSG_RTTG_BATTLEZONEINFO_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_BATTLEZONEINFO_ANS()
{
wSize = sizeof( MSG_RTTG_BATTLEZONEINFO_ANS ) - SIZEOFHDR;
wID = RTTG_BATTLEZONEINFO_ANS;
}
~MSG_RTTG_BATTLEZONEINFO_ANS()
{
}
BYTE byCount;
// 이하 BATTLEZONE_INFO로 byCount만큼 정보 받음
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : General → RTT
// Description : 클라이언트의 ArmorKit에서 발견한 해킹감지
class MSG_RTTG_ARMORKIT_FINDHACK_NTF : public MSG_HEADER4
{
public:
MSG_RTTG_ARMORKIT_FINDHACK_NTF()
{
wSize = sizeof( MSG_RTTG_ARMORKIT_FINDHACK_NTF ) - SIZEOFHDR;
wID = RTTG_ARMORKIT_FINDHACK_NTF;
memset(&szIP[0], 0, 16); // 07-01-03 김종호(버퍼 초기화)
memset(&szBuf[0], 0, 1024); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTG_ARMORKIT_FINDHACK_NTF()
{
}
DWORD dwGuid; // 해킹이 감지된 클라이언트 guid
char szIP[16]; // 해킹이 감지된 클라이언트 IP주소
DWORD dwHackType; // 탐지한 해킹 타입 (e.g. AKDETECT_SPEEDHACK)
DWORD dwBufSize; // Buffer 의 길이
char szBuf[1024]; // 데이터 버퍼-1024는 보안파트에서 전달받은 암묵적 최대값(성현창)
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : General → RTT
// Description : 게임 서버에서 체크한 어뷰징 정보
class MSG_RTTG_ABUSING_NTF : public MSG_HEADER4
{
public:
enum { MAX_DESC_LENGTH = 1023, MAX_CHARNAME_LENGTH = 16, MAX_IP_LENGTH = 15, MAX_ID_LEN = 12,
MAX_SUBTYPE_NAME_LEN = 64, };
MSG_RTTG_ABUSING_NTF()
{
wSize = sizeof( MSG_RTTG_ABUSING_NTF ) - SIZEOFHDR;
wID = RTTG_ABUSING_NTF;
#ifndef _110503_CUSTOM_USERID_LENGTH
memset(&m_ptszUserID[0], 0, sizeof(char) * (MAX_ID_LEN + 1) ); // 07-06-11 김종호(버퍼 초기화)
#else
memset(&m_ptszUserID[0], 0, sizeof(char) * (ID_MAX_LEN + 1) );
#endif
memset(&m_ptszCharName[0], 0, sizeof(TCHAR) * (MAX_CHARNAME_LENGTH + 1) ); // 07-01-31 김종호(버퍼 초기화)
memset(&m_ptszIP[0], 0, sizeof(TCHAR) * (MAX_IP_LENGTH + 1) ); // 07-01-03 김종호(버퍼 초기화)
memset(&m_ptszDesc[0], 0, sizeof(TCHAR) * (MAX_DESC_LENGTH + 1) ); // 07-01-03 김종호(버퍼 초기화)
ZeroMemory(m_ptszSubTypeName, sizeof(m_ptszSubTypeName)); // 08-04-03 박동권. 똑같이하면왠지 베낀거같아서 약간 다르게 쓴...;(사실, 변수명이 길어서 라인이 너무 길어지기때문에 짧게하려고 바꿨는데... 괜시리 주석을 길게쓰다보니까 주석이 아주 그냥 하늘끝까지 닿겠네... 어느덧 200글자 돌파?! ㅋ
}
~MSG_RTTG_ABUSING_NTF()
{
}
DWORD64 m_dwTime; // time - GetDateTime_YYMMDDHHMM()의 값을 사용한다
SERVER_KEY m_ServerKey; // server
DWORD m_dwUserGuid; // user guid
DWORD m_dwCharGuid; // char guid
#ifndef _110503_CUSTOM_USERID_LENGTH
char m_ptszUserID[MAX_ID_LEN + 1]; // user id
#else
char m_ptszUserID[ID_MAX_LEN + 1]; // user id
#endif
TCHAR m_ptszCharName[MAX_CHARNAME_LENGTH + 1]; // char name
TCHAR m_ptszIP[MAX_IP_LENGTH + 1]; // user ip
BYTE m_AbuseType; // type
BYTE m_Level; // level
TCHAR m_ptszSubTypeName[MAX_SUBTYPE_NAME_LEN + 1]; // typename(64)
WORD m_wLength; // desc length
TCHAR m_ptszDesc[MAX_DESC_LENGTH + 1]; // desc
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT → General
// Description : 통화량 정보를 요청한다.
class MSG_RTTG_USERMONEY_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_USERMONEY_REQ()
{
wSize = sizeof( MSG_RTTG_USERMONEY_REQ ) - SIZEOFHDR;
wID = RTTG_USERMONEY_REQ;
}
~MSG_RTTG_USERMONEY_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : General → RTT
// Description : 통화량을 전송한다.
class MSG_RTTG_USERMONEY_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_USERMONEY_ANS()
{
wSize = sizeof( MSG_RTTG_USERMONEY_ANS ) - SIZEOFHDR;
wID = RTTG_USERMONEY_ANS;
}
~MSG_RTTG_USERMONEY_ANS()
{
}
BYTE byWorldID;
BYTE byChannelID;
BYTE byServerType;
BYTE byServerID;
// 개인 보유액 관련
UINT64 ui64TotalGetMoney; // 일정 시간 동안 생겨난 돈 총계
UINT64 ui64TotalLoseMoney; // 일정 시간 동안 없어진 돈 총계
UINT64 ui64TotalUserMoney; // 현재 동접 유저들이 갖고 있는 평균 금액
// 창고 보유액 관련
UINT64 ui64AveMoney; // 창고 평균 금액
UINT64 ui64TotalPlusMoney; // 창고에 들어간 돈
UINT64 ui64TotalMinusMoney; // 창고에서 나간 돈
USHORT usJackpotCnt; // 잭팟 터진 횟수
UINT64 ui64JackpotMoney; // 잭팟 금액 합계
UINT64 ui64CirculateMoney; // 상거래 금액 합계
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → General
// Description : 서버의 정상종료를 요청한다.
/*
[2006.04.20] modify by guiun
dwServerType, dwServerID 추가
*/
class MSG_RTTG_SERVERSHUTDOWN_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_SERVERSHUTDOWN_REQ()
{
wSize = sizeof( MSG_RTTG_SERVERSHUTDOWN_REQ ) - SIZEOFHDR;
wID = RTTG_SERVERSHUTDOWN_REQ;
}
~MSG_RTTG_SERVERSHUTDOWN_REQ()
{
}
DWORD dwKey; // RTT 내에서 사용하는 전용필드
BYTE dwWorldID; // 0x00 = 전체 World(dwChannelID 무시)
BYTE dwChannelID; // 0x00 = 전체 Channel
BYTE dwServerType; //
BYTE dwServerID; //
UINT64 i64WopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → General
// Description : 마스터 서버에게 서버 정보 Reload 명령
/*
*/
class MSG_RTTG_FUNCRESTRICT_RELOAD_NTF : public MSG_HEADER4
{
public:
MSG_RTTG_FUNCRESTRICT_RELOAD_NTF()
{
wSize = sizeof( MSG_RTTG_FUNCRESTRICT_RELOAD_NTF ) - SIZEOFHDR;
wID = RTTG_FUNCRESTRICT_RELOAD_NTF;
}
~MSG_RTTG_FUNCRESTRICT_RELOAD_NTF()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → General
// Description : 마스터 서버에게 서버 정보 Reload 명령
/*
*/
class MSG_RTTG_AUTHIPLIST_RELOAD_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_AUTHIPLIST_RELOAD_REQ()
{
wSize = sizeof( MSG_RTTG_AUTHIPLIST_RELOAD_REQ ) - SIZEOFHDR;
wID = RTTG_AUTHIPLIST_RELOAD_REQ;
}
~MSG_RTTG_AUTHIPLIST_RELOAD_REQ()
{
}
DWORD dwWopsKey;
};
class MSG_RTTG_AUTHIPLIST_RELOAD_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_AUTHIPLIST_RELOAD_ANS()
{
wSize = sizeof( MSG_RTTG_AUTHIPLIST_RELOAD_ANS ) - SIZEOFHDR;
wID = RTTG_AUTHIPLIST_RELOAD_ANS;
}
~MSG_RTTG_AUTHIPLIST_RELOAD_ANS()
{
}
DWORD dwWopsKey;
DWORD dwResult;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → General
// Description : 마스터 서버에게 서버 정보 Reload 명령
/*
*/
class MSG_RTTG_ARMORKIT_DISPATCH_NTF : public MSG_HEADER4
{
public:
MSG_RTTG_ARMORKIT_DISPATCH_NTF()
{
wSize = sizeof( MSG_RTTG_ARMORKIT_DISPATCH_NTF ) - SIZEOFHDR;
wID = RTTG_ARMORKIT_DISPATCH_NTF;
}
~MSG_RTTG_ARMORKIT_DISPATCH_NTF()
{
}
DWORD dwWopsKey;
};
class MSG_RTTG_ARMORKIT_DISPATCH_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_ARMORKIT_DISPATCH_ANS()
{
wSize = sizeof( MSG_RTTG_ARMORKIT_DISPATCH_ANS ) - SIZEOFHDR;
wID = RTTG_ARMORKIT_DISPATCH_ANS;
}
~MSG_RTTG_ARMORKIT_DISPATCH_ANS()
{
}
DWORD dwWopsKey;
DWORD dwResult;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → General
// Description : 인증 서버에게 패턴 Reload 명령
class MSG_RTTG_PATTERN_RELOAD_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_PATTERN_RELOAD_REQ()
{
wSize = sizeof( MSG_RTTG_PATTERN_RELOAD_REQ ) - SIZEOFHDR;
wID = RTTG_PATTERN_RELOAD_REQ;
}
~MSG_RTTG_PATTERN_RELOAD_REQ()
{
}
DWORD dwWopsKey;
};
class MSG_RTTG_PATTERN_RELOAD_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_PATTERN_RELOAD_ANS()
{
wSize = sizeof( MSG_RTTG_PATTERN_RELOAD_ANS ) - SIZEOFHDR;
wID = RTTG_PATTERN_RELOAD_ANS;
}
~MSG_RTTG_PATTERN_RELOAD_ANS()
{
}
DWORD dwWopsKey;
DWORD dwResult;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → General
// Description : 인증 서버에게 GameClinet, Laucher version Reload 명령
class MSG_RTTG_GAMEVERSION_UPDATE_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_GAMEVERSION_UPDATE_REQ()
{
wSize = sizeof( MSG_RTTG_GAMEVERSION_UPDATE_REQ ) - 2;
wID = RTTG_GAMEVERSION_UPDATE_REQ;
}
DWORD dwWopsKey;
};
class MSG_RTTG_GAMEVERSION_UPDATE_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_GAMEVERSION_UPDATE_ANS()
{
wSize = sizeof( MSG_RTTG_GAMEVERSION_UPDATE_ANS ) - 2;
wID = RTTG_GAMEVERSION_UPDATE_ANS;
}
DWORD dwResult;
DWORD dwWopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : General → RTTA
// Description : 서버 정상종료 결과를 통보한다.
class MSG_RTTG_SERVERSHUTDOWN_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_SERVERSHUTDOWN_ANS()
{
wSize = sizeof( MSG_RTTG_SERVERSHUTDOWN_ANS ) - SIZEOFHDR;
wID = RTTG_SERVERSHUTDOWN_ANS;
}
~MSG_RTTG_SERVERSHUTDOWN_ANS()
{
}
DWORD dwKey; // RTT 내에서 사용하는 전용필드
DWORD dwError; // 0 : 완료, 1 : 에러발생
SERVER_KEY m_ServerKey; // 에러 발생의 경우, Server Key 확인
__int64 i64WopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → General
// Description : 패치 결과의 통보를 요청한다.
class MSG_RTTG_PATCHRESULT_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_PATCHRESULT_REQ()
{
wSize = sizeof( MSG_RTTG_PATCHRESULT_REQ ) - SIZEOFHDR;
wID = RTTG_PATCHRESULT_REQ;
}
~MSG_RTTG_PATCHRESULT_REQ()
{
}
DWORD dwKey; // RTT 내에서 사용하는 전용필드
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : General → RTTA
// Description : 패치 결과를 통보한다.
class MSG_RTTG_PATCHRESULT_ANS : public MSG_HEADER4
{
public:
static const DWORD ERROR_PATCHSUCCESS = 0x00; // 패치 성공
static const DWORD ERROR_PROCESSRUN = 0x01; // 해당 프로세스 실행중
static const DWORD ERROR_FTPCONNECT_FAIL = 0x02; // ftp 연결 오류
static const DWORD ERROR_DOWNLOAD_FAIL = 0x03; // 파일 받기 오류
static const DWORD ERROR_FILENOTFOUND = 0x04; // 패치파일 찾기 오류
static const DWORD ERROR_INVALID_SERVERTYPE = 0x05; // 잘못된 서버 타입
// RTT 전용 코드
static const DWORD ERROR_NONE = 0xFC; // nothing
static const DWORD ERROR_NOTEXISTLAUNCHER = 0xFD; // 런쳐를 실행할 수 없음
static const DWORD ERROR_PROGRESS = 0xFE; // 패치 진행중
static const DWORD ERROR_COMPLETE = 0xFF; // 패치 완료
public:
MSG_RTTG_PATCHRESULT_ANS()
{
wSize = sizeof( MSG_RTTG_PATCHRESULT_ANS ) - SIZEOFHDR;
wID = RTTG_PATCHRESULT_ANS;
}
~MSG_RTTG_PATCHRESULT_ANS()
{
}
DWORD dwKey; // RTT 내에서 사용하는 전용필드
DWORD dwError; // 0 : 성공, 1 이상 : 에러값 확인
BYTE byIndex;
BYTE byServerType;
BYTE byVer1; // 프로세스의 버젼
BYTE byVer2;
BYTE byVer3;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT
// Description : RTT_A 서비스를 시작시킬 것을 요청한다.
class MSG_RTTW_RTTASTART_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_RTTASTART_REQ()
{
dwSize = sizeof( MSG_RTTW_RTTASTART_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_RTTASTART_REQ;
memset(&szIPAddress[0], 0, sizeof(wchar_t) * IP_MAX_LEN); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_RTTASTART_REQ()
{
}
DWORD dwFlag; // 0 : 전체 RTTA를 대상으로 적용
// 1 : szIPAddress에 해당하는 RTTA만 적용
wchar_t szIPAddress[IP_MAX_LEN];
};
class MSG_RTTW_RTTASTART_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_RTTASTART_ANS()
{
dwSize = sizeof( MSG_RTTW_RTTASTART_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_RTTASTART_ANS;
memset(&szIPAddress[0], 0, sizeof(wchar_t) * IP_MAX_LEN); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_RTTASTART_ANS()
{
}
DWORD dwResult; // 0 : 성공, 1 : 실패 2 : RTTA검색 실패
wchar_t szIPAddress[IP_MAX_LEN]; // 목적지 주소
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT
// Description : RTT_A 서비스를 종료시킬 것을 요청한다.
class MSG_RTTW_RTTASTOP_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_RTTASTOP_REQ()
{
dwSize = sizeof( MSG_RTTW_RTTASTOP_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_RTTASTOP_REQ;
memset(&szIPAddress[0], 0, sizeof(wchar_t) * IP_MAX_LEN); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_RTTASTOP_REQ()
{
}
DWORD dwFlag; // 0 : 전체 RTTA를 대상으로 적용
// 1 : szIPAddress에 해당하는 RTTA만 적용
wchar_t szIPAddress[IP_MAX_LEN];
};
class MSG_RTTW_RTTASTOP_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_RTTASTOP_ANS()
{
dwSize = sizeof( MSG_RTTW_RTTASTOP_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_RTTASTOP_ANS;
memset(&szIPAddress[0], 0, sizeof(wchar_t) * IP_MAX_LEN); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_RTTASTOP_ANS()
{
}
DWORD dwResult; // 0 : 성공, 1 : 실패
wchar_t szIPAddress[IP_MAX_LEN]; // 목적지 주소
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_S → RTT_Service
// Description : RTT_A의 패치를 명령한다.
class MSG_RTTW_RTTAPATCH_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_RTTAPATCH_NTF()
{
dwSize = sizeof( MSG_RTTW_RTTAPATCH_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_RTTAPATCH_NTF;
memset(&szFtpAddress[0] , 0, sizeof(wchar_t) * 20); // 07-01-03 김종호(버퍼 초기화)
memset(&szFtpUser[0] , 0, sizeof(wchar_t) * 20); // 07-01-03 김종호(버퍼 초기화)
memset(&szFtpPassword[0] , 0, sizeof(wchar_t) * 20); // 07-01-03 김종호(버퍼 초기화)
memset(&szFtpGetFilePath[0] , 0, sizeof(wchar_t) * 40); // 07-01-03 김종호(버퍼 초기화)
memset(&szFtpGetFileName[0] , 0, sizeof(wchar_t) * 40); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_RTTAPATCH_NTF()
{
}
DWORD dwWorldID; // 0 : 전체
DWORD dwChannelID; // 0 : 전체
wchar_t szFtpAddress[20];
DWORD dwFtpPort;
wchar_t szFtpUser[20];
wchar_t szFtpPassword[20];
wchar_t szFtpGetFilePath[40];
wchar_t szFtpGetFileName[40];
};
/*
class MSG_RTTW_RTTAPATCH_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_RTTAPATCH_NTF()
{
dwSize = sizeof( MSG_RTTW_RTTAPATCH_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_RTTAPATCH_NTF;
}
~MSG_RTTW_RTTAPATCH_NTF()
{
}
DWORD dwWorldID; // 0 : 전체
DWORD dwChannelID; // 0 : 전체
wchar_t szIp[20];
wchar_t szPath[40];
wchar_t szAccount[20];
wchar_t szPassword[40];
};
*/
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT
// Description : 시스템의 재부팅을 요청한다.
class MSG_RTTW_SYSTEMREBOOT_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_SYSTEMREBOOT_NTF()
{
dwSize = sizeof( MSG_RTTW_SYSTEMREBOOT_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_SYSTEMREBOOT_NTF;
memset(&szIPAddress[0] , 0, sizeof(wchar_t) * IP_MAX_LEN); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_SYSTEMREBOOT_NTF()
{
}
wchar_t szIPAddress[IP_MAX_LEN]; // 목적지 주소
BOOL bReboot; // 재부팅여부(FALSE면 꺼버림.) 08-01-28 박동권 by 김종호
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT_S → RTT_A
// Description : 프로세스 제어 명령을 보낸다
class MSG_RTTW_PROCESSCONTROL_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_PROCESSCONTROL_NTF()
{
dwSize = sizeof( MSG_RTTW_PROCESSCONTROL_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_PROCESSCONTROL_NTF;
memset(&szIPAddress[0] , 0, sizeof(wchar_t) * IP_MAX_LEN); // 07-01-03 김종호(버퍼 초기화)
memset(&szBinaryName[0] , 0, sizeof(wchar_t) * 100); // 07-01-03 김종호(버퍼 초기화)
memset(&szAbsolutePath[0] , 0, sizeof(wchar_t) * 100); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_PROCESSCONTROL_NTF()
{
}
DWORD dwCommand; // 0 : Process Kill, 1 : Process Run
wchar_t szIPAddress[IP_MAX_LEN]; // 목적지 IP주소
wchar_t szBinaryName[100]; // 바이너리
wchar_t szAbsolutePath[100]; // 절대 경로
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT → Auth
// Description : 지정된 계정의 사용자 접속을 강제로 종료시킨다.
class MSG_RTTW_DROPUSER_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_DROPUSER_REQ()
{
dwSize = sizeof( MSG_RTTW_DROPUSER_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_DROPUSER_REQ;
memset(&szUserID[0] , 0, sizeof(wchar_t) * ID_MAX_LEN + 1); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_DROPUSER_REQ()
{
}
wchar_t szUserID[ID_MAX_LEN + 1]; // 강제종료시킬 사용자의 계정(ID)
};
/**
2006.11.28
modify by guiun
AuthServer로 전송되는 사용자 DROP 패킷에 DROP 이유를 담을 수 있는 DropCode를 추가한다.
*/
enum eDROP_CODE
{
eDRC_WOPS_GM = 100,
eDRC_BILLING_EXPIRE = 200,
eDRC_WEB = 300,
eDRC_MAX
};
class MSG_RTTG_DROPUSER_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_DROPUSER_REQ()
{
wSize = sizeof( MSG_RTTG_DROPUSER_REQ ) - SIZEOFHDR;
wID = RTTG_DROPUSER_REQ;
memset(&szUserID[0] , 0, ID_MAX_LEN + 1); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTG_DROPUSER_REQ()
{
}
char szUserID[ID_MAX_LEN + 1]; // 강제종료시킬 사용자의 계정(ID)
DWORD dwDropCode;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : Auth → RTT → GMS
// Description : 사용자 접속 종료처리 후, 결과를 통지한다.
class MSG_RTTW_DROPUSER_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_DROPUSER_ANS()
{
dwSize = sizeof( MSG_RTTW_DROPUSER_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_DROPUSER_ANS;
memset(&szUserID[0] , 0, sizeof(wchar_t) * ID_MAX_LEN + 1); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_DROPUSER_ANS()
{
}
DWORD dwError; // 0 : 성공 1 : 접속하지 않은 계정
// 2 : 서버간 통신 오류 3 : 이미 작업이 진행중인 계정
wchar_t szUserID[ID_MAX_LEN + 1]; // 요청된 사용자의 계정(ID)
};
class MSG_RTTG_DROPUSER_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_DROPUSER_ANS()
{
wSize = sizeof( MSG_RTTG_DROPUSER_ANS ) - SIZEOFHDR;
wID = RTTG_DROPUSER_ANS;
memset(&szUserID[0] , 0, ID_MAX_LEN + 1); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTG_DROPUSER_ANS()
{
}
#ifdef _090427_HTTP_WEB_DROP_USER
DWORD dwDropCode; // REQ에 보낸 드롭 코드를 리턴한 값(일단 중국 웹 상에서 강제 종료 기능에만 추가된다)
#endif
DWORD dwError; // 0 : 성공 1 : 접속하지 않은 계정
// 2 : 서버간 통신 오류
char szUserID[ID_MAX_LEN + 1]; // 요청된 사용자의 계정(ID)
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_A → RTT_S
// Description : 시스템의 Resource 상황을 보고한다.
class MSG_RTTR_RESOURCE_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_RESOURCE_NTF()
{
dwSize = sizeof( MSG_RTTR_RESOURCE_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_RESOURCE_NTF;
}
~MSG_RTTR_RESOURCE_NTF()
{
}
DWORD dwCPU; // CPU %
DWORD dwMemoryUse; // Memory 사용량
DWORD dwMemoryMax; // Memory 최대값
DWORD dwHDDUse; // HDD 사용량
DWORD dwHDDMax; // HDD 최대값
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTS → RTTA
// Description : 개설된 배틀존의 정보를 요청한다.
class MSG_RTTW_BATTLEZONEINFO_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_BATTLEZONEINFO_REQ()
{
dwSize = sizeof( MSG_RTTW_BATTLEZONEINFO_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_BATTLEZONEINFO_REQ;
}
~MSG_RTTW_BATTLEZONEINFO_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → RTTS
// Description : 개설된 배틀존의 정보를 보낸다.
class MSG_RTTW_BATTLEZONEINFO_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_BATTLEZONEINFO_ANS()
{
dwSize = sizeof( MSG_RTTW_BATTLEZONEINFO_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_BATTLEZONEINFO_ANS;
}
~MSG_RTTW_BATTLEZONEINFO_ANS()
{
}
BATTLEZONE_INFO info;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → RTTS
// Description : ArmorKit에서 발생된 정보를 보낸다.
class MSG_RTTW_ARMORKIT_FINDHACK_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_ARMORKIT_FINDHACK_NTF()
{
dwSize = sizeof( MSG_RTTW_ARMORKIT_FINDHACK_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_ARMORKIT_FINDHACK_NTF;
memset(&szIP[0] , 0, sizeof(wchar_t) * 16); // 07-01-03 김종호(버퍼 초기화)
memset(&szBuf[0], 0, 1024); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_ARMORKIT_FINDHACK_NTF()
{
}
DWORD dwGuid; // 해킹이 감지된 클라이언트 guid
wchar_t szIP[16]; // 해킹이 감지된 클라이언트 IP주소
DWORD dwHackType; // 탐지한 해킹 타입 (e.g. AKDETECT_SPEEDHACK)
DWORD dwBufSize; // Buffer 의 길이
char szBuf[1024]; // 데이터 버퍼-1024는 보안파트에서 전달받은 암묵적 최대값(성현창)
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → RTTS
// Description : 어뷰징 정보
class MSG_RTTW_ABUSING_NTF : public MSG_HEADER8
{
public:
enum { MAX_DESC_LENGTH = 1023, MAX_CHARNAME_LENGTH = 16, MAX_IP_LENGTH = 15, MAX_ID_LEN = 12,
MAX_SUBTYPE_NAME_LEN = 64, };
MSG_RTTW_ABUSING_NTF()
{
dwSize = sizeof( MSG_RTTW_ABUSING_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_ABUSING_NTF;
#ifndef _110503_CUSTOM_USERID_LENGTH
memset(&m_ptszUserID[0], 0, sizeof(char) * (MAX_ID_LEN + 1) ); // 07-06-11 김종호(버퍼 초기화)
#else
memset(&m_ptszUserID[0], 0, sizeof(char) * (ID_MAX_LEN + 1) );
#endif
memset(&m_ptszCharName[0], 0, sizeof(TCHAR) * (MAX_CHARNAME_LENGTH + 1) ); // 07-02-01 김종호(버퍼 초기화)
memset(&m_ptszIP[0] , 0, sizeof(TCHAR) * (MAX_IP_LENGTH + 1) ); // 07-01-03 김종호(버퍼 초기화)
memset(&m_ptszDesc[0] , 0, sizeof(TCHAR) * (MAX_DESC_LENGTH + 1) ); // 07-01-03 김종호(버퍼 초기화)
ZeroMemory(m_ptszSubTypeName, sizeof(m_ptszSubTypeName)); // 08-04-03 박동권(노코멘트 ㄱ-)
}
~MSG_RTTW_ABUSING_NTF()
{
}
DWORD64 m_dwTime; // time - GetDateTime_YYMMDDHHMM()의 값을 사용한다
SERVER_KEY m_ServerKey; // server
DWORD m_dwUserGuid; // user guid
DWORD m_dwCharGuid; // char guid
#ifndef _110503_CUSTOM_USERID_LENGTH
char m_ptszUserID[MAX_ID_LEN + 1]; // user id
#else
char m_ptszUserID[ID_MAX_LEN + 1]; // user id
#endif
TCHAR m_ptszCharName[MAX_CHARNAME_LENGTH + 1]; // char name
TCHAR m_ptszIP[MAX_IP_LENGTH + 1]; // user ip
BYTE m_AbuseType; // type
BYTE m_Level; // level
TCHAR m_ptszSubTypeName[MAX_SUBTYPE_NAME_LEN + 1]; // typename(64)
WORD m_wLength; // desc length
TCHAR m_ptszDesc[MAX_DESC_LENGTH + 1]; // desc
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTS → WOPS
// Description : 장애 발생에 대한 통지
class MSG_RTTW_ERRORNOTIFY_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_ERRORNOTIFY_NTF()
{
dwSize = sizeof( MSG_RTTW_ERRORNOTIFY_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_ERRORNOTIFY_NTF;
memset(&szMessage[0] , 0, sizeof(wchar_t) * 120 ); // 07-01-03 김종호(버퍼 초기화)
memset(&szDateTime[0] , 0, sizeof(wchar_t) * 20 ); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTW_ERRORNOTIFY_NTF()
{
}
DWORD dwWorldID;
DWORD dwChannelID;
DWORD dwServerType;
DWORD dwServerID;
DWORD dwWarningDetailID;
wchar_t szMessage[120];
wchar_t szDateTime[20];
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTTS
// Description : WOPS의 연결 형식을 정의한다.
class MSG_RTTW_CONNECTIONTYPE_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_CONNECTIONTYPE_NTF()
{
dwSize = sizeof( MSG_RTTW_CONNECTIONTYPE_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_CONNECTIONTYPE_NTF;
}
~MSG_RTTW_CONNECTIONTYPE_NTF()
{
}
DWORD dwType;
// 0 : 지속적인 연결 - RTTS가 WOPS로 먼저 패킷을 보낼 수 있다.
// 1 : 단발적인 연결 - WOPS의 요청이 있을 경우만 패킷을 보낼 수 있다.
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → RTTS
// Description : 통화량 전송을 요청한다.
class MSG_RTTW_USERMONEY_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_USERMONEY_REQ()
{
dwSize = sizeof( MSG_RTTW_USERMONEY_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_USERMONEY_REQ;
}
~MSG_RTTW_USERMONEY_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTA → RTTS
// Description : 통화량을 보낸다.
class MSG_RTTW_USERMONEY_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_USERMONEY_ANS()
{
dwSize = sizeof( MSG_RTTW_USERMONEY_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_USERMONEY_ANS;
}
~MSG_RTTW_USERMONEY_ANS()
{
}
BYTE byWorldID;
BYTE byChannelID;
BYTE byServerType;
BYTE byServerID;
// 개인 보유액 관련
UINT64 ui64TotalGetMoney; // 일정 시간 동안 생겨난 돈 총계
UINT64 ui64TotalLoseMoney; // 일정 시간 동안 없어진 돈 총계
UINT64 ui64TotalUserMoney; // 현재 동접 유저들이 갖고 있는 평균 금액
// 창고 보유액 관련
UINT64 ui64AveMoney; // 창고 평균 금액
UINT64 ui64TotalPlusMoney; // 창고에 들어간 돈
UINT64 ui64TotalMinusMoney; // 창고에서 나간 돈
USHORT usJackpotCnt; // 잭팟 터진 횟수
UINT64 ui64JackpotMoney; // 잭팟 금액 합계
UINT64 ui64CirculateMoney; // 상거래 금액 합계
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT
// Description : 서버의 정상종료를 요청한다.
/*
[2006.04.20] modify by guiun
dwServerType, dwServerID 추가
*/
class MSG_RTTW_SERVERSHUTDOWN_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_SERVERSHUTDOWN_REQ()
{
dwSize = sizeof( MSG_RTTW_SERVERSHUTDOWN_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_SERVERSHUTDOWN_REQ;
}
~MSG_RTTW_SERVERSHUTDOWN_REQ()
{
}
DWORD dwKey; // RTT 내에서 사용하는 전용필드
DWORD dwWorldID; // 0x00 = 전체 World(dwChannelID 무시)
DWORD dwChannelID; // 0x00 = 전체 Channel
DWORD dwServerType; //
DWORD dwServerID; //
UINT64 i64WopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT → WOPS
// Description : 서버 정상종료 처리 결과를 통지한다.
class MSG_RTTW_SERVERSHUTDOWN_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_SERVERSHUTDOWN_ANS()
{
dwSize = sizeof( MSG_RTTW_SERVERSHUTDOWN_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_SERVERSHUTDOWN_ANS;
}
~MSG_RTTW_SERVERSHUTDOWN_ANS()
{
}
DWORD dwKey; // RTT 내에서 사용하는 전용필드
DWORD dwError; // 0 : 완료, 1 : 에러발생
SERVER_KEY m_ServerKey; // 에러 발생의 경우, Server Key 확인
__int64 i64WopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT
// Description : 패치 런쳐의 실행을 명령한다.
class MSG_RTTW_LAUNCHPATCHER_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_LAUNCHPATCHER_REQ()
{
dwSize = sizeof( MSG_RTTW_LAUNCHPATCHER_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_LAUNCHPATCHER_REQ;
}
~MSG_RTTW_LAUNCHPATCHER_REQ()
{
}
DWORD dwWorldID; // 0x00 = 전체 World(dwChannelID 무시)
DWORD dwChannelID; // 0x00 = 전체 Channel
DWORD dwServerType; //
DWORD dwServerID; //
DWORD dwServerTypeForProcess;
__int64 i64WopsKey; // WOPS와 DB로 연동할 key값
DWORD dwKey; // RTT 내에서 사용하는 전용필드
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT
// Description : 기능제한 테이블 다시 읽어서 Game서버들에 Broadcast
class MSG_RTTW_FUNCRESTRICT_RELOAD_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_FUNCRESTRICT_RELOAD_NTF()
{
dwSize = sizeof( MSG_RTTW_FUNCRESTRICT_RELOAD_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_FUNCRESTRICT_RELOAD_NTF;
}
~MSG_RTTW_FUNCRESTRICT_RELOAD_NTF()
{
}
DWORD dwWopsKey;
};
class MSG_RTTW_FUNCRESTRICT_RELOAD_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_FUNCRESTRICT_RELOAD_ANS()
{
dwSize = sizeof( MSG_RTTW_FUNCRESTRICT_RELOAD_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_FUNCRESTRICT_RELOAD_ANS;
}
~MSG_RTTW_FUNCRESTRICT_RELOAD_ANS()
{
}
DWORD dwResult;
DWORD dwWopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT
// Description : ARMORKIT DISPATCH
class MSG_RTTW_ARMORKIT_DISPATCH_NTF : public MSG_HEADER8
{
public:
MSG_RTTW_ARMORKIT_DISPATCH_NTF()
{
dwSize = sizeof( MSG_RTTW_ARMORKIT_DISPATCH_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTW_ARMORKIT_DISPATCH_NTF;
}
~MSG_RTTW_ARMORKIT_DISPATCH_NTF()
{
}
DWORD dwWopsKey;
};
class MSG_RTTW_ARMORKIT_DISPATCH_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_ARMORKIT_DISPATCH_ANS()
{
dwSize = sizeof( MSG_RTTW_ARMORKIT_DISPATCH_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_ARMORKIT_DISPATCH_ANS;
}
~MSG_RTTW_ARMORKIT_DISPATCH_ANS()
{
}
DWORD dwResult;
DWORD dwWopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT → Master
// Description : 길드명 변경 요청.
class MSG_RTTW_CHANGE_GUILDNAME_REQ : public MSG_HEADER8
{
public:
enum { MAX_GUILD_NAME_LENGTH = 16, MAX_DESCRIPTION_LENGTH = 256, };
MSG_RTTW_CHANGE_GUILDNAME_REQ()
{
dwSize = sizeof( MSG_RTTW_CHANGE_GUILDNAME_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_CHANGE_GUILDNAME_REQ;
memset( wszGuildName, 0, sizeof(wszGuildName) );
memset( wszDescription, 0, sizeof(wszDescription) );
}
~MSG_RTTW_CHANGE_GUILDNAME_REQ()
{
}
SERVER_KEY dwServerGuid; // 서버 GUID(구조체에 월드의 ID만 적고 나머지 필드는 모두 0)
DWORD dwGuildGuid; // 길드 GUID
wchar_t wszGuildName[MAX_GUILD_NAME_LENGTH + 1]; // 변경하고자 하는 길드명
wchar_t wszDescription[MAX_DESCRIPTION_LENGTH + 1]; // 변경 사유
};
class MSG_RTTG_CHANGE_GUILDNAME_REQ : public MSG_HEADER4
{
public:
enum { MAX_GUILD_NAME_LENGTH = 16, MAX_DESCRIPTION_LENGTH = 512, };
MSG_RTTG_CHANGE_GUILDNAME_REQ()
{
wSize = sizeof( MSG_RTTG_CHANGE_GUILDNAME_REQ ) - SIZEOFHDR;
wID = RTTG_CHANGE_GUILDNAME_REQ;
memset( szGuildName, 0, sizeof(szGuildName) );
memset( szDescription, 0, sizeof(szDescription) );
}
~MSG_RTTG_CHANGE_GUILDNAME_REQ()
{
}
DWORD dwWopsKey; // 명령 식별자
SERVER_KEY dwServerGuid; // 서버 GUID(구조체에 월드의 ID만 적고 나머지 필드는 모두 0)
DWORD dwGuildGuid; // 길드 GUID
char szGuildName[MAX_GUILD_NAME_LENGTH + 1]; // 변경하고자 하는 길드명
char szDescription[MAX_DESCRIPTION_LENGTH + 1]; // 변경 사유
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : Master → RTT → GMS
// Description : 길드명 변경 요청 결과
class MSG_RTTW_CHANGE_GUILDNAME_ANS : public MSG_HEADER8
{
public:
enum { MAX_RESULT_DESCRIPTION_LENGTH = 200, };
MSG_RTTW_CHANGE_GUILDNAME_ANS()
{
dwSize = sizeof( MSG_RTTW_CHANGE_GUILDNAME_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_CHANGE_GUILDNAME_ANS;
memset( wszResultDescription, 0, sizeof(wszResultDescription) );
}
~MSG_RTTW_CHANGE_GUILDNAME_ANS()
{
}
DWORD dwResult; // 0 : 변경 성공, 1 : 변경 실패, 2 : 서버간 통신오류(RTT까지의 통신오류)
wchar_t wszResultDescription[MAX_RESULT_DESCRIPTION_LENGTH + 1]; // 처리 결과에 대한 Description
};
class MSG_RTTG_CHANGE_GUILDNAME_ANS : public MSG_HEADER4
{
public:
enum { MAX_RESULT_DESCRIPTION_LENGTH = 200, };
MSG_RTTG_CHANGE_GUILDNAME_ANS()
{
wSize = sizeof( MSG_RTTG_CHANGE_GUILDNAME_ANS ) - SIZEOFHDR;
wID = RTTG_CHANGE_GUILDNAME_ANS;
memset( szResultDescription, 0, sizeof(szResultDescription) );
}
~MSG_RTTG_CHANGE_GUILDNAME_ANS()
{
}
DWORD dwWopsKey; // 명령 식별자
DWORD dwResult; // 0 : 변경 성공, 1 : 변경 실패
char szResultDescription[MAX_RESULT_DESCRIPTION_LENGTH + 1]; // 처리 결과에 대한 Description
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : GMS → RTT → Master
// Description : 유저에게 쪽지를 전송 요청.
class MSG_RTTW_SEND_MESSAGE_REQ : public MSG_HEADER8
{
public:
enum{ MAX_CHAR_NAME_LENGTH = 16, MAX_MESSAGE_LENGTH = 100, MAX_USER_INFO = 10, };
typedef struct tag_USER_INFO
{
wchar_t wszRecvCharName[MAX_CHAR_NAME_LENGTH + 1]; // 쪽지를 받을 캐릭터명
} USER_INFO, *LPUSER_INFO;
public:
MSG_RTTW_SEND_MESSAGE_REQ()
{
dwSize = sizeof( MSG_RTTW_SEND_MESSAGE_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_SEND_MESSAGE_REQ;
memset( arrUserInfoList, 0, sizeof(arrUserInfoList) );
memset( wszSendCharName, 0, sizeof(wszSendCharName) );
memset( wszMessage, 0, sizeof(wszMessage) );
}
~MSG_RTTW_SEND_MESSAGE_REQ()
{
}
SERVER_KEY dwServerGuid; // 서버 GUID(구조체에 월드의 ID만 적고 나머지 필드는 모두 0)
DWORD dwCount; // 쪽지 정보 갯수
USER_INFO arrUserInfoList[MAX_USER_INFO]; // 쪽지 정보들
wchar_t wszSendCharName[MAX_CHAR_NAME_LENGTH + 1]; // 쪽지를 보낸 캐릭터명
wchar_t wszMessage[MAX_MESSAGE_LENGTH + 1]; // 쪽지 내용
};
class MSG_RTTG_SEND_MESSAGE_REQ : public MSG_HEADER4
{
public:
enum{ MAX_CHAR_NAME_LENGTH = 16, MAX_MESSAGE_LENGTH = 200, MAX_USER_INFO = 10, };
typedef struct tag_USER_INFO
{
char szRecvCharName[MAX_CHAR_NAME_LENGTH + 1]; // 쪽지를 받을 캐릭터명
} USER_INFO, *LPUSER_INFO;
public:
MSG_RTTG_SEND_MESSAGE_REQ()
{
wSize = sizeof( MSG_RTTG_SEND_MESSAGE_REQ ) - SIZEOFHDR;
wID = RTTG_SEND_MESSAGE_REQ;
memset( arrUserInfoList, 0, sizeof(arrUserInfoList) );
memset( szSendCharName, 0, sizeof(szSendCharName) );
memset( szMessage, 0, sizeof(szMessage) );
}
~MSG_RTTG_SEND_MESSAGE_REQ()
{
}
DWORD dwWopsKey; // 명령 식별자
SERVER_KEY dwServerGuid; // 서버 GUID(구조체에 월드의 ID만 적고 나머지 필드는 모두 0)
DWORD dwCount; // 쪽지 정보 갯수
USER_INFO arrUserInfoList[MAX_USER_INFO]; // 쪽지 정보들
char szSendCharName[MAX_CHAR_NAME_LENGTH + 1]; // 쪽지를 보낸 캐릭터명
char szMessage[MAX_MESSAGE_LENGTH + 1]; // 쪽지 내용
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : Master → RTT → GMS
// Description : 유저에게 쪽지 전송 요청 결과
class MSG_RTTW_SEND_MESSAGE_ANS : public MSG_HEADER8
{
public:
enum{ MAX_CHAR_NAME_LENGTH = 16, MAX_RESULT_INFO = 10, MAX_RESULT_DESCRIPTION_LENGTH = 200, };
typedef struct tag_RESULT_INFO
{
DWORD dwResult; // 0 : 전송 성공, 1 : 전송 실패, 2 : 서버간 통신오류(RTT까지의 통신오류)
wchar_t wszRecvCharName[MAX_CHAR_NAME_LENGTH + 1]; // 쪽지를 받은 캐릭터명
wchar_t wszResultDescription[MAX_RESULT_DESCRIPTION_LENGTH + 1]; // 쪽지 전송 결과 Description
} RESULT_INFO, *LPRESULT_INFO;
public:
MSG_RTTW_SEND_MESSAGE_ANS()
{
dwSize = sizeof( MSG_RTTW_SEND_MESSAGE_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_SEND_MESSAGE_ANS;
memset( arrResultInfoList, 0, sizeof(arrResultInfoList) );
}
~MSG_RTTW_SEND_MESSAGE_ANS()
{
}
DWORD dwCount; // 쪽지 정보 갯수
RESULT_INFO arrResultInfoList[MAX_RESULT_INFO]; // 쪽지 정보들
};
class MSG_RTTG_SEND_MESSAGE_ANS : public MSG_HEADER4
{
public:
enum{ MAX_CHAR_NAME_LENGTH = 16, MAX_RESULT_INFO = 10, MAX_RESULT_DESCRIPTION_LENGTH = 200, };
typedef struct tag_RESULT_INFO
{
DWORD dwResult; // 0 : 전송 성공, 1 : 전송 실패
char szRecvCharName[MAX_CHAR_NAME_LENGTH + 1]; // 메시지를 받은 캐릭터명
char szResultDescription[MAX_RESULT_DESCRIPTION_LENGTH + 1]; // 쪽지 전송 결과 Description
} RESULT_INFO, *LPRESULT_INFO;
public:
MSG_RTTG_SEND_MESSAGE_ANS()
{
wSize = sizeof( MSG_RTTG_SEND_MESSAGE_ANS ) - SIZEOFHDR;
wID = RTTG_SEND_MESSAGE_ANS;
memset( arrResultInfoList, 0, sizeof(arrResultInfoList) );
}
~MSG_RTTG_SEND_MESSAGE_ANS()
{
}
DWORD dwWopsKey; // 명령 식별자
DWORD dwCount; // 쪽지 전송 결과 갯수
RESULT_INFO arrResultInfoList[MAX_RESULT_INFO]; // 쪽지 전송 결과 정보들
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT
// Description : 인증 서버에게 접속 필터 IP 테이블 Reload 명령
class MSG_RTTW_AUTHIPLIST_RELOAD_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_AUTHIPLIST_RELOAD_REQ()
{
dwSize = sizeof( MSG_RTTW_AUTHIPLIST_RELOAD_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_AUTHIPLIST_RELOAD_REQ;
}
~MSG_RTTW_AUTHIPLIST_RELOAD_REQ()
{
}
DWORD dwWopsKey;
};
class MSG_RTTW_AUTHIPLIST_RELOAD_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_AUTHIPLIST_RELOAD_ANS()
{
dwSize = sizeof( MSG_RTTW_AUTHIPLIST_RELOAD_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_AUTHIPLIST_RELOAD_ANS;
}
~MSG_RTTW_AUTHIPLIST_RELOAD_ANS()
{
}
DWORD dwWopsKey;
DWORD dwResult;// 1 성공, 0 실패
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT
// Description : 인증 서버에게 GameClinet, Laucher version Reload 명령
class MSG_RTTW_GAMEVERSION_UPDATE_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_GAMEVERSION_UPDATE_REQ()
{
dwSize = sizeof( MSG_RTTW_GAMEVERSION_UPDATE_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMEVERSION_UPDATE_REQ;
}
~MSG_RTTW_GAMEVERSION_UPDATE_REQ()
{
}
DWORD dwWopsKey;
};
class MSG_RTTW_GAMEVERSION_UPDATE_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_GAMEVERSION_UPDATE_ANS()
{
dwSize = sizeof( MSG_RTTW_GAMEVERSION_UPDATE_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMEVERSION_UPDATE_ANS;
}
~MSG_RTTW_GAMEVERSION_UPDATE_ANS()
{
}
DWORD dwResult;
DWORD dwWopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTS → WOPS
// Description : 패치 결과를 통지한다.
class MSG_RTTW_PATCHRESULT_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_PATCHRESULT_ANS()
{
dwSize = sizeof( MSG_RTTW_PATCHRESULT_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_PATCHRESULT_ANS;
}
~MSG_RTTW_PATCHRESULT_ANS()
{
}
DWORD dwKey; // RTT 내에서 사용하는 전용필드
DWORD dwError; // 0 : 성공, 1 이상 : MSG_RTTG_PATCHRESULT_ANS참조
BYTE byIndex; // 여러 프로세스를 실행 시킬 경우 몇번째 실행된 프로세스인지 구분(MAX->0)
BYTE byServerType;
BYTE byVer1; // 프로세스의 버젼
BYTE byVer2;
BYTE byVer3;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT
// Description : 지정된 머신의 감시 대상 프로세스를 모두 시작시킨다.
class MSG_RTTW_LAUNCHPROCESS_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_LAUNCHPROCESS_REQ()
{
dwSize = sizeof( MSG_RTTW_LAUNCHPROCESS_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_LAUNCHPROCESS_REQ;
}
~MSG_RTTW_LAUNCHPROCESS_REQ()
{
}
DWORD dwWorldID; // 1 이상의 값만 허용한다.
DWORD dwChannelID; // 0 : 전체 채널, 1 이상 : 지정된 채널
DWORD dwServerType;
DWORD dwServerID;
DWORD dwServerTypeForProcess;
__int64 i64WopsKey;
// 이하 필드는 RTT 내에서만 전용으로 사용한다.
DWORD dwWopsUID;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT → WOPS
// Description : 지정된 머신의 감시 대상 프로세스를 모두 시작시킨다.
class MSG_RTTW_LAUNCHPROCESS_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_LAUNCHPROCESS_ANS()
{
dwSize = sizeof( MSG_RTTW_LAUNCHPROCESS_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_LAUNCHPROCESS_ANS;
}
~MSG_RTTW_LAUNCHPROCESS_ANS()
{
}
DWORD dwError; // 0 : 성공 1 : 프로세스 실행 에러(RTTA 로그 확인)
// 이하 필드는 RTT 내에서만 전용으로 사용한다.
DWORD dwServerKey;
DWORD dwWopsUID;
__int64 i64WopsKey;
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_S → RTT_Service
// Description : RTT_A 서비스를 시작시킬 것을 요청한다.
class MSG_RTTR_RTTASTART_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_RTTASTART_NTF()
{
dwSize = sizeof( MSG_RTTR_RTTASTART_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_RTTASTART_NTF;
}
~MSG_RTTR_RTTASTART_NTF()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_S → RTT_Service
// Description : RTT_A 서비스를 종료시킬 것을 요청한다.
class MSG_RTTR_RTTASTOP_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_RTTASTOP_NTF()
{
dwSize = sizeof( MSG_RTTR_RTTASTOP_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_RTTASTOP_NTF;
}
~MSG_RTTR_RTTASTOP_NTF()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_S → RTT_Service
// Description : RTT_A의 패치를 명령한다.
class MSG_RTTR_RTTAPATCH_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_RTTAPATCH_NTF()
{
dwSize = sizeof( MSG_RTTR_RTTAPATCH_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_RTTAPATCH_NTF;
memset(&szFtpAddress[0] , 0, sizeof(wchar_t) * 20); // 07-01-03 김종호(버퍼 초기화)
memset(&szFtpUser[0] , 0, sizeof(wchar_t) * 20); // 07-01-03 김종호(버퍼 초기화)
memset(&szFtpPassword[0] , 0, sizeof(wchar_t) * 20); // 07-01-03 김종호(버퍼 초기화)
memset(&szFtpGetFilePath[0] , 0, sizeof(wchar_t) * 40); // 07-01-03 김종호(버퍼 초기화)
memset(&szFtpGetFileName[0] , 0, sizeof(wchar_t) * 40); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTR_RTTAPATCH_NTF()
{
}
DWORD dwWorldID; // 0 : 전체
DWORD dwChannelID; // 0 : 전체
wchar_t szFtpAddress[20];
DWORD dwFtpPort;
wchar_t szFtpUser[20];
wchar_t szFtpPassword[20];
wchar_t szFtpGetFilePath[40];
wchar_t szFtpGetFileName[40];
};
/*
class MSG_RTTR_RTTAPATCH_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_RTTAPATCH_NTF()
{
dwSize = sizeof( MSG_RTTR_RTTAPATCH_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_RTTAPATCH_NTF;
}
~MSG_RTTR_RTTAPATCH_NTF()
{
}
wchar_t szIp[20];
wchar_t szPath[40];
wchar_t szAccount[20];
wchar_t szPassword[40];
};
*/
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_A → RTT_S
// Description : 감시 프로세스 목록을 요청한다.
class MSG_RTTR_PROCESSLIST_REQ : public MSG_HEADER8
{
public:
MSG_RTTR_PROCESSLIST_REQ()
{
dwSize = sizeof( MSG_RTTR_PROCESSLIST_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTR_PROCESSLIST_REQ;
}
~MSG_RTTR_PROCESSLIST_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_S → RTT_A
// Description : 감시 프로세스 목록을 전송한다.
class MSG_RTTR_PROCESSLIST_ANS : public MSG_HEADER8
{
public:
MSG_RTTR_PROCESSLIST_ANS()
{
dwSize = sizeof( MSG_RTTR_PROCESSLIST_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTR_PROCESSLIST_ANS;
for( int i = 0 ; i < 10 ; ++i )
{
memset(&szBinaryName[i][0] , 0, sizeof(wchar_t) * 100); // 07-01-03 김종호(버퍼 초기화)
memset(&szAbsolutePath[i][0] , 0, sizeof(wchar_t) * 100); // 07-01-03 김종호(버퍼 초기화)
}
}
~MSG_RTTR_PROCESSLIST_ANS()
{
}
DWORD dwFlag; // 0 : 초기화 후 수신. 1 : 수신 후 추가
int dwCount; // 목록 개수
wchar_t szBinaryName[10][100]; // 바이너리
wchar_t szAbsolutePath[10][100]; // 절대 경로
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_A → RTT_S
// Description : 프로세스의 상태를 전송한다.
class MSG_RTTR_PROCESSMONITOR_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_PROCESSMONITOR_NTF()
{
dwSize = sizeof( MSG_RTTR_PROCESSMONITOR_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_PROCESSMONITOR_NTF;
for( int i = 0 ; i < 20 ; ++i )
{
memset(&szBinaryName[i][0] , 0, sizeof(wchar_t) * 100); // 07-01-03 김종호(버퍼 초기화)
memset(&szAbsolutePath[i][0] , 0, sizeof(wchar_t) * 100); // 07-01-03 김종호(버퍼 초기화)
}
memset(&dwStatus[0], 0, sizeof(DWORD) * 20);
}
~MSG_RTTR_PROCESSMONITOR_NTF()
{
}
int dwCount; // 목록 개수
wchar_t szBinaryName[20][100]; // 바이너리
wchar_t szAbsolutePath[20][100]; // 절대 경로
DWORD dwStatus[20]; // 0 : Inactive, 1 : Active
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_S → RTT_A
// Description : 패치 런쳐의 정보를 전송한다.
class MSG_RTTR_PATCHLAUNCHERINFO_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_PATCHLAUNCHERINFO_NTF()
{
dwSize = sizeof( MSG_RTTR_PATCHLAUNCHERINFO_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_PATCHLAUNCHERINFO_NTF;
memset(&szAbsolutePath[0] , 0, sizeof(wchar_t) * 100);// 07-01-03 김종호(버퍼 초기화)
memset(&szBinaryName[0] , 0, sizeof(wchar_t) * 60); // 07-01-03 김종호(버퍼 초기화)
}
~MSG_RTTR_PATCHLAUNCHERINFO_NTF()
{
}
wchar_t szAbsolutePath[100]; // 절대경로
wchar_t szBinaryName[60]; // 실행파일명
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_A → RTT_S
// Description : 감시 URL을 요청한다.(06-12-5, 김종호)
class MSG_RTTR_WEB_URL_REQ : public MSG_HEADER8
{
public:
MSG_RTTR_WEB_URL_REQ()
{
dwSize = sizeof( MSG_RTTR_WEB_URL_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTR_WEB_URL_REQ;
}
~MSG_RTTR_WEB_URL_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_S → RTT_A
// Description : 감시 URL을 전송한다.(06-12-5, 김종호)
class MSG_RTTR_WEB_URL_ANS : public MSG_HEADER8
{
public:
MSG_RTTR_WEB_URL_ANS() : bExist(false), dwURLIndex(0)
{
dwSize = sizeof( MSG_RTTR_WEB_URL_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTR_WEB_URL_ANS;
memset(&szURL[0], 0, sizeof(wchar_t) * MAX_URL);
}
~MSG_RTTR_WEB_URL_ANS()
{
}
bool bExist; // 감시할 URL이 있는지에 대한 플래그
DWORD dwURLIndex; // URL 고유 인덱스
wchar_t szURL[MAX_URL]; // URL
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTT_A → RTT_S
// Description : Request 결과를 전송한다.(06-12-5, 김종호)
class MSG_RTTR_WEB_REQUEST_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_WEB_REQUEST_NTF() : dwURLIndex(0), dwStatusCode( HTTP_STATUS_OK ) // 성공으로 초기화 한다.
{
dwSize = sizeof( MSG_RTTR_WEB_REQUEST_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_WEB_REQUEST_NTF;
}
~MSG_RTTR_WEB_REQUEST_NTF()
{
}
DWORD dwURLIndex; // 감시 URL 고유 인덱스
DWORD dwStatusCode; // Request 상태코드
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTServer → RTTAgent
// Description : 게임 통게 요청
class MSG_RTTW_GAMESTATISTICS_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_GAMESTATISTICS_REQ()
{
dwSize = sizeof( MSG_RTTW_GAMESTATISTICS_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMESTATISTICS_REQ;
}
~MSG_RTTW_GAMESTATISTICS_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTAgent → RTTServer
// Description : 게임 통게 응답
class MSG_RTTW_GAMESTATISTICS_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_GAMESTATISTICS_ANS()
{
dwSize = sizeof( MSG_RTTW_GAMESTATISTICS_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_GAMESTATISTICS_ANS;
}
~MSG_RTTW_GAMESTATISTICS_ANS()
{
}
DWORD dwWorldID;
DWORD dwChannelID;
DWORD dwServerType;
DWORD dwServerID;
UINT64 ui64Statistics[eSTATISTIC_MAX + 1]; // 전체 통계(순서는 eSTATISTICS_TYPE 참조). USERMONEY_ANS에서 보내는 내용은 채우지 않는다
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTAgent → RTTServer
// Description : Heart Beat
class MSG_RTTR_HEARTBEAT_NTF : public MSG_HEADER8
{
public:
MSG_RTTR_HEARTBEAT_NTF()
{
dwSize = sizeof( MSG_RTTR_HEARTBEAT_NTF ) - sizeof( MSG_HEADER8 );
dwID = RTTR_HEARTBEAT_NTF;
}
~MSG_RTTR_HEARTBEAT_NTF()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : RTTAgent → Master
// Description : 게임 통게 요청
class MSG_RTTG_GAMESTATISTICS_REQ : public MSG_HEADER4
{
public:
MSG_RTTG_GAMESTATISTICS_REQ()
{
wSize = sizeof( MSG_RTTG_GAMESTATISTICS_REQ ) - SIZEOFHDR;
wID = RTTG_GAMESTATISTICS_REQ;
}
~MSG_RTTG_GAMESTATISTICS_REQ()
{
}
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : Master → RTTAgent
// Description : 게임 통게 응답
class MSG_RTTG_GAMESTATISTICS_ANS : public MSG_HEADER4
{
public:
MSG_RTTG_GAMESTATISTICS_ANS()
{
wSize = sizeof( MSG_RTTG_GAMESTATISTICS_ANS ) - SIZEOFHDR;
wID = RTTG_GAMESTATISTICS_ANS;
}
~MSG_RTTG_GAMESTATISTICS_ANS()
{
}
BYTE byWorldID;
BYTE byChannelID;
BYTE byServerType;
BYTE byServerID;
UINT64 ui64Statistics[eSTATISTIC_MAX + 1]; // 전체 통계(순서는 eSTATISTICS_TYPE 참조). USERMONEY_ANS에서 보내는 내용은 채우지 않는다
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WOPS → RTT
// Description : 인증 서버에게 패턴 Reload 명령
class MSG_RTTW_PATTERN_RELOAD_REQ : public MSG_HEADER8
{
public:
MSG_RTTW_PATTERN_RELOAD_REQ()
{
dwSize = sizeof( MSG_RTTW_PATTERN_RELOAD_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTW_PATTERN_RELOAD_REQ;
}
~MSG_RTTW_PATTERN_RELOAD_REQ()
{
}
DWORD dwWopsKey;
};
class MSG_RTTW_PATTERN_RELOAD_ANS : public MSG_HEADER8
{
public:
MSG_RTTW_PATTERN_RELOAD_ANS()
{
dwSize = sizeof( MSG_RTTW_PATTERN_RELOAD_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTW_PATTERN_RELOAD_ANS;
}
~MSG_RTTW_PATTERN_RELOAD_ANS()
{
}
DWORD dwWopsKey;
DWORD dwResult;// 1 성공, 0 실패
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : WEB → RTT → Auth
// Description : 중국 웹 요청에 의해 지정된 계정의 사용자 접속을 강제로 종료시킨다
class MSG_RTTH_DROPUSER_REQ : public MSG_HEADER8
{
public:
MSG_RTTH_DROPUSER_REQ()
{
dwSize = sizeof( MSG_RTTH_DROPUSER_REQ ) - sizeof( MSG_HEADER8 );
dwID = RTTH_DROPUSER_REQ;
memset(&szUserID[0] , 0, sizeof(wchar_t) * ID_MAX_LEN + 1); // 버퍼 초기화
}
~MSG_RTTH_DROPUSER_REQ()
{
}
wchar_t szUserID[ID_MAX_LEN + 1]; // 강제종료시킬 사용자의 계정(ID)
};
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// Redirection : Auth → RTT → WEB
// Description : 중국 웹 요청에 의해 지정된 사용자의 접속을 종료처리 후, 결과를 통지한다.
class MSG_RTTH_DROPUSER_ANS : public MSG_HEADER8
{
public:
MSG_RTTH_DROPUSER_ANS()
{
dwSize = sizeof( MSG_RTTH_DROPUSER_ANS ) - sizeof( MSG_HEADER8 );
dwID = RTTH_DROPUSER_ANS;
memset(&szUserID[0] , 0, sizeof(wchar_t) * ID_MAX_LEN + 1); // (버퍼 초기화)
}
~MSG_RTTH_DROPUSER_ANS()
{
}
DWORD dwError; // 0 : 성공 1 : 접속하지 않은 계정
// 2 : 서버간 통신 오류 3 : 이미 작업이 진행중인 계정
wchar_t szUserID[ID_MAX_LEN + 1]; // 요청된 사용자의 계정(ID)
};
};
using namespace Protocol_RTT;
#pragma pack()