init
This commit is contained in:
BIN
Gateway/common/.DS_Store
vendored
Normal file
BIN
Gateway/common/.DS_Store
vendored
Normal file
Binary file not shown.
26
Gateway/common/CMakeLists.txt
Normal file
26
Gateway/common/CMakeLists.txt
Normal file
@@ -0,0 +1,26 @@
|
||||
cmake_minimum_required (VERSION 2.8.1)
|
||||
set( CMAKE_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../sdk) # include 文件夹
|
||||
|
||||
#头文件
|
||||
include_directories(
|
||||
${CMAKE_INCLUDE_DIR}/public
|
||||
${CMAKE_INCLUDE_DIR}/system
|
||||
${CMAKE_INCLUDE_DIR}/utils
|
||||
|
||||
${CMAKE_INCLUDE_DIR}/lua-5.1/src
|
||||
${CMAKE_INCLUDE_DIR}/tolua++/src
|
||||
./
|
||||
)
|
||||
|
||||
# 源文件及头文件
|
||||
file(GLOB_RECURSE Common_LIST "${PROJECT_SOURCE_DIR}/common/*.cc" "${PROJECT_SOURCE_DIR}/common/*.h")
|
||||
|
||||
# 项目文件分组
|
||||
group_by_dir( ${PROJECT_SOURCE_DIR}/common ${Common_LIST} )
|
||||
|
||||
# 输出目录
|
||||
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${Root_Dir}/../libs/gateway)
|
||||
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${Root_Dir}/../libs/gateway)
|
||||
|
||||
#生成目标
|
||||
add_library(common STATIC ${Common_LIST})
|
||||
504
Gateway/common/InterServerComm.h
Normal file
504
Gateway/common/InterServerComm.h
Normal file
@@ -0,0 +1,504 @@
|
||||
#pragma once
|
||||
|
||||
/****************************************************************************************
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>ͨ<EFBFBD><CDA8>Э<EFBFBD>鶨<EFBFBD><E9B6A8>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>淶<EFBFBD><E6B7B6>
|
||||
* namespace <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Proto
|
||||
* {
|
||||
* enum eĿ<65><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Code
|
||||
* {
|
||||
* //ͨ<><CDA8><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ע<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ݶθ<DDB6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD>byte,short,int,shortString,string<6E><67><EFBFBD><EFBFBD>
|
||||
* c<><63>Ϣ<EFBFBD>ű<EFBFBD><C5B1><EFBFBD> = <20><>Ϣ<EFBFBD><CFA2>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>c<EFBFBD><63>ʾͨ<CABE><CDA8>˫<EFBFBD><CBAB><EFBFBD>еĿͻ<C4BF><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>1<EFBFBD><31>ʼ
|
||||
* //ͨ<><CDA8><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ע<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ݶθ<DDB6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD>byte,short,int,shortString,string<6E><67><EFBFBD><EFBFBD>
|
||||
* s<><73>Ϣ<EFBFBD>ű<EFBFBD><C5B1><EFBFBD> = <20><>Ϣ<EFBFBD><CFA2>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73>ʾͨ<CABE><CDA8>˫<EFBFBD><CBAB><EFBFBD>еķ<D0B5><C4B7><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>1<EFBFBD><31>ʼ
|
||||
* };
|
||||
* };
|
||||
****************************************************************************************/
|
||||
|
||||
namespace InterSrvComm
|
||||
{
|
||||
static const int DBSER_VER = 161122;
|
||||
|
||||
namespace DbServerProto
|
||||
{
|
||||
enum SystemId
|
||||
{
|
||||
siDefault = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
siActor = 1,
|
||||
siGuild = 2,
|
||||
siConsignment = 3,
|
||||
siMsg = 4,
|
||||
siRank = 5,
|
||||
siGlobal = 6,
|
||||
siFight = 7,
|
||||
siMail = 8,
|
||||
siCommon = 9,
|
||||
siConfig = 10,
|
||||
siWarTeam = 11,
|
||||
siTxApi = 12,
|
||||
siCommonDB = 13,
|
||||
siAuction = 14,
|
||||
siTrading = 15,
|
||||
};
|
||||
|
||||
enum DefaultSysId
|
||||
{
|
||||
dcInitDB = 1, //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݿ⣬<DDBF><E2A3AC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
dcExecDB = 2, //ִ<><D6B4>sql<71><6C><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
/**<2A><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**/
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ڽű<DABD>ʹ<EFBFBD>õ<EFBFBD><C3B5>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>Բ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ע<>⣺<EFBFBD><E2A3BA><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>ս<EFBFBD>в<EFBFBD><D0B2>ö<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
||||
enum EntityMgrId
|
||||
{
|
||||
dcDefault, //Ĭ<>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>0
|
||||
|
||||
// g-d
|
||||
dcQuery = 1, //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
||||
dcSave = 2, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> actors
|
||||
dcSaveRole, // roles
|
||||
dcSaveVar, //<2F><><EFBFBD>ؽ<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD> actorvariable.variable
|
||||
dcSaveItem, // items
|
||||
dcSaveMail,
|
||||
dcSaveStore,
|
||||
dcSaveTogHitEquip, //<2F><><EFBFBD><EFBFBD><EFBFBD>ϻ<EFBFBD>װ<EFBFBD><D7B0>
|
||||
dcLogout, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// d-g
|
||||
dcLoad,
|
||||
dcLoadRole,
|
||||
dcLoadItem,
|
||||
dcLoadMail,
|
||||
dcLoadVar, //<2F><><EFBFBD>ؽ<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
dcLoadStore, //<2F><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>
|
||||
dcLoadTogHitEquip, //<2F><><EFBFBD>غϻ<D8BA>װ<EFBFBD><D7B0>
|
||||
|
||||
dcLoadFriends = 35, // <20><>ȡ<EFBFBD><C8A1><EFBFBD>˵ĺ<CBB5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
dcUpdateFriend = 36, // <20><><EFBFBD>º<EFBFBD><C2BA>ѵ<EFBFBD><D1B5><EFBFBD>Ϣ
|
||||
dcDelFriend = 37, // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
dcLoadMsg = 27, //<2F><>ȡ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||||
dcDeleteMsg = 28, //ɾ<><C9BE>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
|
||||
// todo<64><6F><EFBFBD><EFBFBD><EFBFBD>Ǿɵģ<C9B5><C4A3>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>
|
||||
//dcLoadQuest = 3, //װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//dcSaveQuest = 4, //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
//dcLoadSkill = 5, //װ<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
////dcSaveSkill = 6, //<2F><><EFBFBD>漼<EFBFBD><E6BCBC><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
//dcLoadBagItem = 7, //װ<>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>Ʒ
|
||||
//dcSaveBagItem = 8, //<2F><><EFBFBD>汳<EFBFBD><E6B1B3><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սҪ<D5BD><D2AA><EFBFBD>棬<EFBFBD><E6A3AC>ΪҪ<CEAA><D2AA><EFBFBD><EFBFBD>ҩƷ<D2A9><C6B7>
|
||||
//dcLoadEquipItem = 9, //װ<><D7B0>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>Ʒ
|
||||
//dcSaveEquipItem = 10, //<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
//dcLoadDepotItem = 11, //װ<>زֿ<D8B2><D6BF><EFBFBD>Ʒ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
//dcSaveDepotItem = 12, //<2F><><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>Ʒ<EFBFBD><C6B7>13<31><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
|
||||
dcLoadBuff = 15, //<2F><><EFBFBD>ؽ<EFBFBD>ɫbuff<66><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcSaveBuff = 16, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫbuff<66><66><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>棬<EFBFBD><E6A3AC>buffʱ<66>䣩
|
||||
|
||||
|
||||
|
||||
dcAddMember = 23, //<2F><><EFBFBD>Ӱ<EFBFBD><D3B0>ɳ<EFBFBD>Ա
|
||||
dcSaveActorGuild = 24, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
dcDeleteMember = 25, //ɾ<><C9BE>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>Ա
|
||||
|
||||
|
||||
dcLoadConsiTimeoutItem = 26, //<2F><>ȡ<EFBFBD>Ѿ<EFBFBD><D1BE>¼ܵĸ<DCB5><C4B8><EFBFBD><EFBFBD><EFBFBD>Ʒ <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
|
||||
|
||||
|
||||
dcLoadSpiritItemData = 29, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcSaveGemItemData = 30, // <20><><EFBFBD>汦<EFBFBD><E6B1A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
|
||||
dcLoadMountData = 31, //װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcSaveMountData = 32, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
|
||||
dcSaveDmkjItem = 33, //<2F><><EFBFBD><EFBFBD><EFBFBD>齱<EFBFBD>IJֿ<C4B2><D6BF><EFBFBD>Ʒ <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
dcLoadDmkjItem = 34, //<2F><>ȡ<EFBFBD>齱<EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
|
||||
|
||||
dcUpdateFriendInfo = 38, //<2F><><EFBFBD>º<EFBFBD><C2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣩
|
||||
dcUpdateFriendContact = 39, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵʱ<CFB5>䣨<EFBFBD><E4A3A8><EFBFBD>ߵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
|
||||
dcSaveCale = 40, //<2F><><EFBFBD>渱<EFBFBD><E6B8B1>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
dcLoadCale = 41, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dcLoadFbCountData = 42, // <20><>ȡÿ<C8A1><C3BF><EFBFBD><EFBFBD><EFBFBD>븱<EFBFBD><EBB8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
dcSaveFbCountData = 43, // <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>븱<EFBFBD><EBB8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD>鶯<EFBFBD><E9B6AF>
|
||||
dcLoadPlotData = 48, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
dcSavePlotData = 49, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//dcLoadMiscStruct = 50, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
//dcSaveMiscStruct = 51, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcLoadFightLog = 55, // <20><>ȡPK<50><4B>¼ <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
dcAddFightLog = 56, // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>PK<50><4B>¼
|
||||
|
||||
dcSlaveAll = 57, // <20>ϵͳ<CFB5><CDB3><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1>棬<EFBFBD>ɽű<C9BD><C5B1><EFBFBD><EFBFBD><EFBFBD> (ȡ<><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
dcDelFightLog = 58, // ɾ<><C9BE>һ<EFBFBD><D2BB>PK<50><4B>¼
|
||||
|
||||
// dcLoadMail = 59, //<2F><>ȡ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
dcDeleteMail = 60, //ɾ<><C9BE><EFBFBD>ʼ<EFBFBD>
|
||||
dcUpdateMailStatus = 61, //<2F><><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>״̬
|
||||
dcDeleteMailFile = 62, //ɾ<><C9BE><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcGetActorIdFromActroName = 63, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ID
|
||||
|
||||
dcSaveEntrustItem = 64, //<2F><><EFBFBD>渱<EFBFBD><E6B8B1>ί<EFBFBD>еIJֿ<C4B2><D6BF><EFBFBD>Ʒ <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
dcLoadEntrustItem = 65, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ί<EFBFBD>вֿ<D0B2><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dcSaveActorMisc = 68, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ˵<D3B0><CBB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcLoadActorMisc = 69, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>Ӱ˵<D3B0><CBB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dcSavePetCrossItem = 70, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﴳ<EFBFBD>زֿ⣨<D6BF>䱦<EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
dcLoadPetCrossItem = 71, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ﴳ<EFBFBD>زֿ⣨<D6BF>䱦<EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
|
||||
dcResetCrossPos = 80, // <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>λ<EFBFBD><CEBB>
|
||||
dcLoadCrossVar = 81, //<2F><><EFBFBD>ؽ<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>
|
||||
dcSaveCrossVar = 82, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>
|
||||
dcLoadSkillMiji = 83, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcSaveSkillMiji = 84, //<2F><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
|
||||
dcSaveTongTianTaStoreItem = 85, //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD>(<28><><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
dcLoadTongTianTaStoreItem = 86, //<2F><>ȡͨ<C8A1><CDA8><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD>(<28><><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ)
|
||||
|
||||
dcSaveWing = 87, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcLoadWing = 88, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//dcLoadAllPet = 96, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
||||
//dcDeletePet = 97, // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcLoadPetBase = 98, // <20><><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcSavePetBase = 99, // <20><><EFBFBD>³<EFBFBD><C2B3><EFBFBD>
|
||||
|
||||
dcPetSkill = 100, // <20><><EFBFBD>\<EFBFBD><EFBCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//dcLoadPetGotType = 101, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
//dcAddPetGotType = 102, // <20><><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD>棩
|
||||
dcPetLoadEquip = 103, // <20><><EFBFBD>س<EFBFBD><D8B3><EFBFBD>װ<EFBFBD><D7B0>
|
||||
dcPetSaveEquip = 104, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
|
||||
dcClearActorDbCache = 105, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵĻ<D2B5><C4BB><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcAddEqSign = 106,//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
dcInheritEqSign = 107,//<2F>̳<EFBFBD><CCB3>滻<EFBFBD><E6BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
dcGetEqSignList = 108,//<2F><>ȡijװ<C4B3><D7B0><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
dcSaveOnceTime = 111, // <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>һ<EFBFBD>ε<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
|
||||
dcSaveRankVar = 112, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dcSetDataValid = 115, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Ա<EFBFBD>ʶ
|
||||
dcEnableCheckValid = 116, // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
||||
|
||||
dcLoadActorGuild = 117, //<2F><>ȡ<EFBFBD><C8A1>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
dcSaveMarryInfo = 118, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
dcLoadMarryInfo = 119, //<2F><><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
dcOfflineLogout = 120, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcOfflineDivorce = 121, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dcSaveCsWarVar = 122, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ר<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
||||
dcLoadCsWarVar = 123, //<2F><><EFBFBD>ؽ<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ר<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
||||
|
||||
dcActorCacheSave = 124,
|
||||
dcActorCacheLoad = 125,
|
||||
};
|
||||
|
||||
enum ConsignmentSysId
|
||||
{
|
||||
dcLoadConsignment = 1, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>еļ<D0B5><C4BC><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>Ϣ
|
||||
dcSaveConsignmentItem, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ,<2C><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcConsignmentCount, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum GuildMgrId
|
||||
{
|
||||
dcLoadGuildList = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcLoadGuildDetail, // <20><><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD>
|
||||
dcAddGuild, // <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD>
|
||||
dcDeleteGuild, // <20><>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD>
|
||||
dcSaveGuild, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>Ϣ
|
||||
dcLoadGuildMgrData, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
||||
dcLoadGuildDepot, // <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڲֿ<DAB2><D6BF><EFBFBD>Ʒ<EFBFBD><C6B7>Ϣ
|
||||
dcSaveGuildDepot, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲֿ<DAB2><D6BF><EFBFBD>Ʒ<EFBFBD><C6B7>Ϣ
|
||||
dcLoadBeastLog, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
dcAddBeastLog, // <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
dcDeleteBeastLog, // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
dcLoadGuildLog, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
||||
dcAddGuildLog, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
||||
dcDelGuildLog, // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
||||
dcLoadOneGuild, // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcGuildCount, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcSaveGuildVar, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>)
|
||||
dcLoadGuildVar, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>)
|
||||
dcSaveGuildChat, // <20><><EFBFBD>湫<EFBFBD><E6B9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
dcLoadGuildStore, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>¼
|
||||
dcSaveGuildStore, // <20><><EFBFBD>湫<EFBFBD><E6B9AB><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>¼
|
||||
};
|
||||
|
||||
enum AuctionId
|
||||
{
|
||||
dcAuctionAdd = 1,
|
||||
dcAuctionDel,
|
||||
dcAuctionUpdate,
|
||||
};
|
||||
|
||||
enum TopTitleId
|
||||
{
|
||||
dcLoadRank = 1, //<2F><>ȡ<EFBFBD>й<EFBFBD>ͷ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcLoadRankUser = 2, // <20>û<EFBFBD><C3BB><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD>
|
||||
dcLoadRankPet = 3, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD>
|
||||
dcRankUserCount, // <20>û<EFBFBD><C3BB><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
enum MsgMgrId
|
||||
{
|
||||
dcAddMsg = 1, //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
dcAddChat = 2, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Ϣ
|
||||
};
|
||||
enum MailMgrId
|
||||
{
|
||||
dcAddMail = 1, //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ʼ<EFBFBD>
|
||||
dcAddMailByActorName, // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
|
||||
dcAddMailByAccountName, // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ͨ<EFBFBD><CDA8>open id<69><64>
|
||||
};
|
||||
enum GlobalMgr
|
||||
{
|
||||
dcLoadBossKiller = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>boss<73>Ļ<EFBFBD>ɱ<EFBFBD><C9B1>
|
||||
dcSaveBossKiller,
|
||||
dcLoadMaster, // <20><>ȡ<EFBFBD><C8A1>Ԫ֮<D4AA><D6AE>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>Ϣ
|
||||
dcSaveMaster, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ֮<D4AA><D6AE>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>Ϣ
|
||||
dcGmCmd, // <20><><EFBFBD><EFBFBD>gm<67><6D><EFBFBD><EFBFBD> <20><>ʱ<EFBFBD>ĵ<EFBFBD>lua<75><61>ע<EFBFBD>ᣬ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢʱҪ<CAB1><D2AA>
|
||||
//dcAllActorBI, // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ݵ<EFBFBD>BIϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
||||
dcCheckVer, // <20><><EFBFBD><EFBFBD>gameworld<6C>İ汾<C4B0>Ƿ<EFBFBD><C7B7><EFBFBD>dbserverһ<72><D2BB>
|
||||
dcLoadMarry, // <20><>ȡȫ<C8A1><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcAddMarry, // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
|
||||
dcBattleFlag, // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>ȡgmcmd<6D><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dcAddQuestion = 10, //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcLoadQuestions, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcLoadQuestion, //<2F><>ȡijһ<C4B3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dcUpdateQuestion, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ķ<EFBFBD>
|
||||
|
||||
dcAddBug = 14, //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>bug
|
||||
dcLoadGoldRank, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dcAddGameServerInfo, //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>gameworld<6C><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
};
|
||||
enum FightRankId
|
||||
{
|
||||
dcLoadFightRank = 1, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
dcSaveFightRank, // <20><><EFBFBD>澺<EFBFBD><E6BEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
};
|
||||
|
||||
enum SysVarMgrId
|
||||
{
|
||||
dcAddSysVar = 1,
|
||||
dcLoadSysVar,
|
||||
dcUpdateSysVar,
|
||||
dcSysVarCount,
|
||||
};
|
||||
|
||||
|
||||
enum configType
|
||||
{
|
||||
ctLoadGiftItem = 1, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ctLoadGiftConfig = 2, //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// ͨ<>ŵĴ<C5B5><C4B4><EFBFBD><EFBFBD>붨<EFBFBD><EBB6A8>
|
||||
enum tagResultError
|
||||
{
|
||||
reSucc = 0,
|
||||
reDbErr, //<2F><><EFBFBD>ݿ<EFBFBD>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>
|
||||
reNoActor, //û<>иý<D0B8>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
reSaveErr, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
reNoLoad, //<2F><>û<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
reDbNotConnected, //DB<44><42><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
|
||||
reParamError, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
reNameError, //<2F><><EFBFBD>ֲ<EFBFBD><D6B2>Ϸ<EFBFBD>
|
||||
reNameInUse, //<2F><><EFBFBD>ֱ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
reTimeOut, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
||||
reInterErr, //<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// ս<><D5BD><EFBFBD><EFBFBD>ϢID
|
||||
enum WarTeamSysId
|
||||
{
|
||||
dcLoadWarTeam = 0,
|
||||
dcAddWarTeam,
|
||||
dcDelWarTeam,
|
||||
dcUpdateWarTeam,
|
||||
dcLoadWarTeamMember,
|
||||
dcAddWarTeamMember,
|
||||
dcDelWarTeamMember,
|
||||
dcUpdateWarTeamMember,
|
||||
dcLoadOneWarTeam, // <20><>ȡһ<C8A1><D2BB>ս<EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>Ϣ
|
||||
dcWarTeamCount, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ص<EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum TxApiMsg
|
||||
{
|
||||
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
sFeeCallBack = 1,
|
||||
// <20><>Ѷapi<70><69><EFBFBD><EFBFBD>
|
||||
sTxApiMsg = 2,
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
|
||||
sUpdateIdentity = 4,
|
||||
|
||||
// <20>رջ<D8B1><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>ϵͳ
|
||||
sCloseGamble = 5,
|
||||
|
||||
// <20>û<EFBFBD><C3BB><EFBFBD>ֵ<EFBFBD><D6B5>ȡtoken
|
||||
sChargeToken = 6,
|
||||
// <20><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD>ȡtoken
|
||||
sGetToken = 7,
|
||||
|
||||
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD>к<EFBFBD>
|
||||
sAddValueCard = 8,
|
||||
// <20><>ѯ<EFBFBD><D1AF>ֵ<EFBFBD><D6B5>
|
||||
sQueryAddValueCard = 9,
|
||||
// <20><>ѯԪ<D1AF><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sQueryYuanbaoCount = 10,
|
||||
// <20><>ȡԪ<C8A1><D4AA>
|
||||
sWithdrawYuanbao = 11,
|
||||
// <20><><EFBFBD>͵<EFBFBD>½<EFBFBD><C2BD>key
|
||||
sLoginKey = 12,
|
||||
};
|
||||
|
||||
enum CommonDBMsg
|
||||
{
|
||||
dcDBExec = 1, // ִ<><D6B4>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum TradingMgrId
|
||||
{
|
||||
dcAddTrading = 1,
|
||||
dcUpdateTrading,
|
||||
dcDelTrading,
|
||||
};
|
||||
}
|
||||
|
||||
namespace AsyncOperatorCode
|
||||
{
|
||||
enum tagAsyncOpError
|
||||
{
|
||||
soeSucc = 0, // <20>ɹ<EFBFBD>
|
||||
soeDBErr, // dbִ<62>д<EFBFBD><D0B4><EFBFBD><F3A3A8BB><EFBFBD>db<64><EFBFBD><DEB7><EFBFBD><EFBFBD>ӣ<EFBFBD>
|
||||
soeNoCardInfo, // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ˿<DAB4><CBBF><EFBFBD>Ϣ
|
||||
soeTimeExpired, // <20><>ѯ<EFBFBD><D1AF>ʱ
|
||||
};
|
||||
}
|
||||
|
||||
// gameworld֮<64><D6AE>ͨ<EFBFBD>ŵ<EFBFBD>Э<EFBFBD><D0AD>
|
||||
namespace GameWorldProto
|
||||
{
|
||||
enum GwP
|
||||
{
|
||||
gpRegReq = 1, // ע<><D7A2><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>serverid
|
||||
gpRegResp = 2,
|
||||
|
||||
gpKeyReq = 3, // <20><><EFBFBD><EFBFBD>key<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻظ<CDBB>
|
||||
gpKeyResp = 4,
|
||||
|
||||
gpUserLogin = 5, // <20>㲥<EFBFBD><E3B2A5><EFBFBD>ҵ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD>Ϣ
|
||||
gpBatchOnline = 6, // ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ϣ
|
||||
gpUserExit = 7, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
gpCloseUser = 8, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
gpGateway = 9, // ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Ϣ
|
||||
gpTtData = 10, // ת<><D7AA>Э<EFBFBD><D0AD>
|
||||
gpSsData = 11, // C++<2B><><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><DFBC><EFBFBD>Ϣ
|
||||
gpLfData = 12, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>Ϣ
|
||||
// <20><><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Ϣ
|
||||
gpCommonMsg, // <20><>Ϸ<EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Ϣ
|
||||
gpCrossRelogin, // ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>¼
|
||||
};
|
||||
|
||||
enum LfSysType {
|
||||
lsDefault = 0,
|
||||
lsGuild,
|
||||
lsRank,
|
||||
};
|
||||
|
||||
enum SSP
|
||||
{
|
||||
stBroadCast, //<2F>㲥
|
||||
stRankList, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0>б<EFBFBD>
|
||||
stUserLogin, //<2F><><EFBFBD>ҵ<EFBFBD>¼
|
||||
stUserLogout, //<2F><><EFBFBD>ҵdz<D2B5>
|
||||
stBatchOnline, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>¼<EFBFBD><C2BC>Ϣ)
|
||||
|
||||
//stRecvMail, //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD> todo luaʵ<61><CAB5>
|
||||
stKickUser, //<2F>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//stRecvOfflineMsg, //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ todo luaʵ<61><CAB5>
|
||||
|
||||
stNormalMax = 100, //<2F><><EFBFBD>濪ʼ<E6BFAA>ǽű<C7BD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
};
|
||||
|
||||
enum LfGuildCmd {
|
||||
lcGuildList, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
lcGuildUnion, // <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>
|
||||
lcGuildDelUnion, //
|
||||
lcCreateGuild, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcDelGuild, // ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcUpdateGuild, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
lcDelGuildMem, //
|
||||
lcAddGuildMem, //
|
||||
lcGuildBroadCast, // <20><><EFBFBD>ڹ㲥
|
||||
lcUpGuildMemInfo, //
|
||||
lcGuildOnline, // <20><>ͨ<EFBFBD><CDA8>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
lcGuildLeaderInfo, //<2F><><EFBFBD>Ͱ<EFBFBD><CDB0><EFBFBD><EFBFBD><EFBFBD>һЩ<D2BB><D0A9>Ϣ
|
||||
lcAddItemToDepot, //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>ֿ<EFBFBD>
|
||||
lcAddGuildLog, //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>
|
||||
lcSendFightVal, //<2F><><EFBFBD>Ͱ<EFBFBD><CDB0><EFBFBD>ս<EFBFBD><D5BD>
|
||||
lcChangePos, //<2F>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>ְλ
|
||||
lcDepotAvailible, //<2F><><EFBFBD>ɲֿ<C9B2>ʣ<EFBFBD><CAA3>λ<EFBFBD><CEBB>
|
||||
lcImpeach, //<2F><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum LfRankCmd {
|
||||
lcRankList = 0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0>б<EFBFBD>
|
||||
lcRankTitle = 1, //<2F><><EFBFBD><EFBFBD>֪ͨ<CDA8><EFBFBD><DEB8><EFBFBD><EFBFBD>а<EFBFBD><D0B0>ƺ<EFBFBD>
|
||||
};
|
||||
};
|
||||
// gameworld <20><> centerserver ֮<><D6AE><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>Э<EFBFBD><D0AD>
|
||||
namespace CenterProto
|
||||
{
|
||||
enum CWP
|
||||
{
|
||||
cwComm = 1, // ֱ<><D6B1>ת<EFBFBD><D7AA><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
||||
cwActorOnline = 2, //<2F><>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cwActorServer = 3, //<2F><><EFBFBD><EFBFBD>actorid<69><64><EFBFBD>͵<EFBFBD>actorid<69><64><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD>
|
||||
cwActorServerInfo = 4, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
struct ActorOnline
|
||||
{
|
||||
int actorid_;
|
||||
int sid_;
|
||||
|
||||
inline bool operator != (const ActorOnline& data) const
|
||||
{
|
||||
return actorid_ != data.actorid_;
|
||||
}
|
||||
inline bool operator > (const ActorOnline& data) const
|
||||
{
|
||||
return actorid_ > data.actorid_;
|
||||
}
|
||||
inline bool operator < (const ActorOnline& data) const
|
||||
{
|
||||
return actorid_ < data.actorid_;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
10
Gateway/common/common.h
Normal file
10
Gateway/common/common.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#include <cstring>
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <map>
|
||||
|
||||
#include "server_def.h"
|
||||
#include "share_util.h"
|
||||
#include "data_packet.hpp"
|
||||
#include "container/static_hash_table.h"
|
||||
57
Gateway/common/common/datalist.h
Normal file
57
Gateway/common/common/datalist.h
Normal file
@@ -0,0 +1,57 @@
|
||||
#ifndef _CONFIG_DATA_DEF_H_
|
||||
#define _CONFIG_DATA_DEF_H_
|
||||
|
||||
//<2F><><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һЩ<D2BB><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>һЩ<D2BB><D0A9><EFBFBD><EFBFBD>
|
||||
template <class T>
|
||||
struct DataList
|
||||
{
|
||||
DataList<T>()
|
||||
{
|
||||
data_ = NULL;
|
||||
count_ = 0;
|
||||
}
|
||||
T* data_;
|
||||
int count_;
|
||||
//inline operator T* () const { return data_; }
|
||||
inline T* GetDataPtr(int nIndex)
|
||||
{
|
||||
if (data_ && nIndex >= 0 && nIndex < count_)
|
||||
{
|
||||
return data_ + nIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <class T, int MAX_NUM = 16>
|
||||
struct StaticDataList
|
||||
{
|
||||
StaticDataList<T, MAX_NUM>()
|
||||
{
|
||||
count_ = 0;
|
||||
}
|
||||
~StaticDataList(){
|
||||
count_ = 0;
|
||||
}
|
||||
T data_[MAX_NUM];
|
||||
int count_;
|
||||
//inline operator T* () const { return data_; }
|
||||
inline T* GetDataPtr(int nIndex)
|
||||
{
|
||||
if (nIndex >= 0 && nIndex < count_ && nIndex < MAX_NUM)
|
||||
{
|
||||
return &data_[nIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
76
Gateway/common/common/gem_def.h
Normal file
76
Gateway/common/common/gem_def.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#ifndef _GEM_DEF_H_
|
||||
#define _GEM_DEF_H_
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
#define MAX_SPIRIT_SKILL 8
|
||||
#define MAX_SPIRIT_COUNT 5
|
||||
#define MAX_SPIRIT_SLOT 8
|
||||
|
||||
// <20>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#pragma pack( push, 1 )
|
||||
struct SoulPropData {
|
||||
uint8_t type; // <20><><EFBFBD><EFBFBD>
|
||||
uint8_t quality; // Ʒ<><C6B7>
|
||||
uint8_t level; // <20>ȼ<EFBFBD>
|
||||
int expr; // <20><><EFBFBD><EFBFBD>
|
||||
uint8_t lock; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
struct SpiritSoul
|
||||
{
|
||||
enum Type { tGem = 0, tHunt = 1 }; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD>
|
||||
int id; // ϵͳ<CFB5><CDB3><EFBFBD>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
||||
SoulPropData prop_data; // <20>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct GemInfo
|
||||
{
|
||||
int state; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int level; // <20><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
int expr; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int score; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
struct GemGuard
|
||||
{
|
||||
int type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int level; //<2F><><EFBFBD>̵ȼ<CCB5>
|
||||
int expr; //<2F><><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>
|
||||
|
||||
GemGuard()
|
||||
{
|
||||
type = 0;
|
||||
level = 0;
|
||||
expr = 0;
|
||||
}
|
||||
|
||||
GemGuard(int type, int level = 1, int expr = 0)
|
||||
{
|
||||
this->type = type;
|
||||
this->level = level;
|
||||
this->expr = expr;
|
||||
}
|
||||
};
|
||||
|
||||
struct SpiritRankData
|
||||
{
|
||||
int level_; //<2F><><EFBFBD>ѵȼ<D1B5>
|
||||
int model_id_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int max_slot_cnt_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
int spirit_cnt_; //Ԫ<>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
int slot_cnt_[MAX_SPIRIT_COUNT];
|
||||
SpiritSoul spirit_[MAX_SPIRIT_COUNT][MAX_SPIRIT_SLOT];
|
||||
int skill_cnt_; //<2F><><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD>
|
||||
BaseSkillData skill_list_[MAX_SPIRIT_SKILL];
|
||||
};
|
||||
|
||||
#pragma pack( pop )
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
164
Gateway/common/common/property_id_def.h
Normal file
164
Gateway/common/common/property_id_def.h
Normal file
@@ -0,0 +1,164 @@
|
||||
#ifndef _PROPERTY_ID_DEF_H_
|
||||
#define _PROPERTY_ID_DEF_H_
|
||||
|
||||
///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﶨ<EFBFBD><EFB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>ID<49><44><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>õ<EFBFBD>,ͨ<><CDA8>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>id<69><64><EFBFBD>Ի<EFBFBD>ȡʵ<C8A1><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//tolua_begin
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
enum enPropEntity
|
||||
{
|
||||
P_ID = 0, // ʵ<><CAB5><EFBFBD><EFBFBD>id
|
||||
P_POS_X , // λ<><CEBB> posx
|
||||
P_POS_Y , // λ<><CEBB>pos y
|
||||
P_MODELID, // ʵ<><CAB5><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>ID
|
||||
P_ICON, // ͷ<><CDB7>ID
|
||||
P_DIR, // ʵ<><CAB5><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
P_MAX_ENTITY,
|
||||
};
|
||||
|
||||
enum enPropCreature
|
||||
{
|
||||
P_LEVEL = P_MAX_ENTITY, // <20>ȼ<EFBFBD>
|
||||
P_HP , //Ѫ
|
||||
P_MP , //<2F><>
|
||||
P_SPEED, //<2F>ƶ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC>λms
|
||||
P_MAXHP, //<2F><><EFBFBD><EFBFBD>Ѫ<EFBFBD><D1AA>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_MAXMP,//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_OUT_ATTACK, //<2F><EFBFBD><E2B9A6><EFBFBD><EFBFBD>
|
||||
P_OUT_DEFENCE,//<2F><EFBFBD><E2B9A6><EFBFBD><EFBFBD>
|
||||
P_DEFCRITICALSTRIKES,//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
P_ALL_ATTACK, // <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_SUB_DEF, // <20><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
|
||||
P_IN_ATTACK,//<2F>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_IN_DEFENCE,//<2F>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
P_CRITICALSTRIKES, // <20><><EFBFBD><EFBFBD>ֵ
|
||||
P_DODGERATE, // <20><><EFBFBD><EFBFBD>ֵ
|
||||
P_HITRATE, // <20><><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
P_ATTACK_ADD, // <20>˺<EFBFBD><EFBFBD><D7B7>
|
||||
P_HP_RENEW,//HP<48>ָ<EFBFBD>
|
||||
P_MP_RENEW,//MP<4D>ָ<EFBFBD>
|
||||
P_ATTACK_SPEED, //<2F><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
|
||||
P_IN_ATTACK_DAMAGE_ADD, // <20><><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
P_OUT_ATTACK_DAMAGE_ADD, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
|
||||
P_THUNDER_ATTACK, //<2F><EFBFBD>
|
||||
P_THUNDER_DEFENCE, //<2F><EFBFBD>
|
||||
P_POISON_ATTACK, //<2F><><EFBFBD><EFBFBD>
|
||||
P_POISON_DEFENCE, //<2F><><EFBFBD><EFBFBD>
|
||||
P_ICE_ATTACK, //<2F><><EFBFBD><EFBFBD>
|
||||
P_ICE_DEFENCE, //<2F><><EFBFBD><EFBFBD>
|
||||
P_FIRE_ATTACK, //<2F><><EFBFBD><EFBFBD>
|
||||
P_FIRE_DEFENCE, //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
P_STATE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD>
|
||||
|
||||
P_BASE_MAXHP, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѫ,<2C>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MaxHp,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>buff<66><66>װ<EFBFBD><D7B0><EFBFBD>ȸ<EFBFBD><C8B8>ӵ<EFBFBD>
|
||||
P_BASE_MAXMP, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MaxMp,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>buff<66><66>װ<EFBFBD><D7B0><EFBFBD>ȸ<EFBFBD><C8B8>ӵ<EFBFBD>
|
||||
|
||||
P_STAND_POINT, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ȵĿ<C8B5><C4BF>Ի<EFBFBD><D4BB><EFBFBD><E0B9A5>
|
||||
|
||||
P_RESEVS0, //<2F><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
|
||||
P_RESEVS1, //<2F><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
|
||||
|
||||
P_MAX_CREATURE, //
|
||||
};
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enum enPropMonster
|
||||
{
|
||||
P_MONSTER_START = P_MAX_CREATURE,
|
||||
P_BORNPOINT = P_MONSTER_START, // <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>ã<EFBFBD>
|
||||
P_LEVEL_DIFF, // <20><><EFBFBD><EFBFBD>
|
||||
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_PET_TITLE, // <20><><EFBFBD><EFBFBD><EFBFBD>ijƺţ<C6BA><C5A3><EFBFBD>2λ<32>ǵȽ׳ƺţ<C6BA><C5A3><EFBFBD>2λ<32><CEBB><EFBFBD>׳ƺţ<C6BA><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFA3AC>Ϊ0
|
||||
P_PET_COLOR,
|
||||
P_PET_RANK_TITLE,
|
||||
P_MAX_MONSTER,
|
||||
};
|
||||
|
||||
enum enPropActor
|
||||
{
|
||||
P_WEAPON = P_MAX_CREATURE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_MOUNT, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_DIZZY_RATE11, // <20><>2Ϊ<32><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>,<2C><>2λ<32>Ƿ<EFBFBD><C7B7><EFBFBD>ѣ<EFBFBD><D1A3><EFBFBD><EFBFBD>(ȡ<><C8A1>
|
||||
P_DIZZY_TIME1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD><D1A3>ʱ<EFBFBD>䣨ȡ<E4A3A8><C8A1><EFBFBD><EFBFBD>
|
||||
P_HP_STORE, //hp<68><70><EFBFBD><EFBFBD>
|
||||
P_MP_STORE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>hp<68><70><EFBFBD><EFBFBD>(<28><>:mp<6D><70><EFBFBD><EFBFBD>)
|
||||
P_SPIRIT, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||
P_PK_MOD, //<2F><><EFBFBD>ҵ<EFBFBD>PKģʽ
|
||||
P_STRONG_EFFECT, //ǿ<><C7BF><EFBFBD><EFBFBD>Ч
|
||||
P_WING, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
||||
P_STAGE_EFFECT, //Ʒ<><C6B7><EFBFBD><EFBFBD>Ч
|
||||
|
||||
P_PET_HP_STORE, // <20><><EFBFBD><EFBFBD>ҩ<EFBFBD><D2A9>
|
||||
PROP_ACTOR_XIUWEI_RENEW_RATE, //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ϊ<EFBFBD>Ļָ<C4BB><D6B8>ٶ<EFBFBD>(ȡ<><C8A1><EFBFBD><EFBFBD>
|
||||
|
||||
P_SEX , //<2F>Ա<EFBFBD>
|
||||
P_VOCATION , //ְҵ
|
||||
P_EXP , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ֽ<EFBFBD>,uint64<36><34>
|
||||
P_PK_VALUE = P_EXP + 2, //<2F><><EFBFBD>ҵ<EFBFBD>pkֵ(ɱ¾ֵ)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
||||
P_BAG_GRID, //<2F><><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_WEEK_CHARM, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
P_BIND_COIN, //<2F><EFBFBD>Ǯ
|
||||
P_COIN, //<2F>ǰ<C7B0>Ǯ
|
||||
P_BIND_YB, //<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
P_YB, //<2F>ǰ<EFBFBD><C7B0><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
P_SHENGWANG, //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_CHARM, //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>еĽ<D0B5>˧<EFBFBD><CBA7>ֵ<EFBFBD><D6B5>Ů<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
P_SPIRIT_SLOT, //<2F><><EFBFBD>↑ͨ<EFBFAA>IJ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ŀ(ò<><C3B2>û<EFBFBD>ã<EFBFBD>
|
||||
P_RENOWN, //<2F><><EFBFBD><EFBFBD>
|
||||
P_GUILD_ID , //<2F><><EFBFBD>ɵ<EFBFBD>ID
|
||||
P_TEAM_ID, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
||||
P_SOCIAL,// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>mask<73><6B><EFBFBD><EFBFBD>һЩbitλ<74><CEBB><EFBFBD>õ<EFBFBD>
|
||||
P_GUILD_EXP, //<2F><><EFBFBD>ṱ<EFBFBD><EFBFBD>
|
||||
P_LUCKY, //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
P_SYS_OPEN, // <20><><EFBFBD><EFBFBD>ϵͳ<CFB5>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_ROOT_EXP_POWER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||
P_CHANGE_MODEL, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
PROP_BANGBANGTANG_EXP, ////<2F><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>(<28><EFBFBD><E2B9A6>Ӧ<EFBFBD><D3A6>û<EFBFBD><C3BB><EFBFBD>ˣ<EFBFBD>
|
||||
|
||||
PROP_ACTOR_MAX_EXP, //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬64λ<34><CEBB>(ò<><C3B2><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
||||
P_GIVE_YB = PROP_ACTOR_MAX_EXP + 2, //Ԫ<><D4AA><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
P_CRITICAL_STRIKE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA>ٷֱ<D9B7>
|
||||
P_EXP_RATE, //<2F><><EFBFBD>Ҿ<EFBFBD><D2BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
|
||||
|
||||
P_DEPOT_GRID, // <20>ֿ<EFBFBD><D6BF><EFBFBD><F2BFAAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_ANGER, // ŭ<><C5AD>ֵ
|
||||
P_ROOT_EXP, // <20><><EFBFBD><EFBFBD>ֵ
|
||||
P_ACHIEVEPOINT, //<2F><><EFBFBD>ɵijɾ<C9BE><CDB8><EFBFBD>(<28><><EFBFBD>а<EFBFBD>)
|
||||
P_ZYCONT,//<2F><>Ӫ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>(<28><>Ҫֱ<D2AA><D6B1><EFBFBD>ģ<DEB8><C4A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Actor<6F>Ľӿ<C4BD>ChangeZYCount<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
P_QQ_VIP, // vip<69><70>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||||
P_WING_ID, // <20><><EFBFBD><EFBFBD>id
|
||||
P_WING_SCORE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
P_PET_SCORE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PROP_ACTOR_VIPFLAG, // VIP<49><50>ͨ<EFBFBD><CDA8><EFBFBD>ǣ<EFBFBD>ͨ<EFBFBD><CDA8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>VIP<49><50><EFBFBD>͡<EFBFBD>enVIPType<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>VIP<49><50><EFBFBD>ͣ<EFBFBD><CDA3>ֱ<EFBFBD><D6B1><EFBFBD>Ӧ0-2λ<32><CEBB><EFBFBD>롣(<28><><EFBFBD><EFBFBD>û<EFBFBD>ã<EFBFBD>
|
||||
P_CAMP, //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӫ 1<><31>ң<EFBFBD><D2A3>2<EFBFBD>dz<EFBFBD><C7B3><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>
|
||||
P_PET_SLOT, //<2F><><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
P_HONOR, //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
P_QING_YUAN, //<2F><>Եֵ
|
||||
PROP_ACTOR_DUR_KILLTIMES, //<2F><>ն<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
PROP_ACTOR_BASE_FIGHT, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õľ<C3B5><C4BE>飨ȡ<E9A3A8><C8A1><EFBFBD><EFBFBD>
|
||||
P_FIGHT_VALUE, //ս<><D5BD><EFBFBD><EFBFBD>
|
||||
P_MAX_RENOWN, //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
P_RECHARGE, // <20><><EFBFBD>ҳ<EFBFBD>ֵ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
|
||||
P_VIP_LEVEL, // <20><><EFBFBD>ҵ<EFBFBD>ͷ<EFBFBD><CDB7>,<2C><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>Σ<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ0<CEAA><30>ȡ<EFBFBD><C8A1>
|
||||
P_BEAST_LEVEL, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD><DAB0>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<DEB5>(ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>PROP_FOOT_EFFECT)
|
||||
P_FOOT_EFFECT, // <20>㼣
|
||||
P_EQUIP_SCORE, //<2F><><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD>
|
||||
P_HAIR_MODEL, //ʱװñ<D7B0><C3B1><EFBFBD><EFBFBD>
|
||||
P_BUBBLE, // <20><><EFBFBD><EFBFBD>
|
||||
P_ACTOR_STATE, //<2F><><EFBFBD>ҵ<EFBFBD>״̬
|
||||
P_JINGJIE_TITLE, //<2F><><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD>
|
||||
P_ZHUMOBI, //<2F><>ħ<EFBFBD><C4A7>
|
||||
|
||||
P_MAX_ACTOR,
|
||||
};
|
||||
//tolua_end
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
306
Gateway/common/common/property_set.h
Normal file
306
Gateway/common/common/property_set.h
Normal file
@@ -0,0 +1,306 @@
|
||||
#ifndef _PROPERTY_SET_H_
|
||||
#define _PROPERTY_SET_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "property_id_def.h"
|
||||
|
||||
#pragma pack(4)
|
||||
|
||||
// <20><>ʱ֧<CAB1><D6A7>32*8<><38><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>255<35><35><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD> <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>uint8_t<5F><74>ʾ<EFBFBD><CABE><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
static const unsigned int MAX_BYTE = 32;
|
||||
static char s_forbit_mask[MAX_BYTE] = {};
|
||||
|
||||
class UpdateMask
|
||||
{
|
||||
public:
|
||||
UpdateMask(): used_count_(0), mask_count_(0)
|
||||
{
|
||||
memset(lock_, 0, sizeof(lock_));
|
||||
clear();
|
||||
}
|
||||
|
||||
inline void clear()
|
||||
{
|
||||
memset(mask_, 0, sizeof(mask_));
|
||||
used_count_ = 0;
|
||||
mask_count_ = 0;
|
||||
}
|
||||
|
||||
inline UpdateMask& operator &= (UpdateMask& mask)
|
||||
{
|
||||
int count = __max(used_count_, mask.count());
|
||||
|
||||
if (count == 0) return *this;
|
||||
|
||||
int max_count = 0;
|
||||
unsigned char* s = mask;
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
mask_[i] &= s[i];
|
||||
|
||||
if (mask_[i]) max_count = i + 1;
|
||||
}
|
||||
|
||||
used_count_ = max_count;
|
||||
mask_count_ = 0;
|
||||
int total = used_count_ << 3;
|
||||
|
||||
for (int i = 0; i < total; ++i)
|
||||
{
|
||||
if (IsMask(i)) ++mask_count_;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*
|
||||
*<2A><><EFBFBD>õ<EFBFBD>nPos<6F><73>int<6E>Ƿ<EFBFBD><C7B7>Ĺ<DEB8>
|
||||
* nPos <20>ڼ<EFBFBD><DABC><EFBFBD>4<EFBFBD>ֽ<EFBFBD>
|
||||
* flag flag=true<75><65>ʾ<EFBFBD>Ĺ<DEB8>,<2C><><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<DEB8><C4B1><EFBFBD>
|
||||
*/
|
||||
inline void SetMask(int pos/*, bool flag = true*/)
|
||||
{
|
||||
if (IsForbid(pos)) return; // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned int bit_pos = pos & 7;
|
||||
unsigned int byte_pos = pos >> 3;
|
||||
|
||||
if (byte_pos >= MAX_BYTE) return;
|
||||
|
||||
unsigned char value = 1 << bit_pos;
|
||||
//if (flag)
|
||||
{
|
||||
if (!(mask_[byte_pos] & value)) ++mask_count_;
|
||||
|
||||
mask_[byte_pos] |= value;
|
||||
}
|
||||
|
||||
//else
|
||||
//{
|
||||
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>masked<65><64>mask_countҪ<74><D2AA>һ
|
||||
// if (mask_[byte_pos] & value){ assert(mask_count_ > 0);--mask_count_;}
|
||||
// value = ~value;
|
||||
// mask_[byte_pos] &= value;
|
||||
//}
|
||||
if (used_count_ <= byte_pos)
|
||||
used_count_ = byte_pos + 1;
|
||||
}
|
||||
|
||||
//<2F><>nPos<6F><73>int<6E>Ƿ<EFBFBD><C7B7>Ĺ<DEB8>
|
||||
inline bool IsMask(int pos)
|
||||
{
|
||||
unsigned int bit_pos = pos & 7;
|
||||
unsigned int byte_pos = pos >> 3;
|
||||
|
||||
if (byte_pos >= MAX_BYTE) return false;
|
||||
|
||||
unsigned char value = 1 << bit_pos;
|
||||
return mask_[byte_pos] & value ? true : false;
|
||||
}
|
||||
|
||||
inline unsigned int count()
|
||||
{
|
||||
return used_count_;
|
||||
}
|
||||
inline unsigned int MaskCount()
|
||||
{
|
||||
return mask_count_;
|
||||
}
|
||||
|
||||
inline operator unsigned char* ()
|
||||
{
|
||||
return mask_;
|
||||
}
|
||||
|
||||
static void SetArrayBit(char* arr, int pos, bool flag)
|
||||
{
|
||||
unsigned int bit_pos = pos & 7;
|
||||
unsigned int byte_pos = pos >> 3;
|
||||
|
||||
if (byte_pos >= MAX_BYTE) return;
|
||||
|
||||
unsigned char value = 1 << bit_pos;
|
||||
|
||||
if (flag) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
arr[byte_pos] |= value;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = ~value; //ȡ<><C8A1>
|
||||
arr[byte_pos] &= value; //<2F><>λ<EFBFBD><CEBB>
|
||||
}
|
||||
}
|
||||
|
||||
static bool IsArrayBit(char* arr, int pos)
|
||||
{
|
||||
unsigned int bit_pos = pos & 7;
|
||||
unsigned int byte_pos = pos >> 3;
|
||||
|
||||
if (byte_pos >= MAX_BYTE) return false;
|
||||
|
||||
unsigned char value = 1 << bit_pos;
|
||||
return arr[byte_pos] & value ? true : false;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD>ý<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>Ե<EFBFBD>λ
|
||||
static void SetForbid(int pos, bool flag)
|
||||
{
|
||||
SetArrayBit(s_forbit_mask, pos, flag);
|
||||
}
|
||||
|
||||
//ij<><C4B3>λ<EFBFBD><CEBB><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
inline bool IsForbid(int pos)
|
||||
{
|
||||
return IsArrayBit(s_forbit_mask, pos);
|
||||
}
|
||||
|
||||
inline bool IsLock(int pos)
|
||||
{
|
||||
return IsArrayBit(lock_, pos);
|
||||
}
|
||||
|
||||
void Lock(int pos)
|
||||
{
|
||||
SetArrayBit(lock_, pos, true);
|
||||
}
|
||||
void UnLock(int pos)
|
||||
{
|
||||
SetArrayBit(lock_, pos, false);
|
||||
}
|
||||
|
||||
static void Init()
|
||||
{
|
||||
memset(s_forbit_mask, 0 , sizeof(s_forbit_mask));
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
unsigned char mask_[MAX_BYTE]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mask<73>Ĵ洢<C4B4>ط<EFBFBD>
|
||||
|
||||
unsigned int used_count_; //<2F>Ѿ<EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
|
||||
unsigned int mask_count_;
|
||||
|
||||
char lock_[MAX_BYTE]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
};
|
||||
|
||||
//ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>mask<73><6B>¼<EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>int<6E><74>ֵ<EFBFBD>Ĺ<DEB8>
|
||||
class PropertySet:
|
||||
public UpdateMask
|
||||
{
|
||||
public:
|
||||
PropertySet() {}
|
||||
|
||||
template<typename T>
|
||||
inline bool set(int pid, const T& value)
|
||||
{
|
||||
if (IsLock(pid)) return false;
|
||||
|
||||
T* pos = (T*)ptr(pid);
|
||||
|
||||
if (*pos == value) return false; //û<>ı<EFBFBD>
|
||||
int offset = (int)((char*)pos - (char*)this - sizeof(UpdateMask)); //ƫ<><C6AB><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
|
||||
if (offset < 0) return false;
|
||||
|
||||
*pos = value; //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
if (offset > 0) offset = offset >> 2;
|
||||
|
||||
int size = sizeof(T);
|
||||
size = __max(size >> 2, 1); //<2F><><EFBFBD>ٸ<EFBFBD>4<EFBFBD>ֽ<EFBFBD>
|
||||
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
SetMask(offset + i);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>nPos<6F><73>int<6E><74>ָ<EFBFBD><D6B8>
|
||||
inline const char* ptr(int pos) const
|
||||
{
|
||||
const char* ptr = (const char*)this + sizeof(UpdateMask) + (pos << 2);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ַ
|
||||
inline const char* ptr() const
|
||||
{
|
||||
return (const char*)this + sizeof(UpdateMask);
|
||||
}
|
||||
|
||||
template < class T>
|
||||
inline T GetProperty(int pos) const
|
||||
{
|
||||
return *(T*)this->ptr(pos);
|
||||
}
|
||||
|
||||
template < class T>
|
||||
inline void SetProperty(int pos, const T& value)
|
||||
{
|
||||
if (IsLock(pos)) return;
|
||||
|
||||
T oldValue = GetProperty<T>(pos);
|
||||
|
||||
if (oldValue == value) return;
|
||||
|
||||
this->set(pos, value);
|
||||
}
|
||||
|
||||
// d<><64>true<75><65>ʾ<EFBFBD><CABE>ȡ8<C8A1>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>϶<EFBFBD><CFB6><EFBFBD>4<EFBFBD>ֽڣ<D6BD>int<6E><74>float<61><74><EFBFBD>͵ij<CDB5><C4B3>ȣ<EFBFBD>
|
||||
inline void set(int pos, PropertySet* set, bool d)
|
||||
{
|
||||
memcpy((char*)(this->ptr(pos)), set->ptr(pos), d ? 8 : 4);
|
||||
}
|
||||
};
|
||||
|
||||
class EntityProperty:
|
||||
public PropertySet
|
||||
{
|
||||
public:
|
||||
int data_[P_MAX_ENTITY];
|
||||
EntityProperty()
|
||||
{
|
||||
memset(this, 0, sizeof(EntityProperty));
|
||||
}
|
||||
};
|
||||
|
||||
STATIC_ASSERT((P_MAX_ENTITY - P_ID) == (sizeof(EntityProperty) - sizeof(PropertySet)) / sizeof(int));
|
||||
|
||||
//<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>Լ<EFBFBD>,<2C><><EFBFBD><EFBFBD> <20><><EFBFBD>ҵ<EFBFBD>db<64><62><EFBFBD><EFBFBD>,1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
class ActorProperty:
|
||||
public PropertySet
|
||||
{
|
||||
public:
|
||||
int data_[P_MAX_ACTOR];
|
||||
ActorProperty()
|
||||
{
|
||||
memset(this, 0, sizeof(ActorProperty));
|
||||
}
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ĺ<DEB8>ActorProperty<74>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ӧ<EFBFBD><D3A6><EFBFBD>ij<DEB8><C4B3>µ<EFBFBD>PROP_MAX_ACTOR<4F><52>ֵ<EFBFBD><D6B5>ͬʱ֪<CAB1><D6AA><EFBFBD>ͻ<EFBFBD><CDBB>˳<EFBFBD><CBB3><EFBFBD>
|
||||
STATIC_ASSERT((sizeof(ActorProperty) - sizeof(UpdateMask)) / sizeof(int) == P_MAX_ACTOR);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
class MonsterProperty:
|
||||
public PropertySet
|
||||
{
|
||||
public:
|
||||
int data_[P_MAX_MONSTER];
|
||||
MonsterProperty()
|
||||
{
|
||||
memset(this, 0, sizeof(MonsterProperty));
|
||||
}
|
||||
};
|
||||
|
||||
STATIC_ASSERT((sizeof(MonsterProperty) - sizeof(UpdateMask)) / sizeof(int) == P_MAX_MONSTER);
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
|
||||
1111
Gateway/common/common/system_param_def.h
Normal file
1111
Gateway/common/common/system_param_def.h
Normal file
File diff suppressed because it is too large
Load Diff
42
Gateway/common/db/achieve_data.h
Normal file
42
Gateway/common/db/achieve_data.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef _ACHIEVE_DATA_H_
|
||||
#define _ACHIEVE_DATA_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "skill_data.h"
|
||||
#include "common/datalist.h"
|
||||
|
||||
|
||||
// <20>ƺŵĴ洢<C4B4><E6B4A2>BYTE<54><45><EFBFBD><EFBFBD>
|
||||
#define MAX_TITLE_DATA_SIZE 32
|
||||
// <20>ɾʹ洢һ<E6B4A2><D2BB>ռ<EFBFBD>õ<EFBFBD><C3B5>ֽ<EFBFBD><D6BD><EFBFBD>Ŀ
|
||||
#define MAX_ACHIEVE_DATA_SIZE 256
|
||||
// <20>ɾ<EFBFBD>ѫ<EFBFBD><D1AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define MAX_MEDALS_COUNT 256
|
||||
#pragma once
|
||||
#pragma pack (push, 1)
|
||||
|
||||
//<2F>ɾ͵<C9BE><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct ACHIEVECONDITION
|
||||
{
|
||||
uint16_t eventId_; //<2F>ɾ<EFBFBD><C9BE>¼<EFBFBD>ID
|
||||
int count_; //<2F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
struct ACHIEVEMEDAL
|
||||
{
|
||||
uint8_t id_; //<2F>ɾ<EFBFBD>ѫ<EFBFBD>µ<EFBFBD>ID
|
||||
unsigned int reach_time_; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
struct AchieveRankData
|
||||
{
|
||||
int medal_cnt; //ѫ<>¸<EFBFBD><C2B8><EFBFBD>
|
||||
ACHIEVEMEDAL medal_list_[MAX_MEDALS_COUNT];
|
||||
|
||||
AchieveRankData() : medal_cnt(0){}
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
|
||||
56
Gateway/common/db/actor_cache_def.h
Normal file
56
Gateway/common/db/actor_cache_def.h
Normal file
@@ -0,0 +1,56 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
enum DBCacheType
|
||||
{
|
||||
DBCacheType_Undefined = -1, // <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
DBCacheType_ActorBasic = 0, // <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DBCacheType_RoleData, // <20>ӽ<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
DBCacheType_ScriptData,
|
||||
DBCacheType_ItemBag, // <20><><EFBFBD>߰<EFBFBD>
|
||||
DBCacheType_EquipBag, // װ<><D7B0><EFBFBD><EFBFBD>
|
||||
DBCacheType_Mail, // <20>ʼ<EFBFBD>
|
||||
DBCacheType_Store, // <20>̳<EFBFBD>
|
||||
DBCacheType_Depot, // <20>ֿ<EFBFBD>
|
||||
DBCacheType_Guild, // <20><><EFBFBD><EFBFBD>
|
||||
DBCacheType_TogHitEquip, // <20>ϻ<EFBFBD>װ<EFBFBD><D7B0>
|
||||
DBCacheType_CsScriptData, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lua
|
||||
DBCacheType_ActorCache, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
DBCacheType_Max,
|
||||
};
|
||||
|
||||
// <20><>ɫCache<68><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ɵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><CCAB>)
|
||||
enum enActorCacheDataType
|
||||
{
|
||||
enCT_ActorBasicData, // <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_BagItemData, // <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_EquipItemData, // <20><>ɫװ<C9AB><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_DepotItemData, // <20><>ɫ<EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_SkillData, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_QuestData, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_GuildData, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_MiscData, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_ScriptData, // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_GemData, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_MountData, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_DmkjItemData, //<2F><><EFBFBD>οռ<CEBF><D5BC>ֿ<EFBFBD>
|
||||
enCT_WingData, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_BuffData, //buff<66><66><EFBFBD><EFBFBD>
|
||||
enCT_AchieveData, // <20>ɾ<EFBFBD>
|
||||
enCT_CaleData, //<2F><><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_FbCountData, //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>븱<EFBFBD><EBB8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_PlotData, // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
||||
enCT_MiscStruct, // <20><><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
||||
enCT_PetSkill, // <20><><EFBFBD>\<EFBFBD><EFBCBC>
|
||||
enCT_EntrustItemData, // <20><><EFBFBD><EFBFBD>ί<EFBFBD>вֿ<D0B2>
|
||||
enCT_PetItemData, //<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
enCT_PetCrossItem, //<2F><><EFBFBD>ﴳ<EFBFBD>زֿ<D8B2>
|
||||
enCT_CrossScriptData, // <20><><EFBFBD><EFBFBD>ս<EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_TongTianTaData, //ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_MijiItem, //<2F>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
enCT_PetBase, //<2F><><EFBFBD><EFBFBD>ϵͳ
|
||||
enCT_MarryBase, //<2F><><EFBFBD><EFBFBD>ϵͳ
|
||||
enCT_Max, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫCache<68><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
274
Gateway/common/db/actor_db_data.h
Normal file
274
Gateway/common/db/actor_db_data.h
Normal file
@@ -0,0 +1,274 @@
|
||||
#pragma once
|
||||
#ifndef _ACTOR_DB_DATA_H_
|
||||
#define _ACTOR_DB_DATA_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "common/datalist.h"
|
||||
#include "common/property_set.h"
|
||||
|
||||
#pragma pack(push,4)
|
||||
|
||||
/*
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
|
||||
*/
|
||||
|
||||
using namespace SrvDef;
|
||||
|
||||
//tolua_begin
|
||||
struct ActorBasicData
|
||||
{
|
||||
unsigned int account_id; //<2F>˻<EFBFBD><CBBB><EFBFBD>ID
|
||||
//ACCOUNT account_name; //<2F>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
char account_name[ACCOUNT_LENGTH]; //<2F>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
int actor_id; //<2F><>ɫid
|
||||
//ACTORNAME actor_name; //<2F><><EFBFBD><EFBFBD>
|
||||
char actor_name[ACTOR_NAME_BUFF_LENGTH]; //<2F><><EFBFBD><EFBFBD>
|
||||
unsigned int server_idnex;
|
||||
|
||||
unsigned char job; // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɫְҵ
|
||||
unsigned char sex; // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɫ<EFBFBD>Ա<EFBFBD>
|
||||
unsigned int level;
|
||||
unsigned int exp;
|
||||
long long int fb_uid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>uid
|
||||
unsigned int fb_scene_id; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڵij<DAB5><C4B3><EFBFBD>id
|
||||
|
||||
unsigned int create_time; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
unsigned int last_online_time; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
unsigned long long last_login_ip;//<2F>ϴε<CFB4>¼<EFBFBD><C2BC>ip,<2C><>û֧<C3BB><D6A7>
|
||||
|
||||
unsigned int total_online; //<2F>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
unsigned int daily_online; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
|
||||
unsigned int bag_grid; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
long long int gold;
|
||||
long long int yuanbao;
|
||||
long long int total_power; // <20><>ս<EFBFBD><D5BD>
|
||||
long long int rank_power; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD>ս<EFBFBD><D5BD>
|
||||
unsigned int recharge; // <20><>ֵԪ<D6B5><D4AA><EFBFBD><EFBFBD>
|
||||
unsigned int paid; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
||||
unsigned int chapter_level; // <20><><EFBFBD>ڹؿ<DAB9><D8BF><EFBFBD> ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵij<DAB5><C4B3><EFBFBD>
|
||||
unsigned int vip_level; // vip<69>ȼ<EFBFBD>
|
||||
int essence; // <20><><EFBFBD><EFBFBD>
|
||||
int zhuansheng_lv; // ת<><D7AA><EFBFBD>ȼ<EFBFBD>
|
||||
int zhuansheng_exp; // ת<><D7AA><EFBFBD><EFBFBD>Ϊ
|
||||
unsigned char monthcard; //0Ϊû<CEAA><C3BB><EFBFBD><EFBFBD>1,Ϊû<CEAA><C3BB><EFBFBD><EFBFBD>,2Ϊ<32><CEAA><EFBFBD><EFBFBD>
|
||||
int tianti_level; //<2F><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
|
||||
int tianti_dan; //<2F><><EFBFBD>ݶ<EFBFBD>λ
|
||||
int tianti_win_count; //<2F><><EFBFBD>ݾ<EFBFBD>ʤ
|
||||
int tianti_week_refres; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>
|
||||
|
||||
|
||||
long long int total_wing_power; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>
|
||||
long long int warrior_power; //սʿս<CABF><D5BD>
|
||||
long long int mage_power; //<2F><>ʦս<CAA6><D5BD>
|
||||
long long int taoistpriest_power; //<2F><>ʿս<CABF><D5BD>
|
||||
int train_level; //<2F><><EFBFBD><EFBFBD>(<28><>λ)<29>ȼ<EFBFBD>
|
||||
int train_exp; //<2F><><EFBFBD><EFBFBD>(<28><>λ)<29><><EFBFBD><EFBFBD>
|
||||
int total_stone_level; //<2F><>ʯ(<28><><EFBFBD><EFBFBD>)<29>ܵȼ<DCB5>
|
||||
int total_zhuling_level;//<2F><><EFBFBD><EFBFBD><EFBFBD>ܵȼ<DCB5>
|
||||
int guild_id_; //<2F><><EFBFBD><EFBFBD>ID
|
||||
char guild_name_[32];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int zhan_ling_star; //
|
||||
int zhan_ling_stage; //
|
||||
int total_loongsoul_level;
|
||||
|
||||
int prestige_exp; //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
long long int feats; // <20><>ѫ
|
||||
|
||||
unsigned int ex_ring_lv[8];//<2F>ؽ<EFBFBD><D8BD>ȼ<EFBFBD>,<2C><><EFBFBD><EFBFBD>λΪ1ʱ<31><CAB1><EFBFBD><EFBFBD>ս
|
||||
|
||||
long long int shatter; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ
|
||||
long long int spcshatter; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ
|
||||
|
||||
unsigned int knighthood_lv;//ѫ<>µȼ<C2B5>
|
||||
|
||||
long long int togeatter;//<2F>ϻ<EFBFBD><CFBB><EFBFBD>Ƭ
|
||||
int total_wing_lv; //<2F><><EFBFBD><EFBFBD><EFBFBD>ܽ<DCBD>
|
||||
long long int total_tujian_power;//ͼ<><CDBC><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>
|
||||
long long int total_equip_power;//װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
long long int togeatterhigh;//<2F><EFBFBD><DFBC>ϻ<EFBFBD><CFBB><EFBFBD>Ƭ
|
||||
|
||||
unsigned char privilege_monthcard; //<2F><>Ȩ<EFBFBD>¿<EFBFBD><C2BF><EFBFBD> δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>Ϊ0,1Ϊû<CEAA><C3BB><EFBFBD><EFBFBD>
|
||||
int reincarnate_lv; // <20>ֻصȼ<D8B5>
|
||||
int reincarnate_exp; // <20>ֻ<EFBFBD><D6BB><EFBFBD>Ϊ
|
||||
|
||||
long long int dianquan;//<2F><>ȯ
|
||||
int quota; //<2F><><EFBFBD><EFBFBD><D7B6><EFBFBD>
|
||||
};
|
||||
|
||||
inline ActorBasicData* toActorBasicData(void* data) { return (ActorBasicData*)data; }
|
||||
//tolua_end
|
||||
|
||||
struct ActorCsData {
|
||||
unsigned int actor_id; //<2F><>ɫid
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned long long cw_fbhdl_sid_; // <20><><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ,<2C><>4λ<34><CEBB>fuben<65><6E>handle<6C><65><EFBFBD><EFBFBD>4λ<34><CEBB>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sid
|
||||
unsigned long long cw_scene_xy_; // <20><><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ,<2C><>4λ<34>dz<EFBFBD><C7B3><EFBFBD>id<69><64><EFBFBD><EFBFBD>4λ<34>еĵ<C4B5><CDB8><EFBFBD>λ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>x<EFBFBD><78>y
|
||||
unsigned long long cw_static_pos_; // <20><><EFBFBD>븱<EFBFBD><EBB8B1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>4λ<34>dz<EFBFBD><C7B3><EFBFBD>id<69><64><EFBFBD><EFBFBD>4λ<34>еĵ<C4B5><CDB8><EFBFBD>λ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>x<EFBFBD><78>y
|
||||
|
||||
ActorCsData() {
|
||||
memset(this, 0, sizeof(ActorCsData));
|
||||
}
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
inline void ReadActorBasicData(ActorBasicData& actor_data, MYSQL_ROW &pRow, unsigned long *fieldLength)
|
||||
{
|
||||
/*select level, exp, baggridcount, gold, yuanbao, totalpower, paid, fbhandle, sceneid,
|
||||
createtime, lastlogouttime, totalonline, dailyonline
|
||||
from actors
|
||||
where actorid = nactorid and(status & 2) = 2;
|
||||
*/
|
||||
#define GetRowInt(i, data) sscanf(pRow[i], "%d", &(data))
|
||||
#define GetRowUChar(i, data) int temp##i; sscanf(pRow[i], "%d", &(temp##i)); data = temp##i;
|
||||
#define GetRowLInt(i, data) sscanf(pRow[i], "%lld", &(data))
|
||||
#define GetRowString(i, data) sscanf(pRow[i], "%s", (data))
|
||||
#define GetRowData(i,data) if(pRow[i]!=NULL) memcpy(&(data),pRow[i],fieldLength[i])
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma message("todo <20><>װ<EFBFBD><D7B0><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>")
|
||||
#endif
|
||||
GetRowInt(0, actor_data.account_id);
|
||||
GetRowString(1, actor_data.account_name);
|
||||
GetRowInt(2, actor_data.actor_id);
|
||||
GetRowString(3, actor_data.actor_name);
|
||||
GetRowUChar(4, actor_data.job);
|
||||
GetRowUChar(5, actor_data.sex);
|
||||
//GetRowInt(6, actor_data.status);
|
||||
GetRowInt(7, actor_data.level);
|
||||
GetRowInt(8, actor_data.exp);
|
||||
GetRowInt(9, actor_data.server_idnex);
|
||||
|
||||
//GetRowInt(10, actor_data.create_time);
|
||||
tm t;
|
||||
memset(&t, 0, sizeof(t));
|
||||
sscanf(pRow[10], "%d-%d-%d %d:%d:%d",
|
||||
&t.tm_year,
|
||||
&t.tm_mon,
|
||||
&t.tm_mday,
|
||||
&t.tm_hour,
|
||||
&t.tm_min,
|
||||
&t.tm_sec
|
||||
);
|
||||
t.tm_year -= 1900;
|
||||
t.tm_mon -= 1;
|
||||
actor_data.create_time = (unsigned int)mktime(&t);
|
||||
//GetRowInt(11, actor_data.updatetime);
|
||||
GetRowInt(12, actor_data.last_online_time);
|
||||
GetRowLInt(13, actor_data.last_login_ip);
|
||||
GetRowInt(14, actor_data.bag_grid);
|
||||
GetRowLInt(15, actor_data.gold);
|
||||
GetRowLInt(16, actor_data.yuanbao);
|
||||
GetRowLInt(17, actor_data.total_power);
|
||||
GetRowInt(18, actor_data.recharge);
|
||||
GetRowInt(19, actor_data.paid);
|
||||
GetRowLInt(20, actor_data.fb_uid);
|
||||
GetRowInt(21, actor_data.fb_scene_id);
|
||||
GetRowInt(22, actor_data.total_online);
|
||||
GetRowInt(23, actor_data.daily_online);
|
||||
GetRowInt(24, actor_data.chapter_level);
|
||||
GetRowInt(25, actor_data.vip_level);
|
||||
GetRowInt(26, actor_data.essence);
|
||||
GetRowInt(27, actor_data.zhuansheng_lv);
|
||||
GetRowInt(28, actor_data.zhuansheng_exp);
|
||||
GetRowUChar(29, actor_data.monthcard);
|
||||
GetRowInt(30, actor_data.tianti_level);
|
||||
GetRowInt(31, actor_data.tianti_dan);
|
||||
GetRowInt(32, actor_data.tianti_win_count);
|
||||
GetRowInt(33, actor_data.tianti_week_refres);
|
||||
|
||||
|
||||
GetRowLInt(34, actor_data.total_wing_power);
|
||||
GetRowLInt(35, actor_data.warrior_power);
|
||||
GetRowLInt(36, actor_data.mage_power);
|
||||
GetRowLInt(37, actor_data.taoistpriest_power);
|
||||
GetRowInt(38, actor_data.train_level);
|
||||
GetRowInt(39, actor_data.train_exp);
|
||||
GetRowInt(40, actor_data.total_stone_level);
|
||||
|
||||
GetRowInt(41, actor_data.guild_id_);
|
||||
|
||||
GetRowInt(42, actor_data.zhan_ling_star);
|
||||
GetRowInt(43, actor_data.zhan_ling_stage);
|
||||
GetRowInt(44, actor_data.total_loongsoul_level);
|
||||
GetRowLInt(45, actor_data.feats);
|
||||
GetRowData(46, actor_data.ex_ring_lv);
|
||||
GetRowLInt(47, actor_data.shatter);
|
||||
GetRowLInt(48, actor_data.spcshatter);
|
||||
GetRowInt(49, actor_data.knighthood_lv);
|
||||
GetRowLInt(50, actor_data.togeatter);
|
||||
GetRowLInt(51, actor_data.rank_power);
|
||||
GetRowInt(52, actor_data.total_wing_lv);
|
||||
GetRowLInt(53, actor_data.total_tujian_power);
|
||||
GetRowLInt(54, actor_data.total_equip_power);
|
||||
GetRowLInt(55, actor_data.togeatterhigh);
|
||||
GetRowInt(56, actor_data.total_zhuling_level);
|
||||
GetRowInt(57, actor_data.prestige_exp);
|
||||
GetRowInt(58, actor_data.reincarnate_lv);
|
||||
GetRowInt(59, actor_data.reincarnate_exp);
|
||||
GetRowLInt(60, actor_data.dianquan);
|
||||
GetRowInt(61, actor_data.quota);
|
||||
//<2F>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> appid<69><64>pfid
|
||||
GetRowString(64, actor_data.guild_name_);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>ǰն<C7B0>ɣ<EFBFBD><C9A3><EFBFBD>dbͨ<62>ŵİ<C5B5>
|
||||
typedef struct tagActorDbData:
|
||||
ActorProperty
|
||||
{
|
||||
ACTORNAME name; //<2F><><EFBFBD><EFBFBD>
|
||||
unsigned nFbHandle; //<2F><><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ͨ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
unsigned nScenceID; //<2F><><EFBFBD><EFBFBD>id
|
||||
unsigned nEnterFbScenceID;
|
||||
int nEnterFbPos; //X <20><>y<EFBFBD><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
|
||||
unsigned int nCreateTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
unsigned long long lLastLoginIp ;//<2F>ϴε<CFB4>¼<EFBFBD><C2BC>ip,<2C><>û֧<C3BB><D6A7>
|
||||
unsigned int nLastLogoutTime; //<2F>ϴε<CFB4><CEB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,minidate<74><65>ʽ
|
||||
unsigned int nFbTeamId; // <20><><EFBFBD>˻<EFBFBD><CBBB><EFBFBD>(<28><><EFBFBD><EFBFBD>)
|
||||
ACCOUNT accountName; //<2F>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned int achieveTime; //<2F>ɾʹ<C9BE><CDB4><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
|
||||
unsigned int nAccountId; //<2F>˻<EFBFBD><CBBB><EFBFBD>ID
|
||||
|
||||
int64_t csrevivepoint; //<2F><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>㣬<EFBFBD>dz<EFBFBD><C7B3><EFBFBD>id,x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int64_t fbrevivepoint; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>㣬<EFBFBD>dz<EFBFBD><C7B3><EFBFBD>id,x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int64_t cityrevivepoint; //<2F><><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>㣬<EFBFBD>dz<EFBFBD><C7B3><EFBFBD>id,x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int free_baptize_; // <20><><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
int one_key_time_; // ʣ<><CAA3>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ѵĴ<D1B5><C4B4><EFBFBD>
|
||||
int mount_score_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int friend_cong_; // <20><><EFBFBD><EFBFBD>ף<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
int reserve_data_; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
unsigned int spirit_score_; //<2F><><EFBFBD>ҵľ<D2B5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD>
|
||||
int lianfuTeamId; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned long long cw_fbhdl_sid_; // <20><><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ,<2C><>4λ<34><CEBB>fuben<65><6E>handle<6C><65><EFBFBD><EFBFBD>4λ<34><CEBB>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sid
|
||||
unsigned long long cw_scene_xy_; // <20><><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ,<2C><>4λ<34>dz<EFBFBD><C7B3><EFBFBD>id<69><64><EFBFBD><EFBFBD>4λ<34>еĵ<C4B5><CDB8><EFBFBD>λ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>x<EFBFBD><78>y
|
||||
unsigned long long cw_static_pos_; // <20><><EFBFBD>븱<EFBFBD><EBB8B1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>4λ<34>dz<EFBFBD><C7B3><EFBFBD>id<69><64><EFBFBD><EFBFBD>4λ<34>еĵ<C4B5><CDB8><EFBFBD>λ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>x<EFBFBD><78>y
|
||||
|
||||
int war_team_id_; // ս<><D5BD>ID
|
||||
int cross_honor_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
unsigned int upgrade_time_; //<2F><><EFBFBD>ҵȼ<D2B5><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
|
||||
unsigned int total_online_; //<2F>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
unsigned int daily_online_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
|
||||
char quest[1000]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
char mis_for_php_[128]; //<2F><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>ѯ<EFBFBD><D1AF>һЩ<D2BB><D0A9><EFBFBD><EFBFBD>
|
||||
|
||||
tagActorDbData()
|
||||
{
|
||||
memset(this, 0, sizeof(tagActorDbData));
|
||||
}
|
||||
} ACTORDBDATA, *PACTORDBDATA;
|
||||
*/
|
||||
57
Gateway/common/db/config_db_data.h
Normal file
57
Gateway/common/db/config_db_data.h
Normal file
@@ -0,0 +1,57 @@
|
||||
#ifndef _CONFIG_DB_DATA_H_
|
||||
#define _CONFIG_DB_DATA_H_
|
||||
|
||||
#define MAX_NAME_LEN 64
|
||||
|
||||
#define MAX_LEN_BUFF 64
|
||||
|
||||
#define MAX_LEN_DESC 1024
|
||||
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ
|
||||
typedef struct staticaward
|
||||
{
|
||||
int itemid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒid
|
||||
int needgrid; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char itemname[MAX_NAME_LEN];
|
||||
char itemdesc[MAX_LEN_DESC];
|
||||
//int itype; //<2F><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
||||
//int sell_type;
|
||||
int icon; //ͼ<><CDBC>id
|
||||
//int color;
|
||||
//int dura;
|
||||
int dup; //<2F><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
//int colGroup;
|
||||
//int dealType;
|
||||
//int dealPrice;
|
||||
int itime; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int flag; //<2F><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
int grouptype; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>û<EFBFBD><C3BB><EFBFBD>û<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬<EFBFBD><E9A3AC>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,1<><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int cond_cons_id; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒid,û<><C3BB><EFBFBD><EFBFBD>0
|
||||
int cond_cons_count; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒid<69><64><EFBFBD><EFBFBD>,û<><C3BB><EFBFBD><EFBFBD>0
|
||||
int cond_money_type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǯ<EFBFBD><C7AE><EFBFBD>ͣ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>0
|
||||
int cond_money_count; // <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǯ<EFBFBD><C7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>0
|
||||
char cond_value[MAX_LEN_BUFF]; //<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> c1=v1&c2=v2&c3=v3<76><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||
} Staticaward_t;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef struct staticawardconfig
|
||||
{
|
||||
int giftitemid; // <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒid
|
||||
int rewardtype; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20><>Ʒ 2 <20><>Ǯ ... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>
|
||||
int contenttype;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD> Ŀǰֻ<C7B0><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǯ<EFBFBD><C7AE><EFBFBD><EFBFBD>
|
||||
int amount; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int itemid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<69><64>
|
||||
int bind; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
int group; // <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int rate; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int noworldrate; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>羭<EFBFBD><E7BEAD><EFBFBD>ӳɣ<D3B3>0<EFBFBD>ӳɣ<D3B3>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD>ӳ<DEBC>
|
||||
int quality;
|
||||
int strong;
|
||||
}Staticawardconfig_t;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
44
Gateway/common/db/consignment.h
Normal file
44
Gateway/common/db/consignment.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef _CONSIGNMENT_H_
|
||||
#define _CONSIGNMENT_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "item_data.h"
|
||||
#include "common/datalist.h"
|
||||
|
||||
|
||||
//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ˽ṹ<CBBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
|
||||
#pragma pack (push, 1)
|
||||
//
|
||||
typedef struct tagConsingmentData
|
||||
{
|
||||
ItemSeries id_; // Ψһ<CEA8><D2BB>id
|
||||
ItemData* item_; //<2F><><EFBFBD><D7BC><EFBFBD><EFBFBD>Ʒ<EFBFBD>ṹ
|
||||
int sell_money_; // <20><><EFBFBD>۵<EFBFBD><DBB5>ǽ<EFBFBD>Ǯ
|
||||
int sell_money_type_; // <20><>Ǯ<EFBFBD><C7AE><EFBFBD>ͣ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>Ƿǰ<C7B0>
|
||||
|
||||
UINT restTime_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1>
|
||||
UINT price_; //<2F><>Ǯ
|
||||
ActorId actorId_; //<2F><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>id
|
||||
|
||||
uint8_t moneyType_; //Ԫ<><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t bJob; //<2F><><EFBFBD>õ<EFBFBD>ְҵ<D6B0><D2B5>0<EFBFBD><30>ͨ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ְҵ<D6B0><D2B5><EFBFBD><EFBFBD>
|
||||
uint8_t bType; //<2F><><EFBFBD>ͣ<EFBFBD>
|
||||
uint8_t bLevel; //<2F><>Ʒʹ<C6B7><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵȼ<C4B5>
|
||||
uint8_t timeOut_; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڣ<EFBFBD>0<EFBFBD><30>ʾû<CABE><C3BB><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
unsigned int handle_; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>handle
|
||||
ACTORNAME actor_name_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char account_name_[64]; // <20>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
tagConsingmentData()
|
||||
{
|
||||
ZeroMemory(this, sizeof(*this));
|
||||
}
|
||||
static bool SortRule(tagConsingmentData* data1, tagConsingmentData* data2)
|
||||
{
|
||||
return (data1->moneyType_ == data2->moneyType_) ? (data1->price_ < data2->price_) : (data1->moneyType_ > data2->moneyType_);
|
||||
}
|
||||
}ConsingmentData;
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
|
||||
151
Gateway/common/db/fight_data.h
Normal file
151
Gateway/common/db/fight_data.h
Normal file
@@ -0,0 +1,151 @@
|
||||
#ifndef _DB_FIGHT_H_
|
||||
#define _DB_FIGHT_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "skill_data.h"
|
||||
#include "common/datalist.h"
|
||||
|
||||
|
||||
#define MAX_DB_SKILL 16
|
||||
#define MAX_FIGHT_DATA 1000
|
||||
#define FIGHT_PER_PAGE 15
|
||||
#define MAX_FIGHT_LOG 50
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct FightDBData
|
||||
{
|
||||
ActorId aid_;
|
||||
ACTORNAME name_;
|
||||
int serverid_;
|
||||
int sex_;
|
||||
int job_;
|
||||
int fight_value_;
|
||||
int gid_; // <20><><EFBFBD>ڰ<EFBFBD><DAB0>ɵ<EFBFBD>ID
|
||||
int weapon_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int wing_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int props_[P_MAX_CREATURE]; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
int hair_;
|
||||
int sprite_; //<2F><><EFBFBD><EFBFBD>
|
||||
int social_; //<2F><><EFBFBD><EFBFBD>ְλ
|
||||
int guild_level_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>props<70><73>
|
||||
|
||||
//int level_;
|
||||
//int icon_;
|
||||
//int model_;
|
||||
//int max_hp_;
|
||||
//int max_mp_;
|
||||
//int speed_;
|
||||
//int out_attack_;
|
||||
//int out_defence_;
|
||||
//int in_attack_;
|
||||
//int in_defence_;
|
||||
//int all_attack_;
|
||||
//int sub_def_;
|
||||
//int baoji_;
|
||||
//int shanbi_;
|
||||
//int hit_rate_;
|
||||
//int attack_append_;
|
||||
//float hp_renew_;
|
||||
//float mp_renew_;
|
||||
//int attack_speed_;
|
||||
//int in_attack_damage_add_;
|
||||
//int out_attack_damage_add_;
|
||||
//int lilian_; // <20><><EFBFBD>ڻ<EFBFBD><DABB>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
|
||||
|
||||
int skill_cnt_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BaseSkillData skills_[MAX_DB_SKILL]; // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>(<28><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>)
|
||||
|
||||
int other_skill_cnt_; //<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BaseSkillData other_skills_[MAX_DB_SKILL]; //<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>б<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
|
||||
int nIndex; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
||||
int prev_index; // <20>ϴε<CFB4><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ƣ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>賿<EFBFBD><E8B3BF>¼
|
||||
|
||||
int attack_type_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int init_data_; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
|
||||
FightDBData()
|
||||
{
|
||||
wing_ = 0;
|
||||
hair_ = 0;
|
||||
sprite_ = 0;
|
||||
skill_cnt_ = 0;
|
||||
other_skill_cnt_ = 0;
|
||||
attack_type_ = 1;
|
||||
weapon_ = 0;
|
||||
social_ = 0;
|
||||
guild_level_ = 0;
|
||||
memset(props_, 0, sizeof(props_));
|
||||
prev_index = 1000000;
|
||||
}
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int GetTrend()
|
||||
{
|
||||
if (nIndex > prev_index)
|
||||
return 0;
|
||||
else if (nIndex < prev_index)
|
||||
return 2;
|
||||
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
|
||||
// <20><>ս<EFBFBD><D5BD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct FightActorData
|
||||
{
|
||||
ActorId id_;
|
||||
int rank_; // <20><>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int serverid_;
|
||||
int sex_;
|
||||
int job_;
|
||||
int level_;
|
||||
ACTORNAME name_;
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>¼
|
||||
struct FightLogData
|
||||
{
|
||||
unsigned int time_; // ʱ<><CAB1>
|
||||
FightActorData aid1_; // <20><>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>
|
||||
FightActorData aid2_; // <20><><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>
|
||||
int result_; // <20><>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD>˶<EFBFBD>ս<EFBFBD><D5BD>¼
|
||||
struct FightLog
|
||||
{
|
||||
int date_;
|
||||
int type_;
|
||||
int result_;
|
||||
int rank_; // <20><>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int enemyid_;
|
||||
int encamp_;
|
||||
int ensex_;
|
||||
int enjob_;
|
||||
int enlevel_;
|
||||
ACTORNAME enname_;
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD>\<EFBFBD><EFBCBC><EFBFBD><EFBFBD>Ϣ
|
||||
struct FightPetSkill
|
||||
{
|
||||
int skillId_; // <20><><EFBFBD><EFBFBD>id
|
||||
int level_;
|
||||
};
|
||||
|
||||
struct FightPetData
|
||||
{
|
||||
int title_; //
|
||||
int mid_; // <20><><EFBFBD><EFBFBD>ID
|
||||
int level_;
|
||||
//int name_rgb_;
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
|
||||
44
Gateway/common/db/friend_data.h
Normal file
44
Gateway/common/db/friend_data.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef _FRIEND_DATA_H_
|
||||
#define _FRIEND_DATA_H_
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
#pragma pack(push,1)
|
||||
|
||||
struct FriendInfo
|
||||
{
|
||||
ActorId actor_id_; //<2F><><EFBFBD>ѽ<EFBFBD>ɫid
|
||||
//int qq_vip_;
|
||||
//unsigned int friendly_;//<2F><><EFBFBD>ú<EFBFBD><C3BA>ѵ<EFBFBD><D1B5>Ѻö<D1BA>
|
||||
//uint8_t icon_; //<2F>ú<EFBFBD><C3BA>ѵ<EFBFBD>ͷ<EFBFBD><CDB7>
|
||||
uint8_t f_type_;
|
||||
//int level_;
|
||||
//uint8_t camp_;
|
||||
//uint8_t job_;
|
||||
//uint8_t sex_;
|
||||
//uint32_t fight_; //ս<><D5BD><EFBFBD><EFBFBD>
|
||||
//uint32_t last_logout_time_;//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//uint32_t server_id_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
||||
uint32_t add_friend_time_; //<2F><><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
uint32_t last_contact_time_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵʱ<CFB5><CAB1>
|
||||
|
||||
|
||||
// <20><><EFBFBD>رȽϲ<C8BD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ݽ<EFBFBD>ɫid<69><64><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
inline bool operator != (const FriendInfo& data) const
|
||||
{
|
||||
return actor_id_ != data.actor_id_;
|
||||
}
|
||||
inline bool operator > (const FriendInfo& data) const
|
||||
{
|
||||
return actor_id_ > data.actor_id_;
|
||||
}
|
||||
inline bool operator < (const FriendInfo& data) const
|
||||
{
|
||||
return actor_id_ < data.actor_id_;
|
||||
}
|
||||
};
|
||||
|
||||
#pragma pack (pop)
|
||||
#endif
|
||||
|
||||
42
Gateway/common/db/guild_data.h
Normal file
42
Gateway/common/db/guild_data.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef _GUILD_DB_H_
|
||||
#define _GUILD_DB_H_
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
#define MAXMEMOCOUNT 1024
|
||||
|
||||
struct GuildMemberInfo
|
||||
{
|
||||
ActorId actorId_;
|
||||
int total_contrib_;
|
||||
int today_contrib_;
|
||||
uint8_t job_; // ְҵ
|
||||
uint8_t sex_;
|
||||
uint8_t level_;//<2F>ȼ<EFBFBD>
|
||||
uint8_t zs_level_;//ת<><D7AA><EFBFBD>ȼ<EFBFBD>
|
||||
uint8_t pos_; //<2F><>λ
|
||||
double fight_; // ս<><D5BD>
|
||||
int vip_; // vip<69>ȼ<EFBFBD>
|
||||
int monthcard_; // <20>¿<EFBFBD>״̬
|
||||
uint8_t icon_; //ͷ<><CDB7>ID
|
||||
unsigned int lastLogoutTime_;
|
||||
unsigned int recharge_;
|
||||
ACTORNAME actor_name_;
|
||||
uint64_t handle_;
|
||||
GuildMemberInfo()
|
||||
{
|
||||
ZeroMemory(this, sizeof(*this));
|
||||
}
|
||||
|
||||
int compare(GuildMemberInfo& node)
|
||||
{
|
||||
if (total_contrib_ > node.total_contrib_) return 1;
|
||||
else if (total_contrib_ < node.total_contrib_) return -1;
|
||||
else return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
90
Gateway/common/db/item_data.h
Normal file
90
Gateway/common/db/item_data.h
Normal file
@@ -0,0 +1,90 @@
|
||||
#ifndef _USER_ITEM_H_
|
||||
#define _USER_ITEM_H_
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
// <20><>ʱû<CAB1>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>varchar64<36><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//#define ITEM_DATA_RESERVED_SIZE 64
|
||||
#define EQUIP_ATTR_COUNT 8
|
||||
#define ITEM_ATTR_TYPEVALUE 2
|
||||
#define ITEM_ATTR_TYPE 0
|
||||
#define ITEM_ATTR_VALUE 1
|
||||
|
||||
enum BagType
|
||||
{
|
||||
BagType_Item = 0,
|
||||
BagType_Equip,
|
||||
BagType_Depot,
|
||||
};
|
||||
|
||||
|
||||
#pragma pack (push, 1)
|
||||
union ItemSeries
|
||||
{
|
||||
int64_t llId;
|
||||
|
||||
struct
|
||||
{
|
||||
unsigned int time_; //31-0λ<30><CEBB>ʾ<EFBFBD><CABE>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>ʱ<EFBFBD>䣬ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||
uint16_t series_; //47-32λ<32><CEBB>ʾ<EFBFBD><CABE>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>У<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ+1<><31>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
uint16_t sid_; //55-48λ<38><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
||||
} t;
|
||||
public:
|
||||
//inline operator int64_t () const { return llId; }
|
||||
//inline bool operator == (const ItemSeries& series) const { return llId == series.llId; }
|
||||
//inline bool operator != (const ItemSeries& series) const { return llId != series.llId; }
|
||||
};
|
||||
|
||||
union ItemAttrData
|
||||
{
|
||||
// define:
|
||||
struct EquipAttr
|
||||
{
|
||||
int attr[EQUIP_ATTR_COUNT][ITEM_ATTR_TYPEVALUE]; // <20><><EFBFBD><EFBFBD>+value
|
||||
};
|
||||
|
||||
// public:
|
||||
EquipAttr equip_attr;
|
||||
};
|
||||
|
||||
struct ItemData
|
||||
{
|
||||
int64_t uid; //<2F><>ƷΨһϵ<D2BB>к<EFBFBD> ItemSeries
|
||||
int id;
|
||||
int count;
|
||||
ItemAttrData attr_data; // <20><EFBFBD><F3B2BFB7><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA>٣<EFBFBD><D9A3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Ż<EFBFBD>
|
||||
ItemAttrData ex_attr_data;
|
||||
|
||||
ItemData()
|
||||
{
|
||||
memset(this, 0, sizeof(ItemData));
|
||||
}
|
||||
|
||||
public:
|
||||
//<2F><EFBFBD>useritem ע<><D7A2><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD> writeToPack, writeDbPack, writeCrcPack
|
||||
//<2F><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><CDB8>ͻ<EFBFBD><CDBB>˵İ<CBB5>
|
||||
void writeData(DataPacket& pack) {
|
||||
pack.writeBuf(this, sizeof(ItemData));
|
||||
}
|
||||
|
||||
void readData(DataPacketReader& pack) {
|
||||
pack.readBuf(this, sizeof(ItemData));
|
||||
}
|
||||
|
||||
static void copy(ItemData* dstItem, ItemData* srcItem)
|
||||
{
|
||||
if (!dstItem || !srcItem || dstItem == srcItem) return;
|
||||
|
||||
memcpy(dstItem, srcItem, sizeof(ItemData));
|
||||
}
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
//STATIC_ASSERT(sizeof(ItemData) < ITEM_DATA_RESERVED_SIZE);
|
||||
typedef std::vector<ItemData*> ItemList ;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
89
Gateway/common/db/mail_data.h
Normal file
89
Gateway/common/db/mail_data.h
Normal file
@@ -0,0 +1,89 @@
|
||||
#ifndef _MAIL_DATA_H_
|
||||
#define _MAIL_DATA_H_
|
||||
|
||||
#include "common.h"
|
||||
|
||||
enum MailAwardType
|
||||
{
|
||||
MailAwardType_Currency,
|
||||
MailAwardType_Item,
|
||||
};
|
||||
|
||||
enum MailReadStatusType
|
||||
{
|
||||
MailReadStatusType_NotRead,
|
||||
MailReadStatusType_HaveRead,
|
||||
};
|
||||
|
||||
enum MailAwardStatusType
|
||||
{
|
||||
MailAwardStatusType_NoAward = -1, //<2F><EFBFBD><DEB8><EFBFBD>
|
||||
MailAwardStatusType_CanAward = 0, //<2F><><EFBFBD><EFBFBD>ȡ
|
||||
MailAwardStatusType_HaveAward = 1, //<2F><><EFBFBD><EFBFBD>ȡ
|
||||
};
|
||||
|
||||
#pragma pack (push, 4)
|
||||
union MailSeries
|
||||
{
|
||||
int64_t llId;
|
||||
|
||||
struct
|
||||
{
|
||||
unsigned int time_; //31-0λ<30><CEBB>ʾ<EFBFBD><CABE>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>ʱ<EFBFBD>䣬ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||
uint16_t series_; //47-32λ<32><CEBB>ʾ<EFBFBD><CABE>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>У<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ+1<><31>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
uint16_t sid_; //55-48λ<38><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
||||
} t;
|
||||
public:
|
||||
//inline operator int64_t () const { return llId; }
|
||||
//inline bool operator == (const ItemSeries& series) const { return llId == series.llId; }
|
||||
//inline bool operator != (const ItemSeries& series) const { return llId != series.llId; }
|
||||
};
|
||||
|
||||
struct MailAwardData
|
||||
{
|
||||
int type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int id; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒid<69><64><EFBFBD>ǻ<EFBFBD><C7BB>ҵĻ<D2B5><C4BB><EFBFBD>û<EFBFBD><C3BB>
|
||||
int count; //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
MailAwardData() :type(0), id(0), count(0) {}
|
||||
};
|
||||
|
||||
struct MailAwardList
|
||||
{
|
||||
int awardCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MailAwardData awardList[10]; //<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
};
|
||||
|
||||
struct MailData
|
||||
{
|
||||
static const int HEAD_SIZE = 128;
|
||||
static const int CONTEXT_SIZE = 1024;
|
||||
|
||||
int uid; //<2F>ʼ<EFBFBD>Ψһϵ<D2BB>к<EFBFBD> MailSeries
|
||||
int readStatus; //<2F><>ȡ״̬
|
||||
int awardStatus; //<2F>콱״̬
|
||||
int sendtime; //<2F><><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
char head[128]; //<2F>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>
|
||||
char context[1024]; //<2F>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>
|
||||
MailAwardList award_data; // <20><EFBFBD><F3B2BFB7><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA>٣<EFBFBD><D9A3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Ż<EFBFBD>
|
||||
|
||||
MailData()
|
||||
{
|
||||
memset(this, 0, sizeof(MailData));
|
||||
}
|
||||
|
||||
public:
|
||||
//<2F><EFBFBD>useritem ע<><D7A2><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD> writeToPack, writeDbPack, writeCrcPack
|
||||
//<2F><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><CDB8>ͻ<EFBFBD><CDBB>˵İ<CBB5>
|
||||
void writeData(DataPacket& pack) {
|
||||
pack.writeBuf(this, sizeof(MailData));
|
||||
}
|
||||
|
||||
void readData(DataPacketReader& pack) {
|
||||
pack.readBuf(this, sizeof(MailData));
|
||||
}
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
104
Gateway/common/db/msg.h
Normal file
104
Gateway/common/db/msg.h
Normal file
@@ -0,0 +1,104 @@
|
||||
#ifndef _MSG_H_
|
||||
#define _MSG_H_
|
||||
|
||||
#define MAX_MSG_COUNT 1024 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿⶨ<DDBF><E2B6A8><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD>ܸ<EFBFBD>
|
||||
#define MAX_MAIL_COUNT 1024 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿⶨ<DDBF><E2B6A8><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD>ܸ<EFBFBD>
|
||||
#define MAX_MAIL_FILE_COUNT 3
|
||||
#define MAX_MAIL_NOTIFY 180
|
||||
//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ˽ṹ<CBBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
|
||||
#pragma pack (push, 1)
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ʼ<EFBFBD><CABC><EFBFBD>Ϣ
|
||||
|
||||
struct MailFile
|
||||
{
|
||||
uint8_t type_; // 0 NULL 1 <20><>Ʒ 2 <20><>Ǯ
|
||||
int sort_; // <20><>ƷID<49><44><EFBFBD><EFBFBD>Ǯ<EFBFBD><C7AE><EFBFBD>ࣨ1 Ԫ<><D4AA><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD> 3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4 <20>ɱң<C9B1>
|
||||
int num_; // <20><><EFBFBD><EFBFBD>
|
||||
uint8_t bind_; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
int quality_; // Ʒ<><C6B7>
|
||||
|
||||
MailFile()
|
||||
{
|
||||
ZeroMemory(this, sizeof(*this));
|
||||
}
|
||||
void reset()
|
||||
{
|
||||
ZeroMemory(this, sizeof(*this));
|
||||
}
|
||||
};
|
||||
|
||||
// struct MailData
|
||||
// {
|
||||
// int64_t id_;
|
||||
// int actor_id_;
|
||||
// uint8_t type_;
|
||||
// uint8_t status_;
|
||||
// int sender_id_;
|
||||
// int sender_level_;
|
||||
// uint32_t send_tick_;
|
||||
// char send_name_[33];
|
||||
// char context_[MAX_MAIL_COUNT];
|
||||
// MailFile attachment_[MAX_MAIL_FILE_COUNT];
|
||||
//
|
||||
// MailData()
|
||||
// {
|
||||
// ZeroMemory(this, sizeof(*this));
|
||||
// }
|
||||
// void reset()
|
||||
// {
|
||||
// ZeroMemory(this, sizeof(*this));
|
||||
// }
|
||||
// };
|
||||
|
||||
struct GmQuestionData
|
||||
{
|
||||
int64_t id_;
|
||||
int server_id_;
|
||||
int actor_id_;
|
||||
char name_[128];
|
||||
int status_;
|
||||
int hasread_;
|
||||
char title_[128];
|
||||
int type_;
|
||||
char question_[1024];
|
||||
char qq_[16];
|
||||
unsigned int question_time_;
|
||||
char answer_[1024];
|
||||
unsigned int answer_time_;
|
||||
|
||||
GmQuestionData()
|
||||
{
|
||||
ZeroMemory(this, sizeof(*this));
|
||||
}
|
||||
void reset()
|
||||
{
|
||||
ZeroMemory(this, sizeof(*this));
|
||||
}
|
||||
};
|
||||
|
||||
struct FeeData
|
||||
{
|
||||
int id_;
|
||||
char openid_[128];
|
||||
int itemId_;
|
||||
int num_;
|
||||
int actor_id_;
|
||||
char order_num_[128];
|
||||
};
|
||||
|
||||
struct TxApiMsgData
|
||||
{
|
||||
int id_;
|
||||
char openid_[128];
|
||||
int type_;
|
||||
char para1_[64];
|
||||
char para2_[64];
|
||||
char para3_[64];
|
||||
char para4_[64];
|
||||
char para5_[64];
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
|
||||
19
Gateway/common/db/pet_data.h
Normal file
19
Gateway/common/db/pet_data.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef _PET_H_
|
||||
#define _PET_H_
|
||||
|
||||
#include "common/system_param_def.h"
|
||||
|
||||
|
||||
#pragma pack(push,1)
|
||||
|
||||
struct PropData
|
||||
{
|
||||
int data_[PI_MAX];
|
||||
};
|
||||
|
||||
#pragma pack (pop)
|
||||
|
||||
//lua<75><61><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define MAX_BLOOD 20
|
||||
#endif
|
||||
|
||||
159
Gateway/common/db/rank_data.h
Normal file
159
Gateway/common/db/rank_data.h
Normal file
@@ -0,0 +1,159 @@
|
||||
#ifndef _DB_RANK_H_
|
||||
#define _DB_RANK_H_
|
||||
|
||||
#include "container/static_array_list.h"
|
||||
#include "common/datalist.h"
|
||||
#include "common/gem_def.h"
|
||||
#include "item_data.h"
|
||||
#include "wing_data.h"
|
||||
#include "achieve_data.h"
|
||||
|
||||
using namespace container;
|
||||
|
||||
#define MAX_USER_EQUIP 19
|
||||
#define MAX_PET_SKILL 16
|
||||
#define MAX_PET_BASE 8
|
||||
#define MAX_FIGHT 40
|
||||
#define NEED_REMEMBER_PROPERTY 20
|
||||
#define MAX_PET_EQUIP 4
|
||||
enum RankType
|
||||
{
|
||||
rtNone = 0,
|
||||
rtFightVal = 1, // ս<><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
rtLevel = 2, // <20>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
rtCharmWeek = 3,// ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
rtAchieve = 4, // <20>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
rtPet = 5, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
rtMount = 6, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
rtWing = 7, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>
|
||||
rtSpirit = 8, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
rtCharm = 9, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
|
||||
rtRoot = 10, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>ã<EFBFBD>
|
||||
rtMax,
|
||||
};
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct RankDbItem
|
||||
{
|
||||
ActorId actorId_;
|
||||
int rankId_; // <20><><EFBFBD>а<EFBFBD><D0B0>ı<EFBFBD><C4B1><EFBFBD>
|
||||
int point_; // <20><><EFBFBD>еķ<D0B5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵȼ<C7B5><C8BC><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵȼ<C7B5><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ)
|
||||
int camp_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
|
||||
int level_; // <20>ȼ<EFBFBD>
|
||||
int job_; // ְҵ
|
||||
int sex_; // <20>Ա<EFBFBD>
|
||||
int fightVal_; // ս<><D5BD><EFBFBD><EFBFBD>
|
||||
int mount_id_;// <20><><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ڿͻ<DABF><CDBB><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int spirit_id_; // <20><><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE>磬<EFBFBD><E7A3AC><EFBFBD>ڿͻ<DABF><CDBB><EFBFBD>ȡ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>ע<EFBFBD>⣬<EFBFBD><E2A3AC>Щ<EFBFBD>ֶ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int wing_; // <20><><EFBFBD><EFBFBD>id
|
||||
int pet_type_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
|
||||
int pet_id_; // <20><><EFBFBD><EFBFBD>id
|
||||
int qq_vip_; // qqvip<69>ȼ<EFBFBD>
|
||||
int weapon_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int model_; // <20>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
int hair_; // ͷ<><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int stone_effect_;//<2F><>ʯ<EFBFBD><CAAF>Ч
|
||||
int stage_effect_;//<2F><EFBFBD><D7BC><EFBFBD>Ч
|
||||
int wing_model_;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int last_rank_; // <20><>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
int like_; //<2F><><EFBFBD><EFBFBD><DEB4><EFBFBD>
|
||||
int srvid_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
|
||||
char actorName_[32]; //<2F><>ɫ<EFBFBD><C9AB>
|
||||
char guild_[32]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char petName_[32]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
static const int MAX_COUNT = 100;
|
||||
|
||||
RankDbItem() : actorId_(0), rankId_(0), point_(0), camp_(0), level_(1), job_(0), sex_(0), fightVal_(0), mount_id_(0),
|
||||
spirit_id_(0), wing_(0), pet_type_(0), pet_id_(0), qq_vip_(0), weapon_(0), model_(0), hair_(0), stone_effect_(0), stage_effect_(0), wing_model_(0), last_rank_(0), like_(0), srvid_(0)
|
||||
{
|
||||
actorName_[0] = 0;
|
||||
guild_[0] = 0;
|
||||
petName_[0] = 0;
|
||||
}
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct PetRankDbItem
|
||||
{
|
||||
ActorId actorId_;
|
||||
int jingjie_; //<2F><><EFBFBD>ᄈ<EFBFBD><EFBEB3>
|
||||
int nature_; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD>
|
||||
short pet_type_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idx
|
||||
short skill_count_; //<2F><><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD>
|
||||
int skill_list_[MAX_PET_SKILL]; //һ<><D2BB>int<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<69>͵ȼ<CDB5> (<28><>16 <20><><EFBFBD><EFBFBD>id <20><>16 <20>ȼ<EFBFBD>)
|
||||
StaticDataList<ItemData, MAX_PET_EQUIP> items_;//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
|
||||
static const int MAX_COUNT = 100;
|
||||
|
||||
PetRankDbItem() : actorId_(0), jingjie_(0), nature_(0), pet_type_(0), skill_count_(0)
|
||||
{
|
||||
memset(skill_list_, 0, sizeof(skill_list_));
|
||||
}
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
typedef StaticArrayList<RankDbItem, RankDbItem::MAX_COUNT> RankList;
|
||||
typedef StaticArrayList<PetRankDbItem, PetRankDbItem::MAX_COUNT> PetRankList;
|
||||
|
||||
typedef StaticHashTable<int, RankDbItem::MAX_COUNT> LastRankList;
|
||||
typedef StaticDataList<RankList, rtMax> AllRankList;
|
||||
typedef StaticDataList<LastRankList, rtMax> AllLastRankList;
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct RankData
|
||||
{
|
||||
int property_[NEED_REMEMBER_PROPERTY]; //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
int fight_list_[MAX_FIGHT]; //ս<><D5BD><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
RankData()
|
||||
{
|
||||
memset(property_, (int)0, sizeof(property_));
|
||||
memset(fight_list_, (int)-1, sizeof(fight_list_));
|
||||
}
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
||||
struct ActorRankData
|
||||
{
|
||||
ActorId actorId_; //<2F><>ɫid
|
||||
int dragon_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(<28><><EFBFBD><EFBFBD>)
|
||||
int hasMount_; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//MountDataDb mount_data_;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
StaticDataList<ItemData, MAX_USER_EQUIP> items_;//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
int hasWing_; //<2F>Ƿ<EFBFBD><C7B7>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WingRankDbData wing_data_;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int hasSpirit_; //<2F>Ƿ<EFBFBD><C7B7>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SpiritRankData spirit_data_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AchieveRankData achieve_data_; //<2F>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
RankData rank_data_; //<2F><><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
uint8_t rankNum_[rtMax]; // <20><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>0
|
||||
|
||||
ActorRankData() : actorId_(0), dragon_(0), hasMount_(0), hasWing_(0), hasSpirit_(0)
|
||||
{
|
||||
memset(rankNum_, 0, sizeof(rankNum_));
|
||||
}
|
||||
};
|
||||
|
||||
struct ActorRankDataEx
|
||||
{
|
||||
ActorRankData base_;
|
||||
char guild_[32]; // <20><><EFBFBD>࣬<EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int mount_id_; // <20><><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ڿͻ<DABF><CDBB><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int spirit_id_; // <20><><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE>磬<EFBFBD><E7A3AC><EFBFBD>ڿͻ<DABF><CDBB><EFBFBD>ȡ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>ע<EFBFBD>⣬<EFBFBD><E2A3AC>Щ<EFBFBD>ֶ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int root_; // <20><><EFBFBD><EFBFBD><EFBFBD>ĵȼ<C4B5><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
int wing_; // <20><><EFBFBD><EFBFBD>
|
||||
ActorRankDataEx() : mount_id_(0), spirit_id_(0), root_(0), wing_(0)
|
||||
{
|
||||
guild_[0] = 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
170
Gateway/common/db/role_data.h
Normal file
170
Gateway/common/db/role_data.h
Normal file
@@ -0,0 +1,170 @@
|
||||
#ifndef _DB_ROLE_DATA_H_
|
||||
#define _DB_ROLE_DATA_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "common/datalist.h"
|
||||
#include "common/property_set.h"
|
||||
|
||||
#define MAX_FUWEN 8
|
||||
#define MAX_WING_PILL 2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#pragma pack(push,1)
|
||||
using namespace SrvDef;
|
||||
|
||||
//tolua_begin
|
||||
struct SkillsData
|
||||
{
|
||||
int skill_level[5];
|
||||
};
|
||||
|
||||
struct YuanShenData
|
||||
{
|
||||
bool slot_filled[6];
|
||||
};
|
||||
|
||||
enum EquipSlotType
|
||||
{
|
||||
EquipSlotType_Weapon = 0,//<2F><><EFBFBD><EFBFBD>
|
||||
EquipSlotType_Helmet,//1.ͷ<><CDB7>
|
||||
EquipSlotType_Coat,//2.<2E>·<EFBFBD>
|
||||
EquipSlotType_Necklace,//3.<2E><><EFBFBD><EFBFBD>
|
||||
EquipSlotType_Wrist,//4.<2E><><EFBFBD><EFBFBD>
|
||||
EquipSlotType_Belt,//5.<2E><><EFBFBD><EFBFBD>
|
||||
EquipSlotType_Ring,//6.<2E><>ָ
|
||||
EquipSlotType_Shoes,//7.Ь<><D0AC>
|
||||
EquipSlotType_Dzi, //8.<2E><>ӡ
|
||||
EquipSlotType_Hats, //9.<2E><><EFBFBD><EFBFBD>
|
||||
EquipSlotType_Mark, //10.<2E><><EFBFBD><EFBFBD>
|
||||
EquipSlotType_Cloak, //11.<2E><><EFBFBD><EFBFBD>
|
||||
EquipSlotType_Shield, //12.<2E><><EFBFBD><EFBFBD>
|
||||
EquipSlotType_Max,
|
||||
};
|
||||
|
||||
enum WingSlotType
|
||||
{
|
||||
WingSlotType_Hub = 0,
|
||||
WingSlotType_Stone,
|
||||
WingSlotType_Feathers,
|
||||
WingSlotType_Colorplume,
|
||||
|
||||
WingSlotType_Max,
|
||||
};
|
||||
|
||||
struct EquipSlotData
|
||||
{
|
||||
int strength_lv; //ǿ<><C7BF><EFBFBD>ȼ<EFBFBD>
|
||||
int fuling_lv; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
int gem_lv; //<2F><>ʯ<EFBFBD>ȼ<EFBFBD>
|
||||
ItemData equip_data;
|
||||
int zhuling_lv; //ע<><D7A2><EFBFBD>ȼ<EFBFBD>
|
||||
int soul_lv; //ħ<><C4A7><EFBFBD>ȼ<EFBFBD>(1-8<><38>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>9-12<31><32>ʾħ<CABE><C4A7><EFBFBD>ȼ<EFBFBD>)
|
||||
int bless_lv; //ף<><D7A3><EFBFBD>ȼ<EFBFBD>(<28><><EFBFBD><EFBFBD>)(<28><>û<EFBFBD>õ<EFBFBD>)
|
||||
int fuling_exp; //<2F><><EFBFBD>龭<EFBFBD><E9BEAD>
|
||||
};
|
||||
|
||||
struct EquipsData
|
||||
{
|
||||
EquipSlotData slot_data[EquipSlotType_Max];
|
||||
};
|
||||
|
||||
struct ExRingsData
|
||||
{
|
||||
int ring_level[4];
|
||||
};
|
||||
|
||||
struct WingsData
|
||||
{
|
||||
int level;
|
||||
//int star_lv;
|
||||
int exp;
|
||||
int openStatus;
|
||||
unsigned int ctime;//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
short pill[MAX_WING_PILL];
|
||||
};
|
||||
|
||||
struct WingsEquip
|
||||
{
|
||||
EquipSlotData wing_slot[WingSlotType_Max];
|
||||
};
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
||||
struct JingMaiData
|
||||
{
|
||||
int level;
|
||||
int stage;
|
||||
};
|
||||
|
||||
struct SkillsBreakData
|
||||
{
|
||||
int skill_break_level[5];
|
||||
|
||||
};
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct LoogsoulData
|
||||
{
|
||||
int stage;
|
||||
int level;
|
||||
int exp;
|
||||
char act;
|
||||
};
|
||||
|
||||
struct ShieldData
|
||||
{
|
||||
int stage;
|
||||
int level;
|
||||
int exp;
|
||||
char act;
|
||||
};
|
||||
|
||||
struct XueyuData
|
||||
{
|
||||
int stage;
|
||||
int level;
|
||||
int exp;
|
||||
char act;
|
||||
};
|
||||
|
||||
struct FuWenData
|
||||
{
|
||||
ItemData fuwen_slot[MAX_FUWEN];
|
||||
};
|
||||
|
||||
#define HEIRLOOM_TYPE_MAX 8 //<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||
//<2F><EFBFBD>RoleData<74>Ļ<EFBFBD><C4BB><EFBFBD>Ҫ֪ͨ<CDA8>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>RoleData<74><61>Э<EFBFBD>飡
|
||||
struct RoleData
|
||||
{
|
||||
int id;
|
||||
int job;
|
||||
int sex;
|
||||
double power;
|
||||
SkillsData skills;
|
||||
SkillsBreakData skillbreaks;
|
||||
int yuanshen_level;
|
||||
YuanShenData yuanshen_data;
|
||||
EquipsData equips_data;
|
||||
ExRingsData ex_rings;
|
||||
WingsData wings;
|
||||
//WingsEquip wingequips_data;
|
||||
JingMaiData jingmai_data;
|
||||
LoogsoulData loogsoul_data;
|
||||
//ShieldData shield_data;
|
||||
//XueyuData xueyu_data;
|
||||
FuWenData fuwen_data;
|
||||
int heirloom[HEIRLOOM_TYPE_MAX];
|
||||
int weapon_soul_id;//<2F><>ǰʹ<C7B0>õı<C3B5><C4B1><EFBFBD>ID
|
||||
};
|
||||
|
||||
struct RoleDatas
|
||||
{
|
||||
int role_count;
|
||||
RoleData roles[3];
|
||||
|
||||
RoleDatas() { memset(this, 0, sizeof(RoleDatas)); }
|
||||
};
|
||||
|
||||
//tolua_end
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
|
||||
36
Gateway/common/db/skill_data.h
Normal file
36
Gateway/common/db/skill_data.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#ifndef _SKILL_DB_DATA_H_
|
||||
#define _SKILL_DB_DATA_H_
|
||||
|
||||
#include "common.h"
|
||||
|
||||
/****************************************************************************************
|
||||
* <20><><EFBFBD><EFBFBD>DB<44><42><EFBFBD>ص<EFBFBD>һЩ<D2BB>ṹ<EFBFBD><E1B9B9><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
||||
****************************************************************************************/
|
||||
|
||||
//<2F><><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
#pragma pack(push, 1)
|
||||
struct BaseSkillData
|
||||
{
|
||||
uint16_t sid_; //<2F><><EFBFBD>ܵ<EFBFBD>ID
|
||||
unsigned char level_; //<2F><><EFBFBD>ܵĵȼ<C4B5>,<2C><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ѧϰ<D1A7><CFB0><EFBFBD><EFBFBD>0
|
||||
unsigned int cool_sec_; //<2F><>ȴʱ<C8B4><CAB1>(<28><>λ<EFBFBD>룩
|
||||
unsigned int exp_; //<2F><><EFBFBD>ܵľ<DCB5><C4BE><EFBFBD>
|
||||
};
|
||||
|
||||
struct PetSkillDb
|
||||
{
|
||||
int skillid_;
|
||||
int level_;
|
||||
int exp_;
|
||||
unsigned int cd_;
|
||||
int r1_;
|
||||
int r2_;
|
||||
int r3_;
|
||||
PetSkillDb()
|
||||
{
|
||||
memset(this, 0, sizeof(*this));
|
||||
}
|
||||
};
|
||||
#pragma pack(pop)
|
||||
#endif
|
||||
|
||||
33
Gateway/common/db/store_data.h
Normal file
33
Gateway/common/db/store_data.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#ifndef _STORE_DATA_H_
|
||||
#define _STORE_DATA_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "item_data.h"
|
||||
|
||||
struct StoreItemData
|
||||
{
|
||||
int id; //<2F><>Ʒid
|
||||
int currency_type; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int currency; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int discount; //<2F>ۿ<EFBFBD><DBBF><EFBFBD><EFBFBD>ͣ<EFBFBD>1<EFBFBD><31>8<EFBFBD>ۣ<EFBFBD>2<EFBFBD><32>5<EFBFBD><35>
|
||||
ItemData itemData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
StoreItemData()
|
||||
{
|
||||
memset(this, 0, sizeof(StoreItemData));
|
||||
}
|
||||
|
||||
public:
|
||||
//<2F><EFBFBD>useritem ע<><D7A2><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD> writeToPack, writeDbPack, writeCrcPack
|
||||
//<2F><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><CDB8>ͻ<EFBFBD><CDBB>˵İ<CBB5>
|
||||
void writeData(DataPacket& pack) {
|
||||
pack.writeBuf(this, sizeof(StoreItemData));
|
||||
}
|
||||
|
||||
void readData(DataPacketReader& pack) {
|
||||
pack.readBuf(this, sizeof(StoreItemData));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
15
Gateway/common/db/table_defs.h
Normal file
15
Gateway/common/db/table_defs.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef _TABLE_DEFS_H_
|
||||
#define _TABLE_DEFS_H_
|
||||
|
||||
// <20><><EFBFBD>ݿ<EFBFBD><DDBF>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
enum DB_FILED_TYPE {
|
||||
ftInt = 0,
|
||||
ftDouble,
|
||||
ftString,
|
||||
ftInt64,
|
||||
ftBlob,
|
||||
ftCount,
|
||||
};
|
||||
|
||||
#endif
|
||||
32
Gateway/common/db/wing_data.h
Normal file
32
Gateway/common/db/wing_data.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#ifndef _WING_H_
|
||||
#define _WING_H_
|
||||
|
||||
#include "common.h"
|
||||
#include "skill_data.h"
|
||||
#include "common/datalist.h"
|
||||
|
||||
|
||||
#define MAX_WING_SKILL 8 //<2F><>Ӧwingsystem<65><6D>MAX_SKILL
|
||||
#define MAX_WING_EQUIP 4
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct WingSkill : public BaseSkillData
|
||||
{
|
||||
int64_t guid_;
|
||||
};
|
||||
|
||||
struct WingRankData
|
||||
{
|
||||
int skill_grid_; //<2F><><EFBFBD>ܿո<DCBF>
|
||||
int skill_cnt_; //<2F><><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD>
|
||||
BaseSkillData skill_list_[MAX_WING_SKILL];
|
||||
};
|
||||
|
||||
struct WingRankDbData
|
||||
{
|
||||
WingRankData data_;
|
||||
StaticDataList<ItemData, MAX_WING_EQUIP> equip_;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
4926
Gateway/common/dbghelp.h
Normal file
4926
Gateway/common/dbghelp.h
Normal file
File diff suppressed because it is too large
Load Diff
19
Gateway/common/fastFT/fastFT.def
Normal file
19
Gateway/common/fastFT/fastFT.def
Normal file
@@ -0,0 +1,19 @@
|
||||
EXPORTS
|
||||
|
||||
;MBCSDef
|
||||
CreateMBCSFilter
|
||||
FreeMBCSFilter
|
||||
MemoryUsageOfMBCSFilter
|
||||
LoadMBCSFilterWords
|
||||
SaveMBCSFilterWords
|
||||
MatchMBCSFilterWord
|
||||
AddMBCSFilterStrToTable
|
||||
|
||||
;UCSDef
|
||||
CreateUCSFilter
|
||||
FreeUCSFilter
|
||||
MemoryUsageOfUCSFilter
|
||||
LoadUCSFilterWords
|
||||
SaveUCSFilterWords
|
||||
MatchUCSFilterWord
|
||||
AddUCSFilterStrToTable
|
||||
8
Gateway/common/fastFT/fastFT.h
Normal file
8
Gateway/common/fastFT/fastFT.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef _FASTFTMAIN_H_
|
||||
#define _FASTFTMAIN_H_
|
||||
|
||||
#include "MBCSDef.h"
|
||||
//#include "UCSDef.h"
|
||||
|
||||
#endif
|
||||
|
||||
69
Gateway/common/fastFT/makefile
Normal file
69
Gateway/common/fastFT/makefile
Normal file
@@ -0,0 +1,69 @@
|
||||
#--------------------------makefile description-----------------------------#
|
||||
#use for gcc/g++ compiler to complate/link
|
||||
#edited: miros
|
||||
#edit time: Sep 8, 2007
|
||||
#------------------------compiler and compiler fags-------------------------#
|
||||
COMPILER=gcc
|
||||
|
||||
#COMPLATEFLAGS=-g -D LINUX -D GUN_GCC -I ./../../common/
|
||||
COMPLATEFLAGS=-g -D FREEBSD -D GUN_GCC -I ./../../common/
|
||||
|
||||
LINKER=ar
|
||||
|
||||
LINKFLAGS=cvr
|
||||
|
||||
DEBUGER=gdb
|
||||
|
||||
#--------------------------project settings---------------------------------#
|
||||
|
||||
PROJECTNAME=../libs/bsd/dbg/fastFT.a
|
||||
|
||||
INCLUDES=./MBCSFilter.c\
|
||||
./UCSFilter.c
|
||||
|
||||
#LIBS=
|
||||
LIBS=
|
||||
|
||||
OBJECTS=./MBCSFilter.o ./UCSFilter.o
|
||||
|
||||
#EXTEDOBJECTS=
|
||||
EXTEDOBJECTS=
|
||||
|
||||
#------------------------------make actions---------------------------------#
|
||||
#use build to be default command
|
||||
build: complate link
|
||||
|
||||
complate:
|
||||
@echo "compiler: ${COMPILER}"
|
||||
@echo "begin complate source files:"
|
||||
@echo "${INCLUDES}"
|
||||
@$(COMPILER) $(COMPLATEFLAGS) $(INCLUDES) -c $^
|
||||
@echo "complate succeeded"
|
||||
|
||||
recomplate: cleanobjs complate
|
||||
|
||||
link:
|
||||
@echo "linker: ${LINKER}"
|
||||
@echo "begin link object files:"
|
||||
@echo "${OBJECTS}"
|
||||
@$(LINKER) $(LINKFLAGS) $(PROJECTNAME) $(OBJECTS)
|
||||
@echo "Done!"
|
||||
|
||||
cleanobjs:
|
||||
@-rm $(OBJECTS)
|
||||
|
||||
cleanapps:
|
||||
@-rm $(PROJECTNAME)
|
||||
|
||||
cleanall: cleanobjs cleanapps
|
||||
|
||||
rebuild: cleanall build
|
||||
|
||||
build-clear: build cleanobjs
|
||||
|
||||
all: rebuild cleanobjs
|
||||
|
||||
|
||||
#----------------------------exports labdles--------------------------------#
|
||||
.PHONY: all build rebuild complate recomplate link cleanobjs cleanapps cleanall build-clear
|
||||
|
||||
74
Gateway/common/fastFT/mbcs_def.h
Normal file
74
Gateway/common/fastFT/mbcs_def.h
Normal file
@@ -0,0 +1,74 @@
|
||||
#ifndef _MBCSDEF_H_
|
||||
#define _MBCSDEF_H_
|
||||
|
||||
#define MBCSARRAY_SIZE 255
|
||||
|
||||
#define NEW_FILTER
|
||||
|
||||
#pragma pack(push, 1)
|
||||
typedef struct tagFT_mbcs_char
|
||||
{
|
||||
char wordEnd; //<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Ƿ<C7B7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>
|
||||
#ifdef NEW_FILTER
|
||||
unsigned char idx[MBCSARRAY_SIZE];
|
||||
unsigned char count;
|
||||
tagFT_mbcs_char** mem;
|
||||
#else
|
||||
struct tagFT_mbcs_char* next[MBCSARRAY_SIZE]; //<2F><>ǰ<EFBFBD>ַ<EFBFBD><D6B7>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ַ<EFBFBD>ֵ-1
|
||||
#endif
|
||||
|
||||
#ifdef NEW_FILTER
|
||||
tagFT_mbcs_char* getNext(int index)
|
||||
{
|
||||
if (!mem) return NULL;
|
||||
unsigned char ridx = idx[index];
|
||||
if (ridx == 0) return NULL;
|
||||
return mem[ridx - 1];
|
||||
}
|
||||
void addNext(int index, tagFT_mbcs_char* next);
|
||||
#else
|
||||
tagFT_mbcs_char* getNext(int index)
|
||||
{
|
||||
return next[index];
|
||||
}
|
||||
void addNext(int index, tagFT_mbcs_char* next)
|
||||
{
|
||||
next[index] = next;
|
||||
}
|
||||
#endif
|
||||
|
||||
}FT_MBCS_CHAR, *PFT_MBCS_CHAR;
|
||||
#pragma pack(pop)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#ifndef STDCALL
|
||||
#if (defined(WIN32) || defined(WINDOWS))
|
||||
#define STDCALL __stdcall
|
||||
#else
|
||||
#define STDCALL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>MBCS<EFBFBD><EFBFBD><EFBFBD>δʱ<EFBFBD>
|
||||
*/
|
||||
PFT_MBCS_CHAR CreateMBCSFilter(void*);
|
||||
/*
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>MBCS<EFBFBD><EFBFBD><EFBFBD>δʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷű<EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
*/
|
||||
void STDCALL FreeMBCSFilter(PFT_MBCS_CHAR filter);
|
||||
int STDCALL LoadMBCSFilterWords(PFT_MBCS_CHAR filter, const char *fn);
|
||||
char* STDCALL MatchMBCSFilterWord(const PFT_MBCS_CHAR filter, const char *input, int *matchLen);
|
||||
//<2F><>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽<EFBFBD><EBB5BD><EFBFBD>δʱ<CEB4><CAB1><EFBFBD>
|
||||
int STDCALL AddMBCSFilterStrToTable(PFT_MBCS_CHAR filter,const char* str);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
174
Gateway/common/fastFT/mbcs_filter.cc
Normal file
174
Gateway/common/fastFT/mbcs_filter.cc
Normal file
@@ -0,0 +1,174 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include "mbcs_def.h"
|
||||
#include "memory/base_allocator.hpp"
|
||||
|
||||
#define toupper(c) (((c) >= 'a' && (c) <= 'z') ? (c) ^ 0x20 : (c))
|
||||
|
||||
BaseAllocator mbcsFilter("mbcsFilter");
|
||||
|
||||
#ifdef NEW_FILTER
|
||||
void tagFT_mbcs_char::addNext(int index, tagFT_mbcs_char* next)
|
||||
{
|
||||
unsigned char ridx = idx[index];
|
||||
assert(ridx == 0);
|
||||
mem = (tagFT_mbcs_char**)mbcsFilter.ReAllocBuffer(mem, (count + 1) * sizeof(tagFT_mbcs_char*));
|
||||
mem[count] = next;
|
||||
count++;
|
||||
idx[index] = count;
|
||||
}
|
||||
#endif
|
||||
|
||||
//<2F><>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽<EFBFBD><EBB5BD><EFBFBD>δʱ<CEB4><CAB1><EFBFBD>
|
||||
int STDCALL AddMBCSFilterStrToTable(PFT_MBCS_CHAR filter, const char* str)
|
||||
{
|
||||
int len = (int)strlen(str);
|
||||
PFT_MBCS_CHAR prev = filter;
|
||||
|
||||
if (!filter)
|
||||
return 0;
|
||||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
unsigned char index = str[i];
|
||||
index = toupper(index) - 1;
|
||||
|
||||
PFT_MBCS_CHAR next = prev->getNext(index);
|
||||
|
||||
if (!next)
|
||||
{
|
||||
next = CreateMBCSFilter(0);
|
||||
prev->addNext(index, next);
|
||||
}
|
||||
|
||||
if (i == (len - 1))
|
||||
next->wordEnd = 1;
|
||||
|
||||
prev = next;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
PFT_MBCS_CHAR CreateMBCSFilter(void*)
|
||||
{
|
||||
PFT_MBCS_CHAR pMBCSChar =
|
||||
(PFT_MBCS_CHAR)mbcsFilter.AllocBuffer(sizeof(FT_MBCS_CHAR));
|
||||
memset(pMBCSChar, 0, sizeof(FT_MBCS_CHAR));
|
||||
return pMBCSChar;
|
||||
}
|
||||
|
||||
void STDCALL FreeMBCSFilter(PFT_MBCS_CHAR filter)
|
||||
{
|
||||
if (!filter) return;
|
||||
|
||||
#ifdef NEW_FILTER
|
||||
if (filter->count > 0)
|
||||
{
|
||||
for (int i = 0; i < filter->count; i++)
|
||||
{
|
||||
PFT_MBCS_CHAR next = filter->mem[i];
|
||||
|
||||
if (next) FreeMBCSFilter(next);
|
||||
}
|
||||
}
|
||||
mbcsFilter.FreeBuffer(filter->mem);
|
||||
#else
|
||||
for (int i = 0; i < MBCSARRAY_SIZE; i++)
|
||||
{
|
||||
PFT_MBCS_CHAR next = filter->next[i];
|
||||
|
||||
if (next) FreeMBCSFilter(next);
|
||||
}
|
||||
#endif
|
||||
|
||||
mbcsFilter.FreeBuffer(filter);
|
||||
|
||||
filter = NULL;
|
||||
}
|
||||
|
||||
int STDCALL LoadMBCSFilterWords(PFT_MBCS_CHAR filter, const char* fn)
|
||||
{
|
||||
int nStrCount = 0;
|
||||
char szText[256] = {0};
|
||||
char* pStr = 0;
|
||||
FILE* fl = fopen(fn, "r");
|
||||
//<2F><><EFBFBD>鲢<EFBFBD><E9B2A2><EFBFBD><EFBFBD>UTF-8<>ļ<EFBFBD>BOM
|
||||
fread(szText, 3, 1, fl);
|
||||
|
||||
if ((*(int*)szText & 0x00FFFFFF) != 0xBFBBEF)
|
||||
fseek(fl, 0, 0);
|
||||
|
||||
while ((pStr = fgets(szText, 256, fl)))
|
||||
{
|
||||
size_t nLen = strlen(szText);
|
||||
|
||||
while (nLen > 0 && ((unsigned int)szText[nLen - 1] <= 0x20))
|
||||
{
|
||||
szText[nLen - 1] = 0;
|
||||
nLen--;
|
||||
}
|
||||
|
||||
if (nLen > 0 && AddMBCSFilterStrToTable(filter, szText))
|
||||
++nStrCount;
|
||||
}
|
||||
|
||||
fclose(fl);
|
||||
|
||||
return nStrCount;
|
||||
}
|
||||
|
||||
char* STDCALL MatchMBCSFilterWord(const PFT_MBCS_CHAR filter, const char* input, int* matchLen)
|
||||
{
|
||||
char* matchStart = NULL; //<2F><>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ַ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
char* matchEnd = NULL; //<2F><>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ַ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>,<2C><>ֵ<EFBFBD><D6B5>ȥlpMatchStart<72><74>Ϊ<EFBFBD><CEAA>ƥ<EFBFBD><C6A5><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
unsigned char ch;
|
||||
|
||||
while ((ch = *input))
|
||||
{
|
||||
ch = toupper(ch);
|
||||
PFT_MBCS_CHAR curFTChar = filter->getNext(ch - 1);
|
||||
|
||||
if (curFTChar)
|
||||
{
|
||||
char* test = matchStart = (char*)input;
|
||||
|
||||
do
|
||||
{
|
||||
test++;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Ƿ<C7B7><F1B4A6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>
|
||||
if (curFTChar->wordEnd)
|
||||
matchEnd = test;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5>
|
||||
ch = *test;
|
||||
if (!ch) break;
|
||||
|
||||
ch = toupper(ch);
|
||||
curFTChar = curFTChar->getNext(ch - 1);
|
||||
}
|
||||
while (curFTChar && *test);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
|
||||
if (matchEnd)
|
||||
break;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>MBCS<43><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ַ<EFBFBD>
|
||||
//if ( (unsigned char)(*pInput) >= 0x80 )
|
||||
// pInput += 2;
|
||||
//else pInput += 1;
|
||||
input++;
|
||||
}
|
||||
|
||||
char* result = (matchEnd ? matchStart : NULL);
|
||||
|
||||
if (matchLen)
|
||||
*matchLen = (int)(size_t)(result ? (matchEnd - matchStart) : 0);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
177
Gateway/common/gameMap/game_map.cc
Normal file
177
Gateway/common/gameMap/game_map.cc
Normal file
@@ -0,0 +1,177 @@
|
||||
#include <stdio.h>
|
||||
#include "os_def.h"
|
||||
#include "_ast.h"
|
||||
|
||||
#include <zlib.h>
|
||||
#include "stream.h"
|
||||
#include "zstream.h"
|
||||
#include "game_map.h"
|
||||
|
||||
#include "memory/base_allocator.hpp"
|
||||
|
||||
#ifndef _MSC_VER
|
||||
#include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
using namespace stream;
|
||||
using namespace zstream;
|
||||
|
||||
BaseAllocator GameMap::mapAlloc_("mapAlloc");
|
||||
|
||||
GameMap::GameMap()
|
||||
{
|
||||
width_ = 0;
|
||||
height_ = 0;
|
||||
moveable_index_ = NULL;
|
||||
moveable_ount_ = 0;
|
||||
}
|
||||
|
||||
GameMap::~GameMap()
|
||||
{
|
||||
if (moveable_index_)
|
||||
mapAlloc_.FreeBuffer(moveable_index_);
|
||||
}
|
||||
|
||||
|
||||
bool GameMap::LoadFromStream(BaseStream& stream, bool newver)
|
||||
{
|
||||
MAPFILE_HEADER hdr;
|
||||
MAPGrid* map_grid, *grid_ptr;
|
||||
|
||||
MAPFILE_HEADER_NEW hdr_n;
|
||||
MAPGrid_NEW* map_grid_n, *grid_ptr_n;
|
||||
|
||||
if (!newver)
|
||||
{
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ
|
||||
if (stream.read(&hdr, sizeof(hdr)) != sizeof(hdr))
|
||||
return false;
|
||||
|
||||
if (hdr.version_ != MapFileVersion_Current)
|
||||
return false;
|
||||
}
|
||||
|
||||
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶζ<DDB6>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
MemoryStream ms(NULL);
|
||||
if (newver)
|
||||
ms.copyFrom(stream, stream.getSize());
|
||||
else
|
||||
ms.copyFrom(stream, hdr.data_size_);
|
||||
|
||||
ms.setPosition(0);
|
||||
|
||||
//<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ZDecompressionStream deStream(ms, NULL);
|
||||
|
||||
if (newver)
|
||||
{
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ
|
||||
if (deStream.read(&hdr_n, sizeof(hdr_n)) != sizeof(hdr_n))
|
||||
return false;
|
||||
// <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
hdr_n.width_ = ntohl(hdr_n.width_);
|
||||
hdr_n.height_ = ntohl(hdr_n.height_);
|
||||
}
|
||||
|
||||
int max = 0;
|
||||
if (newver)
|
||||
{
|
||||
size_t grid_count = sizeof(MAPGrid_NEW) * hdr_n.width_ * hdr_n.height_;
|
||||
|
||||
grid_ptr_n = map_grid_n = (MAPGrid_NEW*)mapAlloc_.AllocBuffer(grid_count);
|
||||
|
||||
if (grid_count != (const size_t)deStream.read(map_grid_n, (const int)grid_count))
|
||||
return false;
|
||||
|
||||
max = hdr_n.width_ * hdr_n.height_;
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t grid_count = sizeof(MAPGrid) * hdr.width_ * hdr.height_;
|
||||
|
||||
grid_ptr = map_grid = (MAPGrid*)mapAlloc_.AllocBuffer(grid_count);
|
||||
|
||||
if (grid_count != (const size_t)deStream.read(map_grid, (const int)grid_count))
|
||||
return false;
|
||||
|
||||
max = hdr.width_ * hdr.height_;
|
||||
}
|
||||
|
||||
moveable_ount_ = 0;
|
||||
int* index_ptr = moveable_index_ = (int*)mapAlloc_.ReAllocBuffer(moveable_index_, max * sizeof(*index_ptr));
|
||||
memset(index_ptr, -1, max * sizeof(*index_ptr)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>memset<65><74><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (newver)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ɰ汾<C9B0>IJ<EFBFBD>һ<EFBFBD><D2BB>
|
||||
for (int i = 0; i < max; ++i)
|
||||
{
|
||||
if (grid_ptr_n->flag_ != gfBlock /*&& grid_ptr_n->flag_ != gfNofly*/)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>ߵ<EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>߾<EFBFBD><DFBE><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
int x = i / hdr_n.height_;
|
||||
int y = i % hdr_n.height_;
|
||||
|
||||
(*(index_ptr + (y * hdr_n.width_ + x))) = moveable_ount_;
|
||||
moveable_ount_++;
|
||||
}
|
||||
|
||||
//index_ptr++;
|
||||
grid_ptr_n++;
|
||||
}
|
||||
|
||||
width_ = hdr_n.width_;
|
||||
height_ = hdr_n.height_;
|
||||
|
||||
mapAlloc_.FreeBuffer(map_grid_n);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < max; ++i)
|
||||
{
|
||||
if ((grid_ptr->flag_ & MAPFLAG_MOVEABLE) != 0)
|
||||
{
|
||||
(*index_ptr) = moveable_ount_;
|
||||
moveable_ount_++;
|
||||
}
|
||||
|
||||
index_ptr++;
|
||||
grid_ptr++;
|
||||
}
|
||||
width_ = hdr.width_;
|
||||
height_ = hdr.height_;
|
||||
|
||||
mapAlloc_.FreeBuffer(map_grid);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GameMap::LoadFromFile(const char* fn, bool newver)
|
||||
{
|
||||
FileStream fs(fn, FileStream::faRead || FileStream::faShareRead, NULL);
|
||||
return LoadFromStream(fs, newver);
|
||||
}
|
||||
|
||||
void GameMap::initDefault(unsigned int w, unsigned int h)
|
||||
{
|
||||
// <20>ض<EFBFBD><D8B6>ط<EFBFBD><D8B7>Ż<EFBFBD><C5BB>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>óɿ<C3B3><C9BF><EFBFBD><EFBFBD>߶<EFBFBD>
|
||||
//<2F><><EFBFBD>ɳ<EFBFBD><C9B3><EFBFBD><EFBFBD>Ҷȵ<D2B6>ͼ
|
||||
int max = w * h;
|
||||
|
||||
moveable_ount_ = 0;
|
||||
int* index_ptr = moveable_index_ = (int*)mapAlloc_.ReAllocBuffer(moveable_index_, max * sizeof(*index_ptr));
|
||||
|
||||
for (int i = 0; i < max; ++i)
|
||||
{
|
||||
(*index_ptr) = moveable_ount_;
|
||||
moveable_ount_++;
|
||||
index_ptr++;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD>
|
||||
width_ = w;
|
||||
height_ = h;
|
||||
}
|
||||
|
||||
|
||||
142
Gateway/common/gameMap/game_map.h
Normal file
142
Gateway/common/gameMap/game_map.h
Normal file
@@ -0,0 +1,142 @@
|
||||
#ifndef _GAME_MAP_H_
|
||||
#define _GAME_MAP_H_
|
||||
|
||||
/*************************************************************
|
||||
* <09><>ͼ<EFBFBD><CDBC><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><EFBFBD><F3BDABB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ͼƬ<CDBC><C6AC><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD><DDA1><EFBFBD>ʹ<EFBFBD><CAB9>һ<EFBFBD><D2BB><EFBFBD>ֽڱ<D6BD>ʾһ<CABE><D2BB><EFBFBD><EFBFBD><EFBFBD>ꡣ
|
||||
* <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ֵΪ1<CEAA><31>ʱ<EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
|
||||
* <09><><EFBFBD>겻<EFBFBD><EAB2BB><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>
|
||||
*
|
||||
************************************************************/
|
||||
|
||||
//<2F><>ǰ<EFBFBD><C7B0>ͼ<EFBFBD>汾<EFBFBD><E6B1BE>
|
||||
const unsigned int MapFileVersion_Current = 0x0102;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
const unsigned int MAPFLAG_MOVEABLE = 0x8000;
|
||||
|
||||
/*
|
||||
* <20><>ͼ<EFBFBD>ļ<EFBFBD>ͷ<EFBFBD>ṹ
|
||||
*/
|
||||
#pragma pack(push, 1)
|
||||
struct MAPFILE_HEADER_NEW
|
||||
{
|
||||
char hdr_[5]; //"map"
|
||||
int ver_;
|
||||
unsigned char grid_size_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>64<36><34><EFBFBD><EFBFBD>
|
||||
int pxi_width_; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>С
|
||||
int pix_height_;
|
||||
int width_; //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
||||
int height_; //<2F><>ͼ<EFBFBD>߶<EFBFBD>
|
||||
};
|
||||
|
||||
struct MAPFILE_HEADER
|
||||
{
|
||||
unsigned int version_; //<2F>ļ<EFBFBD><C4BC>汾0x0101
|
||||
int width_; //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
||||
int height_; //<2F><>ͼ<EFBFBD>߶<EFBFBD>
|
||||
int bg_img_; //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
||||
unsigned int data_size_; //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6>ֽڳ<D6BD><DAB3><EFBFBD>
|
||||
unsigned char reseve_[32];
|
||||
};
|
||||
|
||||
// <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Ľṹ
|
||||
struct MAPGrid
|
||||
{
|
||||
unsigned short bg_img_; // <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
||||
unsigned short ft_img_; // ǰ<><C7B0>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
||||
unsigned short flag_; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
|
||||
unsigned char obj_root_; // <20>زķ<D8B2><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char reseve_; // ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned short effect_id_; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Чid
|
||||
unsigned short width_; // <20><>Ч<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
||||
unsigned short height_; // <20><>Ч<EFBFBD>ĸ߶<C4B8>
|
||||
} ;
|
||||
|
||||
enum GripFlag
|
||||
{
|
||||
gfBlock = 0, //<2F>赲
|
||||
gfCanMove = 1, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
gfThrough = 2, //<><CDB8><EFBFBD><EFBFBD>
|
||||
gfNofly = 3, //<2F>赲<EFBFBD>Ҳ<EFBFBD><D2B2>ܷ<EFBFBD>Ծ
|
||||
};
|
||||
|
||||
struct MAPGrid_NEW
|
||||
{
|
||||
unsigned char flag_; // 0=<3D>赵<EFBFBD><E8B5B5>1=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,2=<><CDB8><EFBFBD><EFBFBD>,3=<3D>赲<EFBFBD>Ҳ<EFBFBD><D2B2>ܷ<EFBFBD>Ծ
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
class GameMap
|
||||
{
|
||||
private:
|
||||
static BaseAllocator mapAlloc_;
|
||||
protected:
|
||||
unsigned int width_; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
||||
unsigned int height_; // <20><>ͼ<EFBFBD>߶<EFBFBD>
|
||||
int* moveable_index_; // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ŀ<EFBFBD><C4BF>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>ʱûʹ<C3BB>õ<EFBFBD>
|
||||
int moveable_ount_; // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
public:
|
||||
GameMap();
|
||||
virtual ~GameMap();
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>ص<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD> */
|
||||
bool LoadFromStream(stream::BaseStream& stream, bool newver);
|
||||
/* <20><><EFBFBD>ļ<EFBFBD><C4BC>м<EFBFBD><D0BC>ص<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD> */
|
||||
bool LoadFromFile(const char* fn, bool newver);
|
||||
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ĵ<EFBFBD>ͼ */
|
||||
void initDefault(unsigned int w, unsigned int h);
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD> */
|
||||
inline int getWidth()
|
||||
{
|
||||
return width_;
|
||||
}
|
||||
/* <20><>ȡ<EFBFBD><C8A1>ͼ<EFBFBD>߶<EFBFBD> */
|
||||
inline int getHeight()
|
||||
{
|
||||
return height_;
|
||||
}
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
inline int getMoveableCount()
|
||||
{
|
||||
return moveable_ount_;
|
||||
}
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA>Ŀ */
|
||||
inline int getUnitCount() const
|
||||
{
|
||||
return width_ * height_;
|
||||
}
|
||||
|
||||
inline int getPosIndex(unsigned int x, unsigned int y)
|
||||
{
|
||||
if (x >= width_ || y >= height_)
|
||||
return -1;
|
||||
|
||||
return y * width_ + x;
|
||||
}
|
||||
|
||||
/* <20>жϵ<D0B6>ͼ<EFBFBD><CDBC>x, y<><79><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true<75><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD> */
|
||||
inline bool canMove(unsigned int x, unsigned int y)
|
||||
{
|
||||
if (x >= width_ || y >= height_)
|
||||
return false;
|
||||
|
||||
return moveable_index_[y * width_ + x] != -1;
|
||||
}
|
||||
|
||||
int getMapPosValue(unsigned int x, unsigned int y)
|
||||
{
|
||||
if (x >= width_ || y >= height_)
|
||||
return -1;
|
||||
|
||||
return moveable_index_[y * width_ + x] != -1 ? 0 : -1;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
766
Gateway/common/gameMap/stlastar.h
Normal file
766
Gateway/common/gameMap/stlastar.h
Normal file
@@ -0,0 +1,766 @@
|
||||
/*
|
||||
A* Algorithm Implementation using STL is
|
||||
Copyright (C)2001-2005 Justin Heyes-Jones
|
||||
|
||||
Permission is given by the author to freely redistribute and
|
||||
include this code in any program as long as this credit is
|
||||
given where due.
|
||||
|
||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
|
||||
INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE
|
||||
IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
|
||||
OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
|
||||
PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED
|
||||
CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL
|
||||
DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
|
||||
NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
|
||||
WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE
|
||||
OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
|
||||
THIS DISCLAIMER.
|
||||
|
||||
Use at your own risk!
|
||||
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <_ast.h>
|
||||
|
||||
#include <stream.h>
|
||||
|
||||
|
||||
//#include <iostream>
|
||||
|
||||
//#include <conio.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "memory/objpool.hpp"
|
||||
|
||||
// stl includes
|
||||
#include <algorithm>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
// fast fixed size memory allocator, used for fast node memory management
|
||||
//#include "fsa.h"
|
||||
|
||||
// Fixed size memory allocator can be disabled to compare performance
|
||||
// Uses std new and delete instead if you turn it off
|
||||
#define USE_FSA_MEMORY 1
|
||||
|
||||
// disable warning that debugging information has lines that are truncated
|
||||
// occurs in stl headers
|
||||
#pragma warning( disable : 4786 )
|
||||
|
||||
// The AStar search class. UserState is the users state space type
|
||||
template <class UserState> class AStarSearch
|
||||
{
|
||||
|
||||
public: // data
|
||||
|
||||
enum
|
||||
{
|
||||
SEARCH_STATE_NOT_INITIALISED,
|
||||
SEARCH_STATE_SEARCHING,
|
||||
SEARCH_STATE_SUCCEEDED,
|
||||
SEARCH_STATE_FAILED,
|
||||
SEARCH_STATE_OUT_OF_MEMORY,
|
||||
SEARCH_STATE_INVALID
|
||||
};
|
||||
|
||||
|
||||
// A node represents a possible state in the search
|
||||
// The user provided state type is included inside this type
|
||||
|
||||
public:
|
||||
|
||||
class Node
|
||||
{
|
||||
public:
|
||||
|
||||
Node *parent; // used during the search to record the parent of successor nodes
|
||||
Node *child; // used after the search for the application to view the search in reverse
|
||||
|
||||
int g; // cost of this node + it's predecessors
|
||||
int h; // heuristic estimate of distance to goal
|
||||
int f; // sum of cumulative cost of predecessors and self and heuristic
|
||||
|
||||
Node() :
|
||||
parent( 0 ),
|
||||
child( 0 ),
|
||||
g(0 ),
|
||||
h( 0),
|
||||
f( 0 )
|
||||
{
|
||||
}
|
||||
|
||||
UserState m_UserState;
|
||||
};
|
||||
|
||||
|
||||
// For sorting the heap the STL needs compare function that lets us compare
|
||||
// the f value of two nodes
|
||||
|
||||
class HeapCompare_f
|
||||
{
|
||||
public:
|
||||
|
||||
bool operator() ( const Node *x, const Node *y ) const
|
||||
{
|
||||
return x->f > y->f;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public: // methods
|
||||
|
||||
|
||||
// constructor just initialises private data
|
||||
AStarSearch( int MaxNodes = 1000 ) :
|
||||
m_AllocateNodeCount(0),
|
||||
#if USE_FSA_MEMORY
|
||||
m_FixedSizeAllocator( "Astar" ),
|
||||
#endif
|
||||
m_State( SEARCH_STATE_NOT_INITIALISED ),
|
||||
m_CurrentSolutionNode( NULL ),
|
||||
m_CancelRequest( false )
|
||||
{
|
||||
}
|
||||
|
||||
// call at any time to cancel the search and free up all the memory
|
||||
void CancelSearch()
|
||||
{
|
||||
m_CancelRequest = true;
|
||||
}
|
||||
|
||||
// Set Start and goal states
|
||||
void SetStartAndGoalStates( UserState &Start, UserState &Goal )
|
||||
{
|
||||
m_CancelRequest = false;
|
||||
|
||||
m_Start = AllocateNode();
|
||||
m_Goal = AllocateNode();
|
||||
|
||||
assert((m_Start != NULL && m_Goal != NULL));
|
||||
|
||||
m_Start->m_UserState = Start;
|
||||
m_Goal->m_UserState = Goal;
|
||||
|
||||
m_State = SEARCH_STATE_SEARCHING;
|
||||
|
||||
// Initialise the AStar specific parts of the Start Node
|
||||
// The user only needs fill out the state information
|
||||
|
||||
m_Start->g = 0;
|
||||
m_Start->h = m_Start->m_UserState.GoalDistanceEstimate( m_Goal->m_UserState );
|
||||
m_Start->f = m_Start->g + m_Start->h;
|
||||
m_Start->parent = 0;
|
||||
|
||||
// Push the start node on the Open list
|
||||
|
||||
m_OpenList.push_back( m_Start ); // heap now unsorted
|
||||
|
||||
// Sort back element into heap
|
||||
push_heap( m_OpenList.begin(), m_OpenList.end(), HeapCompare_f() );
|
||||
|
||||
// Initialise counter for search steps
|
||||
m_Steps = 0;
|
||||
}
|
||||
|
||||
// Advances search one step
|
||||
unsigned int SearchStep()
|
||||
{
|
||||
// Firstly break if the user has not initialised the search
|
||||
assert( (m_State > SEARCH_STATE_NOT_INITIALISED) &&
|
||||
(m_State < SEARCH_STATE_INVALID) );
|
||||
|
||||
// Next I want it to be safe to do a searchstep once the search has succeeded...
|
||||
if ( (m_State == SEARCH_STATE_SUCCEEDED) ||
|
||||
(m_State == SEARCH_STATE_FAILED)
|
||||
)
|
||||
{
|
||||
return m_State;
|
||||
}
|
||||
|
||||
// Failure is defined as emptying the open list as there is nothing left to
|
||||
// search...
|
||||
// New: Allow user abort
|
||||
if ( m_OpenList.empty() || m_CancelRequest )
|
||||
{
|
||||
FreeAllNodes();
|
||||
m_State = SEARCH_STATE_FAILED;
|
||||
return m_State;
|
||||
}
|
||||
|
||||
// Incremement step count
|
||||
m_Steps ++;
|
||||
|
||||
// Pop the best node (the one with the lowest f)
|
||||
Node *n = m_OpenList.front(); // get pointer to the node
|
||||
pop_heap( m_OpenList.begin(), m_OpenList.end(), HeapCompare_f() );
|
||||
m_OpenList.pop_back();
|
||||
|
||||
// Check for the goal, once we pop that we're done
|
||||
if ( n->m_UserState.IsGoal( m_Goal->m_UserState ) )
|
||||
{
|
||||
// The user is going to use the Goal Node he passed in
|
||||
// so copy the parent pointer of n
|
||||
m_Goal->parent = n->parent;
|
||||
|
||||
// A special case is that the goal was passed in as the start state
|
||||
// so handle that here
|
||||
if ( false == n->m_UserState.IsSameState( m_Start->m_UserState ) )
|
||||
{
|
||||
FreeNode( n );
|
||||
|
||||
// set the child pointers in each node (except Goal which has no child)
|
||||
Node *nodeChild = m_Goal;
|
||||
Node *nodeParent = m_Goal->parent;
|
||||
|
||||
do
|
||||
{
|
||||
nodeParent->child = nodeChild;
|
||||
|
||||
nodeChild = nodeParent;
|
||||
nodeParent = nodeParent->parent;
|
||||
|
||||
}
|
||||
while( nodeChild != m_Start ); // Start is always the first node by definition
|
||||
|
||||
}
|
||||
|
||||
// delete nodes that aren't needed for the solution
|
||||
FreeUnusedNodes();
|
||||
|
||||
m_State = SEARCH_STATE_SUCCEEDED;
|
||||
|
||||
return m_State;
|
||||
}
|
||||
else // not goal
|
||||
{
|
||||
|
||||
// We now need to generate the successors of this node
|
||||
// The user helps us to do this, and we keep the new nodes in
|
||||
// m_Successors ...
|
||||
|
||||
m_Successors.clear(); // empty vector of successor nodes to n
|
||||
|
||||
// User provides this functions and uses AddSuccessor to add each successor of
|
||||
// node 'n' to m_Successors
|
||||
bool ret = n->m_UserState.GetSuccessors( this, n->parent ? &n->parent->m_UserState : NULL );
|
||||
|
||||
if ( !ret )
|
||||
{
|
||||
|
||||
typename vector< Node * >::iterator successor;
|
||||
|
||||
// free the nodes that may previously have been added
|
||||
for ( successor = m_Successors.begin(); successor != m_Successors.end(); successor ++ )
|
||||
{
|
||||
FreeNode( (*successor) );
|
||||
}
|
||||
|
||||
m_Successors.clear(); // empty vector of successor nodes to n
|
||||
|
||||
// free up everything else we allocated
|
||||
FreeAllNodes();
|
||||
|
||||
m_State = SEARCH_STATE_OUT_OF_MEMORY;
|
||||
return m_State;
|
||||
}
|
||||
|
||||
// Now handle each successor to the current node ...
|
||||
for ( typename vector< Node * >::iterator successor = m_Successors.begin(); successor != m_Successors.end(); successor ++ )
|
||||
{
|
||||
|
||||
// The g value for this successor ...
|
||||
int newg = n->g + n->m_UserState.GetCost( (*successor)->m_UserState );
|
||||
|
||||
// Now we need to find whether the node is on the open or closed lists
|
||||
// If it is but the node that is already on them is better (lower g)
|
||||
// then we can forget about this successor
|
||||
|
||||
// First linear search of open list to find node
|
||||
|
||||
typename vector< Node * >::iterator openlist_result;
|
||||
|
||||
for ( openlist_result = m_OpenList.begin(); openlist_result != m_OpenList.end(); openlist_result ++ )
|
||||
{
|
||||
if ( (*openlist_result)->m_UserState.IsSameState( (*successor)->m_UserState ) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( openlist_result != m_OpenList.end() )
|
||||
{
|
||||
|
||||
// we found this state on open
|
||||
|
||||
if ( (*openlist_result)->g <= newg )
|
||||
{
|
||||
FreeNode( (*successor) );
|
||||
|
||||
// the one on Open is cheaper than this one
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
typename vector< Node * >::iterator closedlist_result;
|
||||
|
||||
for ( closedlist_result = m_ClosedList.begin(); closedlist_result != m_ClosedList.end(); closedlist_result ++ )
|
||||
{
|
||||
if ( (*closedlist_result)->m_UserState.IsSameState( (*successor)->m_UserState ) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( closedlist_result != m_ClosedList.end() )
|
||||
{
|
||||
|
||||
// we found this state on closed
|
||||
|
||||
if ( (*closedlist_result)->g <= newg )
|
||||
{
|
||||
// the one on Closed is cheaper than this one
|
||||
FreeNode( (*successor) );
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// This node is the best node so far with this particular state
|
||||
// so lets keep it and set up its AStar specific data ...
|
||||
|
||||
(*successor)->parent = n;
|
||||
(*successor)->g = newg;
|
||||
(*successor)->h = (*successor)->m_UserState.GoalDistanceEstimate( m_Goal->m_UserState );
|
||||
(*successor)->f = (*successor)->g + (*successor)->h;
|
||||
|
||||
// Remove successor from closed if it was on it
|
||||
|
||||
if ( closedlist_result != m_ClosedList.end() )
|
||||
{
|
||||
// remove it from Closed
|
||||
FreeNode( (*closedlist_result) );
|
||||
m_ClosedList.erase( closedlist_result );
|
||||
|
||||
// Fix thanks to ...
|
||||
// Greg Douglas <gregdouglasmail@gmail.com>
|
||||
// who noticed that this code path was incorrect
|
||||
// Here we have found a new state which is already CLOSED
|
||||
// anus
|
||||
|
||||
}
|
||||
|
||||
// Update old version of this node
|
||||
if ( openlist_result != m_OpenList.end() )
|
||||
{
|
||||
|
||||
FreeNode( (*openlist_result) );
|
||||
m_OpenList.erase( openlist_result );
|
||||
|
||||
// re-make the heap
|
||||
// make_heap rather than sort_heap is an essential bug fix
|
||||
// thanks to Mike Ryynanen for pointing this out and then explaining
|
||||
// it in detail. sort_heap called on an invalid heap does not work
|
||||
make_heap( m_OpenList.begin(), m_OpenList.end(), HeapCompare_f() );
|
||||
|
||||
}
|
||||
|
||||
// heap now unsorted
|
||||
m_OpenList.push_back( (*successor) );
|
||||
|
||||
// sort back element into heap
|
||||
push_heap( m_OpenList.begin(), m_OpenList.end(), HeapCompare_f() );
|
||||
|
||||
}
|
||||
|
||||
// push n onto Closed, as we have expanded it now
|
||||
|
||||
m_ClosedList.push_back( n );
|
||||
|
||||
} // end else (not goal so expand)
|
||||
|
||||
return m_State; // Succeeded bool is false at this point.
|
||||
|
||||
}
|
||||
|
||||
// User calls this to add a successor to a list of successors
|
||||
// when expanding the search frontier
|
||||
bool AddSuccessor( UserState &State )
|
||||
{
|
||||
Node *node = AllocateNode();
|
||||
|
||||
if ( node )
|
||||
{
|
||||
node->m_UserState = State;
|
||||
|
||||
m_Successors.push_back( node );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Free the solution nodes
|
||||
// This is done to clean up all used Node memory when you are done with the
|
||||
// search
|
||||
void FreeSolutionNodes()
|
||||
{
|
||||
Node *n = m_Start;
|
||||
|
||||
if ( m_Start->child )
|
||||
{
|
||||
do
|
||||
{
|
||||
Node *del = n;
|
||||
n = n->child;
|
||||
FreeNode( del );
|
||||
|
||||
del = NULL;
|
||||
|
||||
} while( n != m_Goal );
|
||||
|
||||
FreeNode( n ); // Delete the goal
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// if the start node is the solution we need to just delete the start and goal
|
||||
// nodes
|
||||
FreeNode( m_Start );
|
||||
FreeNode( m_Goal );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Functions for traversing the solution
|
||||
|
||||
// Get start node
|
||||
UserState *GetSolutionStart()
|
||||
{
|
||||
m_CurrentSolutionNode = m_Start;
|
||||
if ( m_Start )
|
||||
{
|
||||
return &m_Start->m_UserState;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Get next node
|
||||
UserState *GetSolutionNext()
|
||||
{
|
||||
if ( m_CurrentSolutionNode )
|
||||
{
|
||||
if ( m_CurrentSolutionNode->child )
|
||||
{
|
||||
|
||||
Node *child = m_CurrentSolutionNode->child;
|
||||
|
||||
m_CurrentSolutionNode = m_CurrentSolutionNode->child;
|
||||
|
||||
return &child->m_UserState;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Get end node
|
||||
UserState *GetSolutionEnd()
|
||||
{
|
||||
m_CurrentSolutionNode = m_Goal;
|
||||
if ( m_Goal )
|
||||
{
|
||||
return &m_Goal->m_UserState;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Step solution iterator backwards
|
||||
UserState *GetSolutionPrev()
|
||||
{
|
||||
if ( m_CurrentSolutionNode )
|
||||
{
|
||||
if ( m_CurrentSolutionNode->parent )
|
||||
{
|
||||
|
||||
Node *parent = m_CurrentSolutionNode->parent;
|
||||
|
||||
m_CurrentSolutionNode = m_CurrentSolutionNode->parent;
|
||||
|
||||
return &parent->m_UserState;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// For educational use and debugging it is useful to be able to view
|
||||
// the open and closed list at each step, here are two functions to allow that.
|
||||
|
||||
UserState *GetOpenListStart()
|
||||
{
|
||||
int f,g,h;
|
||||
return GetOpenListStart( f,g,h );
|
||||
}
|
||||
|
||||
UserState *GetOpenListStart( int &f, int &g, int &h )
|
||||
{
|
||||
iterDbgOpen = m_OpenList.begin();
|
||||
if ( iterDbgOpen != m_OpenList.end() )
|
||||
{
|
||||
f = (*iterDbgOpen)->f;
|
||||
g = (*iterDbgOpen)->g;
|
||||
h = (*iterDbgOpen)->h;
|
||||
return &(*iterDbgOpen)->m_UserState;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
UserState *GetOpenListNext()
|
||||
{
|
||||
int f,g,h;
|
||||
return GetOpenListNext( f,g,h );
|
||||
}
|
||||
|
||||
UserState *GetOpenListNext( int &f, int &g, int &h )
|
||||
{
|
||||
iterDbgOpen++;
|
||||
if ( iterDbgOpen != m_OpenList.end() )
|
||||
{
|
||||
f = (*iterDbgOpen)->f;
|
||||
g = (*iterDbgOpen)->g;
|
||||
h = (*iterDbgOpen)->h;
|
||||
return &(*iterDbgOpen)->m_UserState;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
UserState *GetClosedListStart()
|
||||
{
|
||||
int f,g,h;
|
||||
return GetClosedListStart( f,g,h );
|
||||
}
|
||||
|
||||
UserState *GetClosedListStart( int &f, int &g, int &h )
|
||||
{
|
||||
iterDbgClosed = m_ClosedList.begin();
|
||||
if ( iterDbgClosed != m_ClosedList.end() )
|
||||
{
|
||||
f = (*iterDbgClosed)->f;
|
||||
g = (*iterDbgClosed)->g;
|
||||
h = (*iterDbgClosed)->h;
|
||||
|
||||
return &(*iterDbgClosed)->m_UserState;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
UserState *GetClosedListNext()
|
||||
{
|
||||
int f,g,h;
|
||||
return GetClosedListNext( f,g,h );
|
||||
}
|
||||
|
||||
UserState *GetClosedListNext( int &f, int &g, int &h )
|
||||
{
|
||||
iterDbgClosed++;
|
||||
if ( iterDbgClosed != m_ClosedList.end() )
|
||||
{
|
||||
f = (*iterDbgClosed)->f;
|
||||
g = (*iterDbgClosed)->g;
|
||||
h = (*iterDbgClosed)->h;
|
||||
|
||||
return &(*iterDbgClosed)->m_UserState;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Get the number of steps
|
||||
|
||||
int GetStepCount() { return m_Steps; }
|
||||
|
||||
void EnsureMemoryFreed()
|
||||
{
|
||||
#if USE_FSA_MEMORY
|
||||
assert(m_AllocateNodeCount == 0);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
private: // methods
|
||||
|
||||
// This is called when a search fails or is cancelled to free all used
|
||||
// memory
|
||||
void FreeAllNodes()
|
||||
{
|
||||
// iterate open list and delete all nodes
|
||||
typename vector< Node * >::iterator iterOpen = m_OpenList.begin();
|
||||
|
||||
while( iterOpen != m_OpenList.end() )
|
||||
{
|
||||
Node *n = (*iterOpen);
|
||||
FreeNode( n );
|
||||
|
||||
iterOpen ++;
|
||||
}
|
||||
|
||||
m_OpenList.clear();
|
||||
|
||||
// iterate closed list and delete unused nodes
|
||||
typename vector< Node * >::iterator iterClosed;
|
||||
|
||||
for ( iterClosed = m_ClosedList.begin(); iterClosed != m_ClosedList.end(); iterClosed ++ )
|
||||
{
|
||||
Node *n = (*iterClosed);
|
||||
FreeNode( n );
|
||||
}
|
||||
|
||||
m_ClosedList.clear();
|
||||
|
||||
// delete the goal
|
||||
|
||||
FreeNode(m_Goal);
|
||||
}
|
||||
|
||||
|
||||
// This call is made by the search class when the search ends. A lot of nodes may be
|
||||
// created that are still present when the search ends. They will be deleted by this
|
||||
// routine once the search ends
|
||||
void FreeUnusedNodes()
|
||||
{
|
||||
// iterate open list and delete unused nodes
|
||||
typename vector< Node * >::iterator iterOpen = m_OpenList.begin();
|
||||
|
||||
while( iterOpen != m_OpenList.end() )
|
||||
{
|
||||
Node *n = (*iterOpen);
|
||||
|
||||
if ( !n->child )
|
||||
{
|
||||
FreeNode( n );
|
||||
|
||||
n = NULL;
|
||||
}
|
||||
|
||||
iterOpen ++;
|
||||
}
|
||||
|
||||
m_OpenList.clear();
|
||||
|
||||
// iterate closed list and delete unused nodes
|
||||
typename vector< Node * >::iterator iterClosed;
|
||||
|
||||
for ( iterClosed = m_ClosedList.begin(); iterClosed != m_ClosedList.end(); iterClosed ++ )
|
||||
{
|
||||
Node *n = (*iterClosed);
|
||||
|
||||
if ( !n->child )
|
||||
{
|
||||
FreeNode( n );
|
||||
n = NULL;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
m_ClosedList.clear();
|
||||
|
||||
}
|
||||
|
||||
// Node memory management
|
||||
Node *AllocateNode()
|
||||
{
|
||||
|
||||
#if !USE_FSA_MEMORY
|
||||
Node *p = new Node;
|
||||
return p;
|
||||
#else
|
||||
Node *address = m_FixedSizeAllocator.Alloc();
|
||||
|
||||
if ( !address )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
m_AllocateNodeCount ++;
|
||||
Node *p = new (address) Node;
|
||||
return p;
|
||||
#endif
|
||||
}
|
||||
|
||||
void FreeNode( Node *node )
|
||||
{
|
||||
|
||||
m_AllocateNodeCount --;
|
||||
|
||||
#if !USE_FSA_MEMORY
|
||||
delete node;
|
||||
#else
|
||||
m_FixedSizeAllocator.Free( node );
|
||||
#endif
|
||||
}
|
||||
|
||||
private: // data
|
||||
|
||||
// Heap (simple vector but used as a heap, cf. Steve Rabin's game gems article)
|
||||
vector< Node *> m_OpenList;
|
||||
|
||||
// Closed list is a vector.
|
||||
vector< Node * > m_ClosedList;
|
||||
|
||||
// Successors is a vector filled out by the user each type successors to a node
|
||||
// are generated
|
||||
vector< Node * > m_Successors;
|
||||
|
||||
// State
|
||||
unsigned int m_State;
|
||||
|
||||
// Counts steps
|
||||
int m_Steps;
|
||||
|
||||
// Start and goal state pointers
|
||||
Node *m_Start;
|
||||
Node *m_Goal;
|
||||
|
||||
Node *m_CurrentSolutionNode;
|
||||
|
||||
#if USE_FSA_MEMORY
|
||||
// Memory
|
||||
ObjPool<Node>m_FixedSizeAllocator;
|
||||
//FixedSizeAllocator<Node> m_FixedSizeAllocator;
|
||||
#endif
|
||||
|
||||
//Debug : need to keep these two iterators around
|
||||
// for the user Dbg functions
|
||||
typename vector< Node * >::iterator iterDbgOpen;
|
||||
typename vector< Node * >::iterator iterDbgClosed;
|
||||
|
||||
// debugging : count memory allocation and free's
|
||||
int m_AllocateNodeCount;
|
||||
|
||||
bool m_CancelRequest;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
65
Gateway/common/gate/gate_manager.cc
Normal file
65
Gateway/common/gate/gate_manager.cc
Normal file
@@ -0,0 +1,65 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "os_def.h"
|
||||
#include "_ast.h"
|
||||
|
||||
#include "x_thread.h"
|
||||
#include "x_tick.h"
|
||||
#include "x_lock.h"
|
||||
#include "container/queue_list.h"
|
||||
#include "net/base_socket.h"
|
||||
#include "share_util.h"
|
||||
#include "memory/buffer_allocator.h"
|
||||
#include "gate_proto.h"
|
||||
#include "server_def.h"
|
||||
#include "appitnmsg.h"
|
||||
#include "data_packet.hpp"
|
||||
#include "net/send_packet_pool.h"
|
||||
#include "net/work_socket.h"
|
||||
#include "net/net_session.h"
|
||||
#include "net/server_socket.h"
|
||||
#include "gate_user.h"
|
||||
#include "gate_session.h"
|
||||
#include "gate_manager.h"
|
||||
|
||||
GateManager::GateManager(const char* name) : Inherited(name)
|
||||
{
|
||||
ZeroMemory(gate_list_, sizeof(gate_list_));
|
||||
}
|
||||
|
||||
GateManager::~GateManager()
|
||||
{
|
||||
}
|
||||
|
||||
bool GateManager::Startup()
|
||||
{
|
||||
for (int i = 0; i < MaxGateCount; ++i)
|
||||
{
|
||||
gate_list_[i]->gate_idx_ = i;
|
||||
}
|
||||
|
||||
return Inherited::Startup();
|
||||
}
|
||||
|
||||
NetSession* GateManager::NewSession(SOCKET s, sockaddr_in* addrIn)
|
||||
{
|
||||
for (int i = 0; i < MaxGateCount; ++i)
|
||||
{
|
||||
if (!gate_list_[i]->connected())
|
||||
{
|
||||
gate_list_[i]->SetClientSocket(s, addrIn);
|
||||
gate_list_[i]->ClearSendBuffers();
|
||||
|
||||
OutputMsg(rmError, "new gate connect,idx=%d", gate_list_[i]->gate_idx_);
|
||||
return gate_list_[i];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void GateManager::DestroySession(NetSession*)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
60
Gateway/common/gate/gate_manager.h
Normal file
60
Gateway/common/gate/gate_manager.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#ifndef _GATE_MANAGER_H_
|
||||
#define _GATE_MANAGER_H_
|
||||
|
||||
class GateSession;
|
||||
|
||||
using namespace container;
|
||||
|
||||
class GateManager
|
||||
: public ServerSocket
|
||||
{
|
||||
public:
|
||||
typedef ServerSocket Inherited;
|
||||
static const int MaxGateCount = 1;
|
||||
|
||||
public:
|
||||
GateManager(const char* name);
|
||||
~GateManager();
|
||||
|
||||
virtual void Initialize() = 0;
|
||||
virtual void Uninitialize() = 0;
|
||||
|
||||
bool Startup();
|
||||
|
||||
inline GateSession* GetGate(int idx)
|
||||
{
|
||||
if (idx >= 0 && idx < (int)ArrayCount(gate_list_))
|
||||
return gate_list_[idx];
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
inline GateUser* GetUser(NetId& netid)
|
||||
{
|
||||
GateSession* gate = GetGate(netid.gate_id_);
|
||||
return gate ? gate->GetUser(netid) : NULL;
|
||||
}
|
||||
|
||||
inline void PostCloseUser(NetId& netid, const char* reason, int p1 = 0, int p2 = 0)
|
||||
{
|
||||
OutputMsg(rmError, "GateManager::PostCloseUser %s:%d:%d", reason ? reason : "", p1, p2);
|
||||
|
||||
GateSession* gate = GetGate(netid.gate_id_);
|
||||
|
||||
if (gate)
|
||||
{
|
||||
gate->PostCloseUser(netid, 0, reason, p1, p2);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
NetSession* NewSession(SOCKET socket, sockaddr_in* addrin);
|
||||
void DestroySession(NetSession* client);
|
||||
|
||||
protected:
|
||||
GateSession* gate_list_[MaxGateCount]; //<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
28
Gateway/common/gate/gate_proto.h
Normal file
28
Gateway/common/gate/gate_proto.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#ifndef _GATE_PROTO_H_
|
||||
#define _GATE_PROTO_H_
|
||||
|
||||
/********************************************************
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>Э<EFBFBD><D0AD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD>
|
||||
**********************************************************/
|
||||
|
||||
#define GW_OPEN 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>Ự<EFBFBD><E1BBB0><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>Ϣ
|
||||
#define GW_CLOSE 2 //<2F>ر<EFBFBD><D8B1>û<EFBFBD><C3BB>Ự<EFBFBD><E1BBB0><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>ӶϿ<D3B6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>Ϣ
|
||||
//#define GW_CHECKSERVER 3 //<2F><><EFBFBD>ػ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
//#define GW_CHECKCLIENT 4 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
#define GW_DATA 5 //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>û<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD>û<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳʹ<D2B2>ô<EFBFBD><C3B4><EFBFBD>Ϣ
|
||||
#define GW_CHANNEL 6 //ͬ<><CDAC>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
#define GW_TEST 1026 // <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غͷ<D8BA><CDB7><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>Ƿ<C7B7>
|
||||
#define GW_CMD 1027
|
||||
|
||||
enum
|
||||
{
|
||||
ccAddUser = 1, // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
||||
ccDelUser = 2, // ɾ<><C9BE><EFBFBD>û<EFBFBD>
|
||||
ccBroadCast = 3, // <20>㲥
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
207
Gateway/common/gate/gate_session.cc
Normal file
207
Gateway/common/gate/gate_session.cc
Normal file
@@ -0,0 +1,207 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "os_def.h"
|
||||
#include "_ast.h"
|
||||
|
||||
#include "container/queue_list.h"
|
||||
#include "x_tick.h"
|
||||
#include "x_lock.h"
|
||||
#include "x_thread.h"
|
||||
#include "net/base_socket.h"
|
||||
#include "server_def.h"
|
||||
#include "gate_proto.h"
|
||||
#include "share_util.h"
|
||||
#include "memory/buffer_allocator.h"
|
||||
#include "appitnmsg.h"
|
||||
#include "data_packet.hpp"
|
||||
#include "data_packet_reader.hpp"
|
||||
#include "net/send_packet_pool.h"
|
||||
#include "net/work_socket.h"
|
||||
#include "net/net_session.h"
|
||||
#include "net/server_socket.h"
|
||||
#include "gate_user.h"
|
||||
#include "gate_session.h"
|
||||
#include "gate_manager.h"
|
||||
|
||||
GateSession::GateSession(const char* name) : Inherited(name)
|
||||
{
|
||||
gate_idx_ = 0;
|
||||
}
|
||||
|
||||
GateSession::~GateSession()
|
||||
{
|
||||
CloseAllUser();
|
||||
FreeBuffers();
|
||||
}
|
||||
|
||||
void GateSession::FreeBuffers()
|
||||
{
|
||||
ClearSendList();
|
||||
}
|
||||
|
||||
DataPacket& GateSession::AllocGateSendPacket(uint16_t cmd, NetId& netid)
|
||||
{
|
||||
DataPacket& packet = Inherited::allocProtoPacket(cmd);
|
||||
packet << netid;
|
||||
return packet;
|
||||
}
|
||||
|
||||
DataPacket& GateSession::AllocGateSendPacket(NetId& netid)
|
||||
{
|
||||
DataPacket& packet = Inherited::allocProtoPacket(GW_DATA);
|
||||
packet << netid;
|
||||
return packet;
|
||||
}
|
||||
|
||||
void GateSession::Disconnected()
|
||||
{
|
||||
Inherited::Disconnected();
|
||||
FreeBuffers();
|
||||
CloseAllUser();
|
||||
}
|
||||
|
||||
void GateSession::OnRecvSysMsg(unsigned int msg, size_t p1, size_t p2, size_t p3, size_t p4)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case CLOSE_GATE_SESSION:
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺر<C4B9><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
NetId netid;
|
||||
netid.socket_ = MAKEINT64(p1, p2);
|
||||
netid.index_ = LOINT16(p3);
|
||||
netid.gate_id_ = HIINT16(p3);
|
||||
CloseUser(netid, "OnRecvSysMsg");
|
||||
SendGateCloseUser(netid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void GateSession::OnRecv(const uint16_t cmd, char* buf, int size)
|
||||
{
|
||||
if (size < (int)sizeof(NetId) || buf == NULL) return;
|
||||
|
||||
NetId* netid = (NetId*)buf;
|
||||
buf += sizeof(NetId);
|
||||
size -= sizeof(NetId);
|
||||
|
||||
if (netid->index_ >= MAX_GATE_USER) return;
|
||||
|
||||
GateUser& user = user_list_[netid->index_];
|
||||
netid->gate_id_ = (uint16_t)gate_idx_;
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case GW_OPEN:
|
||||
{
|
||||
OpenNewUser(*netid, buf);
|
||||
break;
|
||||
}
|
||||
|
||||
case GW_CLOSE:
|
||||
{
|
||||
CloseUser(*netid, "GW_CLOSE");
|
||||
break;
|
||||
}
|
||||
|
||||
case GW_DATA:
|
||||
{
|
||||
if (!user.closed_ && user.netid_.socket_ == netid->socket_)
|
||||
{
|
||||
OnRecv(*netid, buf, size);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case GW_TEST:
|
||||
case GW_CMD:
|
||||
{
|
||||
// ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
|
||||
DataPacket& packet = AllocGateSendPacket(cmd, *netid);
|
||||
packet.writeBuf(buf, size);
|
||||
flushProtoPacket(packet);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NetId* GateSession::OpenNewUser(NetId& netid, const char* addr)
|
||||
{
|
||||
if (netid.index_ >= MAX_GATE_USER) return NULL;
|
||||
|
||||
GateUser& user = user_list_[netid.index_];
|
||||
|
||||
user.netid_ = netid;
|
||||
user.netid_.gate_id_ = (uint16_t)gate_idx_;
|
||||
|
||||
user.account_id_ = 0;
|
||||
_STRNCPY_A(user.remote_addr_, addr);
|
||||
user.closed_ = false;
|
||||
user.account_name_[0] = 0;
|
||||
user.gm_ = -1;
|
||||
|
||||
OnOpenUser(&user);
|
||||
|
||||
return &user.netid_;
|
||||
}
|
||||
|
||||
void GateSession::OnOpenUser(GateUser*)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void GateSession::OnCloseUser(GateUser*, const char* reason)
|
||||
{
|
||||
}
|
||||
|
||||
bool GateSession::CloseUser(NetId& netid, const char* reason)
|
||||
{
|
||||
if (netid.index_ >= MAX_GATE_USER) return false;
|
||||
|
||||
if (netid.gate_id_ != gate_idx_) return false;
|
||||
|
||||
GateUser& user = user_list_[netid.index_];
|
||||
|
||||
if (user.closed_ == true) return true;
|
||||
if (user.netid_.socket_ != netid.socket_) return false;
|
||||
|
||||
user.closed_ = true;
|
||||
|
||||
OnCloseUser(&user, reason);
|
||||
return true;
|
||||
}
|
||||
|
||||
void GateSession::CloseAllUser()
|
||||
{
|
||||
for (int i = 0; i < MAX_GATE_USER; i++)
|
||||
{
|
||||
GateUser& user = user_list_[i];
|
||||
CloseUser(user.netid_, "CloseAllUser");
|
||||
}
|
||||
}
|
||||
|
||||
void GateSession::SendGateCloseUser(NetId& netid)
|
||||
{
|
||||
OutputMsg(rmNormal, ("close Socket=%d, GateSessionIdx=%d,reason=GW_CLOSE"), netid.socket_, netid.index_);
|
||||
DataPacket& packet = AllocGateSendPacket(GW_CLOSE, netid);
|
||||
flushProtoPacket(packet);
|
||||
}
|
||||
|
||||
|
||||
bool GateSession::OnValidateRegData(const SrvDef::PSERVER_REGDATA regData)
|
||||
{
|
||||
return (regData && regData->GameType == SrvDef::SERVER_REGDATA::GT_ID && regData->ServerType == SrvDef::GateServer);
|
||||
}
|
||||
|
||||
GateUser* GateSession::GetUser(NetId& netid)
|
||||
{
|
||||
if (netid.index_ >= MAX_GATE_USER) return NULL;
|
||||
|
||||
if (netid.gate_id_ != gate_idx_) return NULL;
|
||||
|
||||
return &user_list_[netid.index_];
|
||||
}
|
||||
|
||||
|
||||
|
||||
63
Gateway/common/gate/gate_session.h
Normal file
63
Gateway/common/gate/gate_session.h
Normal file
@@ -0,0 +1,63 @@
|
||||
#ifndef _GATE_CONNECTION_H_
|
||||
#define _GATE_CONNECTION_H_
|
||||
|
||||
class GateManager;
|
||||
class GateUser;
|
||||
|
||||
using namespace container;
|
||||
|
||||
class GateSession
|
||||
: public NetSession
|
||||
{
|
||||
friend class GateManager;
|
||||
public:
|
||||
typedef NetSession Inherited;
|
||||
|
||||
public:
|
||||
|
||||
DataPacket& AllocGateSendPacket(uint16_t cmd, NetId& netid);
|
||||
DataPacket& AllocGateSendPacket(NetId& netid);
|
||||
|
||||
inline void PostCloseUser(NetId& netid, int accountId, const char* reason, int p1 = 0, int p2 = 0)
|
||||
{
|
||||
OutputMsg(rmError, "GateSession::PostCloseUser %s:%d:%d", reason ? reason : "", p1, p2);
|
||||
|
||||
PostMsg(CLOSE_GATE_SESSION, LOINT32(netid.socket_), HIINT32(netid.socket_), MAKEINT32(netid.index_, netid.gate_id_), accountId);
|
||||
}
|
||||
|
||||
GateUser* GetUser(NetId& netid);
|
||||
|
||||
protected:
|
||||
virtual void OnOpenUser(GateUser* user);
|
||||
virtual void OnCloseUser(GateUser* user, const char* reason);
|
||||
|
||||
virtual bool OnValidateRegData(const SrvDef::PSERVER_REGDATA regData);
|
||||
|
||||
protected:
|
||||
void Disconnected();
|
||||
void OnRecvSysMsg(unsigned int msg, size_t p1, size_t p2, size_t p3, size_t p4);
|
||||
virtual void OnRecv(const uint16_t cmd, char* buf, int size);
|
||||
|
||||
NetId* OpenNewUser(NetId& netid, const char* addr);
|
||||
bool CloseUser(NetId& netid, const char* reason);
|
||||
|
||||
void CloseAllUser();
|
||||
|
||||
virtual void OnRecv(NetId& netid, char* buf, int size) = 0;
|
||||
|
||||
void SendGateCloseUser(NetId& netid);
|
||||
|
||||
void FreeBuffers();
|
||||
public:
|
||||
GateSession(const char* name);
|
||||
~GateSession();
|
||||
|
||||
protected:
|
||||
static const int MAX_GATE_USER = 8192; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
|
||||
static const unsigned int CLOSE_GATE_SESSION = 102;
|
||||
|
||||
int gate_idx_; //<2F><><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
|
||||
GateUser user_list_[MAX_GATE_USER];
|
||||
};
|
||||
|
||||
#endif
|
||||
26
Gateway/common/gate/gate_user.h
Normal file
26
Gateway/common/gate/gate_user.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef _GATE_USER_H_
|
||||
#define _GATE_USER_H_
|
||||
|
||||
class GateUser
|
||||
{
|
||||
public:
|
||||
NetId netid_;
|
||||
int account_id_; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ȫ<EFBFBD>ֻỰID
|
||||
ActorId actor_id_; // ѡ<><D1A1><EFBFBD>Ľ<EFBFBD>ɫid<69><64><EFBFBD>ڴ<EFBFBD>֮ǰ<D6AE><C7B0>0
|
||||
bool closed_; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
|
||||
int64_t handle_;
|
||||
int gm_; // gm<67>ȼ<EFBFBD>
|
||||
char remote_addr_[32]; //<2F>ͻ<EFBFBD><CDBB>˵<EFBFBD>ַ
|
||||
SrvDef::ACCOUNT account_name_; //<2F>ʺ<EFBFBD><CABA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
public:
|
||||
GateUser(): account_id_(0), actor_id_(0), closed_(true), handle_(0), gm_(-1)
|
||||
{
|
||||
STATIC_ASSERT(sizeof(netid_.index_) == 2);
|
||||
netid_.index_ = 0xffff;
|
||||
remote_addr_[0] = 0;
|
||||
account_name_[0] = 0;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
203
Gateway/common/log/log_def.h
Normal file
203
Gateway/common/log/log_def.h
Normal file
@@ -0,0 +1,203 @@
|
||||
#ifndef _LOG_TYPE_H_
|
||||
#define _LOG_TYPE_H_
|
||||
|
||||
using namespace SrvDef;
|
||||
// new
|
||||
enum LogMsgCmd
|
||||
{
|
||||
lmCounter = 1,
|
||||
lmInstall = 2,
|
||||
lmDau = 3,
|
||||
lmEconomy = 4,
|
||||
lmMilestone = 5,
|
||||
lmCounterDB = 6,
|
||||
lmPayment = 7,
|
||||
lmGameInfo = 8,
|
||||
lmOnline = 9, // ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lmDcApiData = 10, //QQͳһ<CDB3><D2BB><EFBFBD><EFBFBD>ƽ̨<C6BD>ӿ<EFBFBD>
|
||||
lmDcApiDataList = 11, //QQͳһ<CDB3><D2BB><EFBFBD><EFBFBD>ƽ̨<C6BD>ӿ<EFBFBD>
|
||||
lmDcApiProto = 12, //QQͳһ<CDB3><D2BB><EFBFBD><EFBFBD>ƽ̨<C6BD>ӿ<EFBFBD>(<28>ӿ<EFBFBD>6.20)
|
||||
lmTLog = 13, // <20><><EFBFBD>͵<EFBFBD>TLog<6F><67><EFBFBD><EFBFBD>
|
||||
lmChat = 14, // ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
lmDKMLog = 15, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum LogFlagInter
|
||||
{
|
||||
lfiDB = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
|
||||
lfiBI = 2, // <20><><EFBFBD>浽BI
|
||||
lfiText = 4, // <20><><EFBFBD>浽<EFBFBD>ı<EFBFBD>
|
||||
lfiIsPay = 8, // <20>Ƿ<EFBFBD><C7B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct LDcApiLogTable
|
||||
{
|
||||
char key_[16];
|
||||
char value_[64];
|
||||
bool mustUrlencode_;
|
||||
};
|
||||
typedef Vector<LDcApiLogTable*, 128> LDcApiLogTableList;
|
||||
struct LDcApiData
|
||||
{
|
||||
char log_name_[128];
|
||||
short log_type_; // <20><><EFBFBD><EFBFBD>DC_API_manual_C++_V2.1.pdf<64><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> : 0=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>1=ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>4=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
|
||||
char content_[2048];
|
||||
};
|
||||
|
||||
struct LDcApiProtoLog
|
||||
{
|
||||
//=====head=====
|
||||
char openId[128]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʺ<EFBFBD>
|
||||
int domain; //ƽ̨ID
|
||||
int serverId;
|
||||
char svrip[32]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip
|
||||
char userip[32]; //<2F>û<EFBFBD>ip
|
||||
//=====end head=====
|
||||
|
||||
//===body=====
|
||||
int roleId;
|
||||
int protoId;
|
||||
int gameFeatrueId; //ֱ<><D6B1><EFBFBD><EFBFBD>дϵͳID
|
||||
int protoType;
|
||||
int protoResult;
|
||||
//===end body====
|
||||
};
|
||||
|
||||
struct LCounter
|
||||
{
|
||||
ActorId actorid_;
|
||||
char aid_[64];
|
||||
char user_level_[32];
|
||||
char counter_[32];
|
||||
char value_[32];
|
||||
char extra_[128];
|
||||
char kingdom_[32];
|
||||
char phylum_[32];
|
||||
char classfield_[32];
|
||||
char family_[32];
|
||||
char genus_[128];
|
||||
bool save_db_; // <20>Ƿ浽<F1B1A3B4><E6B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ⣬<DDBF><E2A3AC><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>û<EFBFBD><C3BB>
|
||||
int flag_;
|
||||
};
|
||||
|
||||
struct LInstall
|
||||
{
|
||||
char aid_[64];
|
||||
char source_[32];
|
||||
char affiliate_[32];
|
||||
char creative_[32];
|
||||
char family_[32];
|
||||
char genus_[32];
|
||||
char from_uid_[32];
|
||||
char extra_[32];
|
||||
int flag_;
|
||||
};
|
||||
|
||||
struct LDau
|
||||
{
|
||||
char aid_[64];
|
||||
char source_[32];
|
||||
char affiliate_[32];
|
||||
char creative_[32];
|
||||
char family_[32];
|
||||
char genus_[32];
|
||||
char ip_[32];
|
||||
char from_uid_[32];
|
||||
char extra_[32];
|
||||
int flag_;
|
||||
};
|
||||
|
||||
struct LEconomy
|
||||
{
|
||||
ActorId actorid_;
|
||||
char aid_[64];
|
||||
char currency_[32]; // currency type
|
||||
char amount_[32]; //numerical amount
|
||||
char value_[32]; // numerical value
|
||||
char kingdom_[32];
|
||||
char phylum_[32];
|
||||
char classfield_[32];
|
||||
char family_[32];
|
||||
char genus_[32];
|
||||
char extra_[128];
|
||||
char extra2_[32];
|
||||
char pf_[128];
|
||||
int flag_;
|
||||
char openkey_[512];
|
||||
char pfkey_[128];
|
||||
char pfid_[128];
|
||||
};
|
||||
|
||||
struct LMilestone
|
||||
{
|
||||
ActorId actorid_;
|
||||
char aid_[64];
|
||||
char milestone_[32];
|
||||
char value_[32];
|
||||
char extra_[32];
|
||||
int flag_;
|
||||
};
|
||||
|
||||
struct LPayment
|
||||
{
|
||||
ActorId actorId_;
|
||||
char aid_[64];
|
||||
int amount_;
|
||||
int value_;
|
||||
char kingdom_[32];
|
||||
char phylum_[32];
|
||||
char transactionid_[32];
|
||||
char extra_[32];
|
||||
int mstType_;
|
||||
int p1_;
|
||||
int p2_;
|
||||
int p3_;
|
||||
int p4_;
|
||||
int p5_;
|
||||
int ret_;
|
||||
int flag_;
|
||||
};
|
||||
|
||||
struct LGameInfo
|
||||
{
|
||||
char aid_[64];
|
||||
char user_level_[32];
|
||||
char value_[32];
|
||||
char extra_[32];
|
||||
char kingdom_[32];
|
||||
char phylum_[32];
|
||||
char classfield_[32];
|
||||
char family_[32];
|
||||
char genus_[32];
|
||||
int flag_;
|
||||
};
|
||||
|
||||
struct LChat
|
||||
{
|
||||
ActorId actorid_;
|
||||
char aid_[64];
|
||||
char name_[32];
|
||||
char ip_[32];
|
||||
char pf_[32];
|
||||
int type_;
|
||||
char toaid_[64];
|
||||
char toname_[32];
|
||||
char content_[1024];
|
||||
};
|
||||
|
||||
enum ChatType
|
||||
{
|
||||
ctSecret = 1, // ˽<><CBBD>,<2C><><EFBFBD><EFBFBD>
|
||||
ctMail = 3,
|
||||
ctWorld = 4, // <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
|
||||
ctCamp = 5,
|
||||
ctGuild = 6, // <20><><EFBFBD>ᣬ<EFBFBD><E1A3AC><EFBFBD><EFBFBD>
|
||||
ctTeam = 7, // <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,5<><35>
|
||||
ctNear = 8, // (ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>
|
||||
ctOther = 9,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
641
Gateway/common/log/log_sender.cc
Normal file
641
Gateway/common/log/log_sender.cc
Normal file
@@ -0,0 +1,641 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "os_def.h"
|
||||
#include "_ast.h"
|
||||
|
||||
#include "x_tick.h"
|
||||
#include "x_lock.h"
|
||||
#include "container/queue_list.h"
|
||||
#include "net/base_socket.h"
|
||||
#include "share_util.h"
|
||||
#include "memory/buffer_allocator.h"
|
||||
#include "appitnmsg.h"
|
||||
#include "data_packet.hpp"
|
||||
#include "net/send_packet_pool.h"
|
||||
#include "net/work_socket.h"
|
||||
#include "net/net_client.h"
|
||||
#include "server_def.h"
|
||||
#include "log_def.h"
|
||||
#include "encrypt/CRC.h"
|
||||
#include "encrypt/Encrypt.h"
|
||||
#include "log_sender.h"
|
||||
|
||||
|
||||
|
||||
using namespace SrvDef;
|
||||
|
||||
LogSender::LogSender(int ServerType, int ServerIndex, char* ServerName) : NetClient("LogSender")
|
||||
{
|
||||
this->ServerType = ServerType;
|
||||
this->ServerIndex = ServerIndex;
|
||||
_STRNCPY_A(this->ServerName, ServerName);
|
||||
this->SetClientName(("logger server"));
|
||||
|
||||
stop_log_ = false;
|
||||
stop_counter_log_ = false;
|
||||
stop_economy_log_ = false;
|
||||
}
|
||||
|
||||
LogSender::LogSender() : NetClient("LogSender")
|
||||
{
|
||||
this->SetClientName(("logger server"));
|
||||
|
||||
stop_log_ = false;
|
||||
stop_counter_log_ = false;
|
||||
stop_economy_log_ = false;
|
||||
}
|
||||
|
||||
LogSender::~LogSender(void)
|
||||
{
|
||||
}
|
||||
|
||||
void LogSender::SetServerName(const char* sServerName)
|
||||
{
|
||||
_STRNCPY_S(ServerName, sServerName, ArrayCount(ServerName) - 1);
|
||||
ServerName[ArrayCount(ServerName) - 1] = 0;
|
||||
}
|
||||
int LogSender::GetLocalServerType()
|
||||
{
|
||||
return ServerType;
|
||||
}
|
||||
|
||||
const char* LogSender::GetLocalServerName()
|
||||
{
|
||||
return ServerName;
|
||||
}
|
||||
|
||||
int LogSender::GetLocalServerIndex()
|
||||
{
|
||||
return ServerIndex;
|
||||
}
|
||||
|
||||
void LogSender::OnConnected()
|
||||
{
|
||||
setRecvBufSize(1024 * 1024);
|
||||
setSendBufSize(1024 * 1024);
|
||||
}
|
||||
|
||||
void LogSender::LogCounter(ActorId actorId, const char* aid, const char* user_level /*= ""*/,
|
||||
const char* counter /*= ""*/, const char* value /*= ""*/, const char* extra /*= ""*/,
|
||||
const char* kingdom /*= ""*/, const char* phylum /*= ""*/, const char* classfield /*= ""*/,
|
||||
const char* family /*= ""*/, const char* genus /*= ""*/, int flag)
|
||||
{
|
||||
if (stop_log_ || stop_counter_log_) return;
|
||||
|
||||
LCounter data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
data.actorid_ = actorId;
|
||||
data.flag_ = flag;
|
||||
|
||||
if (aid)
|
||||
{
|
||||
_STRNCPY_A(data.aid_, aid);
|
||||
}
|
||||
|
||||
if (user_level)
|
||||
{
|
||||
_STRNCPY_A(data.user_level_, user_level);
|
||||
}
|
||||
|
||||
if (counter)
|
||||
{
|
||||
_STRNCPY_A(data.counter_, counter);
|
||||
}
|
||||
|
||||
if (value)
|
||||
{
|
||||
_STRNCPY_A(data.value_, value);
|
||||
}
|
||||
|
||||
if (extra)
|
||||
{
|
||||
_STRNCPY_A(data.extra_, extra);
|
||||
}
|
||||
|
||||
if (kingdom)
|
||||
{
|
||||
_STRNCPY_A(data.kingdom_, kingdom);
|
||||
}
|
||||
|
||||
if (phylum)
|
||||
{
|
||||
_STRNCPY_A(data.phylum_, phylum);
|
||||
}
|
||||
|
||||
if (classfield)
|
||||
{
|
||||
_STRNCPY_A(data.classfield_, classfield);
|
||||
}
|
||||
|
||||
if (family)
|
||||
{
|
||||
_STRNCPY_A(data.family_, family);
|
||||
}
|
||||
|
||||
if (genus)
|
||||
{
|
||||
_STRNCPY_A(data.genus_, genus);
|
||||
}
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmCounter);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogDcApiLogByStr(const char* logName, const char* logContent)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
if(!logName || !logContent) return;
|
||||
LDcApiData data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
data.log_type_ = 4;
|
||||
_STRNCPY_A(data.log_name_, logName);
|
||||
_STRNCPY_A(data.content_ ,logContent);
|
||||
DataPacket& pdata = allocProtoPacket(lmDcApiData);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
|
||||
void LogSender::LogDcApiProto(const char* openId, int pfId, int serverId, int roleId, int systemId, int protoId, int protoType, int protoResult, const char* svrip, const char* userip)
|
||||
{
|
||||
//if (!et || ((Entity*)et)->GetType() != enActor)
|
||||
// return;
|
||||
//Actor* pActor =(Entity*)et;
|
||||
if (stop_log_) return;
|
||||
|
||||
if(!openId) return;
|
||||
|
||||
LDcApiProtoLog logData;
|
||||
memset(&logData, 0, sizeof(logData));
|
||||
|
||||
//_STRNCPY_A(logData.openId, pActor->GetAccount());
|
||||
_STRNCPY_A(logData.openId, openId);
|
||||
logData.domain = pfId;
|
||||
//logData.serverId = ServerInstance()->GetServerIndex();
|
||||
logData.serverId = serverId;
|
||||
_STRNCPY_A(logData.svrip, svrip);
|
||||
_STRNCPY_A(logData.userip, userip);
|
||||
|
||||
//logData.roleId = pActor->GetActorId();
|
||||
logData.roleId = roleId;
|
||||
logData.protoId = MAKEINT16(protoId, systemId);
|
||||
logData.gameFeatrueId = systemId;
|
||||
logData.protoType = protoType;
|
||||
logData.protoResult = protoResult;
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmDcApiProto);
|
||||
pdata << logData;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LogSender::LogInstall(const char* aid, const char* source /*= ""*/,
|
||||
const char* affiliate /*= ""*/, const char* creative /*= ""*/,
|
||||
const char* family /*= ""*/, const char* genus /*= ""*/,
|
||||
const char* from_uid /*= ""*/ , const char* extra, int flag/* = 3*/)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
LInstall data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
data.flag_ = flag;
|
||||
|
||||
if (aid)
|
||||
{
|
||||
_STRNCPY_A(data.aid_, aid);
|
||||
}
|
||||
|
||||
if (source)
|
||||
{
|
||||
_STRNCPY_A(data.source_, source);
|
||||
}
|
||||
|
||||
if (affiliate)
|
||||
{
|
||||
_STRNCPY_A(data.affiliate_, affiliate);
|
||||
}
|
||||
|
||||
if (creative)
|
||||
{
|
||||
_STRNCPY_A(data.creative_, creative);
|
||||
}
|
||||
|
||||
if (family)
|
||||
{
|
||||
_STRNCPY_A(data.family_, family);
|
||||
}
|
||||
|
||||
if (genus)
|
||||
{
|
||||
_STRNCPY_A(data.genus_, genus);
|
||||
}
|
||||
|
||||
if (from_uid)
|
||||
{
|
||||
_STRNCPY_A(data.from_uid_, from_uid);
|
||||
}
|
||||
|
||||
if (extra)
|
||||
{
|
||||
_STRNCPY_A(data.extra_, extra);
|
||||
}
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmInstall);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogDau(const char* aid, const char* source /*= ""*/,
|
||||
const char* affiliate /*= ""*/, const char* creative /*= ""*/,
|
||||
const char* family /*= ""*/, const char* genus /*= ""*/,
|
||||
const char* ip /*= ""*/, const char* from_uid /*= ""*/, const char* extra, int flag/* = 3*/)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
LDau data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
data.flag_ = flag;
|
||||
|
||||
if (aid)
|
||||
{
|
||||
_STRNCPY_A(data.aid_, aid);
|
||||
}
|
||||
|
||||
if (source)
|
||||
{
|
||||
_STRNCPY_A(data.source_, source);
|
||||
}
|
||||
|
||||
if (affiliate)
|
||||
{
|
||||
_STRNCPY_A(data.affiliate_, affiliate);
|
||||
}
|
||||
|
||||
if (creative)
|
||||
{
|
||||
_STRNCPY_A(data.creative_, creative);
|
||||
}
|
||||
|
||||
if (family)
|
||||
{
|
||||
_STRNCPY_A(data.family_, family);
|
||||
}
|
||||
|
||||
if (genus)
|
||||
{
|
||||
_STRNCPY_A(data.genus_, genus);
|
||||
}
|
||||
|
||||
if (ip)
|
||||
{
|
||||
_STRNCPY_A(data.ip_, ip);
|
||||
}
|
||||
|
||||
if (from_uid)
|
||||
{
|
||||
_STRNCPY_A(data.from_uid_, from_uid);
|
||||
}
|
||||
|
||||
if (extra)
|
||||
{
|
||||
_STRNCPY_A(data.extra_, extra);
|
||||
}
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmDau);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogEnconomy(ActorId actorid, const char* aid, const char* currency /*= ""*/,
|
||||
const char* amount /*= ""*/, const char* value /*= ""*/,
|
||||
const char* kingdom /*= ""*/, const char* phylum /*= ""*/,
|
||||
const char* classfield /*= ""*/, const char* family /*= ""*/,
|
||||
const char* genus /*= ""*/ , const char* extra, const char* extra2, const char* pf, int flag/* = 3*/,
|
||||
bool isPay, const char* openkey, const char* pfkey, const char* pfid)
|
||||
{
|
||||
if (stop_log_ || stop_economy_log_) return;
|
||||
|
||||
LEconomy data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
data.flag_ = flag;
|
||||
data.flag_ |= (isPay ? lfiIsPay : 0);
|
||||
|
||||
data.actorid_ = actorid;
|
||||
|
||||
if (aid)
|
||||
{
|
||||
_STRNCPY_A(data.aid_, aid);
|
||||
}
|
||||
|
||||
if (currency)
|
||||
{
|
||||
_STRNCPY_A(data.currency_, currency);
|
||||
}
|
||||
|
||||
if (amount)
|
||||
{
|
||||
_STRNCPY_A(data.amount_, amount);
|
||||
}
|
||||
|
||||
if (value)
|
||||
{
|
||||
_STRNCPY_A(data.value_, value);
|
||||
}
|
||||
|
||||
if (kingdom)
|
||||
{
|
||||
_STRNCPY_A(data.kingdom_, kingdom);
|
||||
}
|
||||
|
||||
if (phylum)
|
||||
{
|
||||
_STRNCPY_A(data.phylum_, phylum);
|
||||
}
|
||||
|
||||
if (classfield)
|
||||
{
|
||||
_STRNCPY_A(data.classfield_, classfield);
|
||||
}
|
||||
|
||||
if (family)
|
||||
{
|
||||
_STRNCPY_A(data.family_, family);
|
||||
}
|
||||
|
||||
if (genus)
|
||||
{
|
||||
_STRNCPY_A(data.genus_, genus);
|
||||
}
|
||||
|
||||
if (extra)
|
||||
{
|
||||
_STRNCPY_A(data.extra_, extra);
|
||||
}
|
||||
|
||||
if (extra2)
|
||||
{
|
||||
_STRNCPY_A(data.extra2_, extra2);
|
||||
}
|
||||
|
||||
if (pf)
|
||||
{
|
||||
_STRNCPY_A(data.pf_, pf);
|
||||
}
|
||||
|
||||
if (openkey)
|
||||
{
|
||||
_STRNCPY_A(data.openkey_, openkey);
|
||||
}
|
||||
|
||||
if (pfkey)
|
||||
{
|
||||
_STRNCPY_A(data.pfkey_, pfkey);
|
||||
}
|
||||
|
||||
if (pfid) {
|
||||
_STRNCPY_A(data.pfid_, pfid);
|
||||
}
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmEconomy);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogMilestone(ActorId actorid, const char* aid, const char* milestone /*= ""*/, const char* value /*= ""*/, const char* extra, int flag/* = 3*/)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
LMilestone data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
data.flag_ = flag;
|
||||
data.actorid_ = actorid;
|
||||
|
||||
if (aid)
|
||||
{
|
||||
_STRNCPY_A(data.aid_, aid);
|
||||
}
|
||||
|
||||
if (milestone)
|
||||
{
|
||||
_STRNCPY_A(data.milestone_, milestone);
|
||||
}
|
||||
|
||||
if (value)
|
||||
{
|
||||
_STRNCPY_A(data.value_, value);
|
||||
}
|
||||
|
||||
if (extra)
|
||||
{
|
||||
_STRNCPY_A(data.extra_, extra);
|
||||
}
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmMilestone);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogPayment(int ret, ActorId actorId, const char* aid, int amount,
|
||||
int mstType, int p1, int p2, int p3,
|
||||
int value /*= 1*/, const char* kingdom /*= ""*/, const char* phylum /*= ""*/, const char* transactionid /*= ""*/,
|
||||
const char* extra /*= ""*/, int p4 /*= 0*/, int p5 /*= 0*/, int flag/* = 3*/)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
LPayment data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
data.ret_ = ret;
|
||||
data.actorId_ = actorId;
|
||||
data.amount_ = amount;
|
||||
data.value_ = value;
|
||||
data.mstType_ = mstType;
|
||||
data.p1_ = p1;
|
||||
data.p2_ = p2;
|
||||
data.p3_ = p3;
|
||||
data.p4_ = p4;
|
||||
data.p5_ = p5;
|
||||
data.flag_ = flag;
|
||||
|
||||
if (aid)
|
||||
{
|
||||
_STRNCPY_A(data.aid_, aid);
|
||||
}
|
||||
|
||||
if (kingdom)
|
||||
{
|
||||
_STRNCPY_A(data.kingdom_, kingdom);
|
||||
}
|
||||
|
||||
if (phylum)
|
||||
{
|
||||
_STRNCPY_A(data.phylum_, phylum);
|
||||
}
|
||||
|
||||
if (transactionid)
|
||||
{
|
||||
_STRNCPY_A(data.transactionid_, transactionid);
|
||||
}
|
||||
|
||||
if (extra)
|
||||
{
|
||||
_STRNCPY_A(data.extra_, extra);
|
||||
}
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmPayment);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogGameInfo(const char* aid, const char* user_level /*= ""*/,
|
||||
const char* value /*= ""*/, const char* extra /*= ""*/, const char* kingdom /*= ""*/,
|
||||
const char* phylum /*= ""*/, const char* classfield /*= ""*/, const char* family /*= ""*/,
|
||||
const char* genus /*= ""*/,
|
||||
int flag/* = 3*/)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
LGameInfo data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
data.flag_ = flag;
|
||||
|
||||
if (aid)
|
||||
{
|
||||
_STRNCPY_A(data.aid_, aid);
|
||||
}
|
||||
|
||||
if (user_level)
|
||||
{
|
||||
_STRNCPY_A(data.user_level_, user_level);
|
||||
}
|
||||
|
||||
if (value)
|
||||
{
|
||||
_STRNCPY_A(data.value_, value);
|
||||
}
|
||||
|
||||
if (extra)
|
||||
{
|
||||
_STRNCPY_A(data.extra_, extra);
|
||||
}
|
||||
|
||||
if (kingdom)
|
||||
{
|
||||
_STRNCPY_A(data.kingdom_, kingdom);
|
||||
}
|
||||
|
||||
if (phylum)
|
||||
{
|
||||
_STRNCPY_A(data.phylum_, phylum);
|
||||
}
|
||||
|
||||
if (classfield)
|
||||
{
|
||||
_STRNCPY_A(data.classfield_, classfield);
|
||||
}
|
||||
|
||||
if (family)
|
||||
{
|
||||
_STRNCPY_A(data.family_, family);
|
||||
}
|
||||
|
||||
if (genus)
|
||||
{
|
||||
_STRNCPY_A(data.genus_, genus);
|
||||
}
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmGameInfo);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogChat(const char* aid, const char* name, const char* ip, const char* pf, int actorid, int type,
|
||||
const char* content, const char* toaid /* = "" */, const char* toname /* = "" */)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
LChat data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
|
||||
if (aid)
|
||||
{
|
||||
_STRNCPY_A(data.aid_, aid);
|
||||
}
|
||||
|
||||
if (name)
|
||||
{
|
||||
_STRNCPY_A(data.name_, name);
|
||||
}
|
||||
|
||||
if (pf)
|
||||
{
|
||||
_STRNCPY_A(data.pf_, pf);
|
||||
}
|
||||
|
||||
if (ip)
|
||||
{
|
||||
_STRNCPY_A(data.ip_, ip);
|
||||
}
|
||||
|
||||
data.type_ = type;
|
||||
|
||||
data.actorid_ = actorid;
|
||||
|
||||
if (content)
|
||||
{
|
||||
_STRNCPY_A(data.content_, content);
|
||||
}
|
||||
|
||||
if (toaid)
|
||||
{
|
||||
_STRNCPY_A(data.toaid_, toaid);
|
||||
}
|
||||
|
||||
if (toname)
|
||||
{
|
||||
_STRNCPY_A(data.toname_, toname);
|
||||
}
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmChat);
|
||||
pdata << data;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogOnline(int cnt, int extra)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmOnline);
|
||||
pdata << (int)cnt;
|
||||
pdata << (int)extra;
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogTLog(const char* logstr)
|
||||
{
|
||||
if (stop_log_) return;
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmTLog);
|
||||
pdata.writeString(logstr);
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
void LogSender::LogDKMLog(const char* logstr, const char* pf)
|
||||
{
|
||||
if (!logstr || !pf) return;
|
||||
if (stop_log_) return;
|
||||
|
||||
DataPacket& pdata = allocProtoPacket(lmDKMLog);
|
||||
pdata.writeString(logstr);
|
||||
pdata.writeString(pf);
|
||||
flushProtoPacket(pdata);
|
||||
}
|
||||
|
||||
187
Gateway/common/log/log_sender.h
Normal file
187
Gateway/common/log/log_sender.h
Normal file
@@ -0,0 +1,187 @@
|
||||
#ifndef _LOG_SENDER_H_
|
||||
#define _LOG_SENDER_H_
|
||||
|
||||
class NetClient;
|
||||
|
||||
class LogSender:
|
||||
public NetClient
|
||||
{
|
||||
public:
|
||||
// DC API<50><49>־
|
||||
void LogDcApiLogByStr(const char* logName, const char* logContent);
|
||||
// DC API<50><49>ϷЭ<CFB7><D0AD><EFBFBD><EFBFBD>־
|
||||
void LogDcApiProto(const char* openId, int pf, int serverId, int roleId, int systemId, int protoId, int protoType, int protoResult, const char* svrip, const char* userip);
|
||||
|
||||
void LogCounter(ActorId actorid, const char* aid,
|
||||
const char* user_level = "",
|
||||
const char* counter = "",
|
||||
const char* value = "",
|
||||
const char* extra = "",
|
||||
const char* kingdom = "",
|
||||
const char* phylum = "",
|
||||
const char* classfield = "",
|
||||
const char* family = "",
|
||||
const char* genus = "",
|
||||
int flag = 1);
|
||||
|
||||
void LogInstall(const char* actorId, const char* source = "",
|
||||
const char* affiliate = "",
|
||||
const char* creative = "",
|
||||
const char* family = "",
|
||||
const char* genus = "",
|
||||
const char* from_uid = "",
|
||||
const char* extra = "",
|
||||
int flag = 3);
|
||||
|
||||
void LogDau(const char* aid,
|
||||
const char* source = "",
|
||||
const char* affiliate = "",
|
||||
const char* creative = "",
|
||||
const char* family = "",
|
||||
const char* genus = "",
|
||||
const char* ip = "",
|
||||
const char* from_uid = "",
|
||||
const char* extra = "",
|
||||
int flag = 3);
|
||||
|
||||
void LogEnconomy(ActorId actorid, const char* aid,
|
||||
const char* currency = "",
|
||||
const char* amount = "",
|
||||
const char* value = "",
|
||||
const char* kingdom = "",
|
||||
const char* phylum = "",
|
||||
const char* classfield = "",
|
||||
const char* family = "",
|
||||
const char* genus = "",
|
||||
const char* extra = "",
|
||||
const char* extra2 = "",
|
||||
const char* pf = "",
|
||||
int flag = 3,
|
||||
bool isPay = true,
|
||||
const char* openkey = "",
|
||||
const char* pfkey = "", const char* pfid = ""); // <20><>ʾ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
void LogMilestone(
|
||||
ActorId actorid,
|
||||
const char* aid,
|
||||
const char* milestone = "",
|
||||
const char* value = "",
|
||||
const char* extra = "",
|
||||
int flag = 3);
|
||||
|
||||
void LogPayment(int ret, ActorId actorId, const char* aid, int amount,
|
||||
int mstType,
|
||||
int p1,
|
||||
int p2,
|
||||
int p3,
|
||||
int value = 1,
|
||||
const char* kingdom = "",
|
||||
const char* phylum = "",
|
||||
const char* transactionid = "",
|
||||
const char* extra = "",
|
||||
int p4 = 0,
|
||||
int p5 = 0,
|
||||
int flag = 3);
|
||||
|
||||
void LogGameInfo(const char* aid,
|
||||
const char* user_level = "",
|
||||
const char* value = "",
|
||||
const char* extra = "",
|
||||
const char* kingdom = "",
|
||||
const char* phylum = "",
|
||||
const char* classfield = "",
|
||||
const char* family = "",
|
||||
const char* genus = "",
|
||||
int flag = 3);
|
||||
|
||||
void LogChat(const char* aid,
|
||||
const char* name,
|
||||
const char* ip,
|
||||
const char* pf,
|
||||
ActorId actorid,
|
||||
int type,
|
||||
const char* content,
|
||||
const char* toaid = "",
|
||||
const char* toname = "");
|
||||
|
||||
// <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LogOnline(int cnt, int extra);
|
||||
|
||||
void LogTLog(const char* logstr);
|
||||
|
||||
void LogDKMLog(const char* logstr, const char* pf = "0");
|
||||
|
||||
inline int GetServerIndex()
|
||||
{
|
||||
return ServerIndex;
|
||||
}
|
||||
inline int GetServerType()
|
||||
{
|
||||
return ServerType;
|
||||
}
|
||||
inline const char* GetServerName()
|
||||
{
|
||||
return ServerName;
|
||||
}
|
||||
|
||||
void SetServerIndex(const int nSerIdx)
|
||||
{
|
||||
ServerIndex = nSerIdx;
|
||||
}
|
||||
void SetServerType(const int nSrvType)
|
||||
{
|
||||
ServerType = nSrvType;
|
||||
}
|
||||
void SetServerName(const char* sServerName);
|
||||
|
||||
// <20>Ƿ<EFBFBD>ֹͣ<CDA3><D6B9>¼<EFBFBD><C2BC>־
|
||||
inline void StopLog(bool flag = true)
|
||||
{
|
||||
stop_log_ = flag;
|
||||
}
|
||||
inline void StopCounterLog(bool flag = true)
|
||||
{
|
||||
stop_counter_log_ = flag;
|
||||
}
|
||||
inline void StopEconomyLog(bool flag = true)
|
||||
{
|
||||
stop_economy_log_ = flag;
|
||||
}
|
||||
|
||||
public:
|
||||
LogSender();
|
||||
LogSender(int ServerType, int ServerIndex, char* ServerName);
|
||||
~LogSender(void);
|
||||
protected:
|
||||
// /*** <20><><EFBFBD><EFBFBD><EFBFBD>踲<EFBFBD>ǵĺ<C7B5><C4BA><EFBFBD><EFBFBD><EFBFBD> ***/
|
||||
///* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
||||
// * nCmd ͨ<><CDA8><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||||
// * inPacket <09>Ѿ<EFBFBD><D1BE><EFBFBD>ȡ<EFBFBD><C8A1>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>Ķ<EFBFBD>ȡλ<C8A1><CEBB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// */
|
||||
//virtual void OnRecv(const uint16_t cmd, DataPacketReader &data);
|
||||
|
||||
/*** <20><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ǵĺ<C7B5><C4BA><EFBFBD><EFBFBD><EFBFBD> ***/
|
||||
/* <20><><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>Ա<EFBFBD><D4B1><EFBFBD>ȷ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
virtual int GetLocalServerType();
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>Ա<EFBFBD><D4B1><EFBFBD>ȷ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
virtual const char* GetLocalServerName();
|
||||
/* <20><><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ȷ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>Ĭ<EFBFBD>ϵķ<CFB5><C4B7><EFBFBD>ֵ<EFBFBD><D6B5>0 */
|
||||
virtual int GetLocalServerIndex();
|
||||
|
||||
void OnConnected();
|
||||
private:
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>4<EFBFBD><34>ֵ<EFBFBD><D6B5><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
int ServerType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>ֵΪSERVERTYPEö<45><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ö<EFBFBD><C3B6>ֵ
|
||||
int ServerIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壩
|
||||
char ServerName[128]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ֹ<EFBFBD><D6B9>
|
||||
|
||||
bool stop_log_;
|
||||
bool stop_counter_log_;
|
||||
bool stop_economy_log_;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
142
Gateway/common/net/lua_socket.hpp
Normal file
142
Gateway/common/net/lua_socket.hpp
Normal file
@@ -0,0 +1,142 @@
|
||||
#ifndef _LUA_SOCKET_HPP_
|
||||
#define _LUA_SOCKET_HPP_
|
||||
|
||||
/******************************************************************
|
||||
*<2A><>װһ<D7B0><D2BB><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD>lua<75><61><EFBFBD><EFBFBD>
|
||||
*
|
||||
*****************************************************************/
|
||||
#include "net/base_socket.h"
|
||||
|
||||
using namespace net;
|
||||
|
||||
class LuaSocket : public BaseSocket
|
||||
{
|
||||
public:
|
||||
LuaSocket(): buff_(NULL)
|
||||
{
|
||||
//printf("LuaSocket():%lld \n", (long long int)this);
|
||||
}
|
||||
|
||||
virtual ~LuaSocket()
|
||||
{
|
||||
//printf("~LuaSocket():%lld \n", (long long int)this);
|
||||
|
||||
if (buff_)
|
||||
{
|
||||
free(buff_);
|
||||
buff_ = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʱֻ֧<D6BB><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
//ͨ<><CDA8>32λIP<49><50>ַ<EFBFBD><D6B7><EFBFBD>ӵ<EFBFBD><D3B5>ƶ<EFBFBD><C6B6>Ķ˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int connect(const double addr, const int port, bool block = true)
|
||||
{
|
||||
unsigned long long d;
|
||||
memcpy(&d, &addr, sizeof(addr));
|
||||
return BaseSocket::connect((u_long)d, port, block);
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><D7BD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ѶϿ<D1B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SOCKET_ERROR<4F><52>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>ʱֻ֧<D6BB><D6A7>д<EFBFBD><D0B4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>httpЭ<70><D0AD>
|
||||
int send(char* buf)
|
||||
{
|
||||
if (!buf) return SOCKET_ERROR;
|
||||
|
||||
return BaseSocket::send((void*)buf, (int)strlen(buf));
|
||||
}
|
||||
|
||||
const char* readline(int& retval)
|
||||
{
|
||||
retval = 0;
|
||||
// <20><><EFBFBD><EFBFBD>SOCKET_ERROR != retval && 0 != retval <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>Զ<EFBFBD>
|
||||
const int max_size = 1024;
|
||||
|
||||
if (!buff_) buff_ = (char*)malloc(max_size);
|
||||
|
||||
retval = recv(buff_, max_size - 1, 0);
|
||||
|
||||
if (retval >= 0)
|
||||
buff_[retval] = 0;
|
||||
|
||||
return buff_;
|
||||
}
|
||||
|
||||
const char* readall(int& retval)
|
||||
{
|
||||
//printf("readall start:%lld \n", (long long int)this);
|
||||
const int max_size = 1024;
|
||||
int total = 0;
|
||||
retval = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
total += max_size;
|
||||
buff_ = (char*)(buff_ ? realloc(buff_, total) : malloc(total));
|
||||
|
||||
assert(buff_);
|
||||
|
||||
int len = recv(buff_ + retval, total - retval - 1);
|
||||
|
||||
if (len <= 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
retval += len;
|
||||
|
||||
if (retval < (total - 1)) break;
|
||||
}
|
||||
}
|
||||
|
||||
//printf("readall end:%lld \n", (long long int)this);
|
||||
buff_[retval] = 0;
|
||||
return buff_;
|
||||
}
|
||||
|
||||
public:
|
||||
static LuaSocket* NewSocket()
|
||||
{
|
||||
//printf("NewSocket threadid %d\n", (int)GetCurrentThreadId());
|
||||
LuaSocket* s = new LuaSocket();
|
||||
int err = createSocket(&s->socket_);
|
||||
|
||||
if (err)
|
||||
{
|
||||
delete s;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//printf("NewSocket:%lld \n", (long long int)s);
|
||||
return s;
|
||||
}
|
||||
static void Release(LuaSocket* s, int step)
|
||||
{
|
||||
if (!s) return;
|
||||
|
||||
//printf("Release:%lld \n", (long long int)s);
|
||||
|
||||
s->Close();
|
||||
delete s;
|
||||
}
|
||||
static double GetHostByName(const char* host)
|
||||
{
|
||||
hostent* hostn = gethostbyname(host);
|
||||
u_long addr = 0;
|
||||
|
||||
if (hostn)
|
||||
{
|
||||
addr = *(u_long*)hostn->h_addr_list[0];
|
||||
}
|
||||
|
||||
double d;
|
||||
memcpy(&d, &addr, sizeof(d));
|
||||
return d;
|
||||
}
|
||||
private:
|
||||
char* buff_;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
217
Gateway/common/statistic/time_stat.cc
Normal file
217
Gateway/common/statistic/time_stat.cc
Normal file
@@ -0,0 +1,217 @@
|
||||
#ifdef _MSC_VER
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "os_def.h"
|
||||
#include <_ast.h>
|
||||
|
||||
#include <x_thread.h>
|
||||
|
||||
#include <x_lock.h>
|
||||
#include <x_tick.h>
|
||||
|
||||
#include <stream.h>
|
||||
#include <wrand.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <container/vector.h>
|
||||
#include <x_lock.h>
|
||||
#include "second_time.h"
|
||||
|
||||
|
||||
|
||||
//#include <LinkedList.h>
|
||||
|
||||
#include "time_stat.h"
|
||||
static const char s_szLogFileName[] = ("TimeStat.xml");
|
||||
static const char* s_szTimeProfIndent[] = {
|
||||
(""), // level_1
|
||||
(" "), // level_2
|
||||
(" "), // level_3
|
||||
(" "), // level_4
|
||||
(" "), // level_5
|
||||
(" "), // level_6
|
||||
(" "), // level_7
|
||||
(" "), // level_8
|
||||
(" "), // level_9
|
||||
(" "), // level_10
|
||||
(" "), // level_11
|
||||
(" "), // level_12
|
||||
(" "), // level_13
|
||||
(" "), // level_14
|
||||
(" ") // level_15
|
||||
};
|
||||
const char s_szSep[] = ("-------------------------------------------------------------------------------------------\r\n");
|
||||
const char s_szStartRecordsLabel[] = ("<Records>\r\n");
|
||||
const char s_szEndRecordsLabel[] = ("</Records>\r\n");
|
||||
const char s_szStartProfRecord[] = ("<ProfRecord timeSpan=\"");
|
||||
const char s_szEndProfRecord[] = ("</ProfRecord>\r\n");
|
||||
const char s_szThreadLabel[] = (" threadId=%d");
|
||||
const char szXmlEndLable[] = ("\">\r\n");
|
||||
DWORD TimeProfMgr::s_dwTlsIdx = TLS_OUT_OF_INDEXES;
|
||||
|
||||
TimeProfDummy::TimeProfDummy(const char* szUnitName, unsigned int nHashCode)
|
||||
{
|
||||
TimeProfMgr& profMgr = *TimeProfMgr::getSingleton().getThreadInst();
|
||||
TimeProfRecord *pCurRecord = profMgr.getCurrTimeProfRecord();
|
||||
if (pCurRecord)
|
||||
{
|
||||
TimeProfRecord* pChild = pCurRecord->getChildByHash(nHashCode);
|
||||
if (!pChild)
|
||||
{
|
||||
pChild = profMgr.allocRecord();
|
||||
pChild->reInitBasicData(szUnitName, nHashCode);
|
||||
pCurRecord->addChild(pChild);
|
||||
}
|
||||
pChild->startProf();
|
||||
profMgr.OnTimeProfRecordStart(pChild);
|
||||
}
|
||||
}
|
||||
TimeProfDummy::~TimeProfDummy()
|
||||
{
|
||||
TimeProfMgr& mgr = *TimeProfMgr::getSingleton().getThreadInst();
|
||||
TimeProfRecord *pCurRecord = mgr.getCurrTimeProfRecord();
|
||||
pCurRecord->endProf();
|
||||
mgr.OnTimeProfRecordEnd(pCurRecord);
|
||||
}
|
||||
|
||||
void TimeProfRecord::dump(stream::BaseStream& stream, int level)
|
||||
{
|
||||
level = level >= (int)(ArrayCount(s_szTimeProfIndent)) ? (int)(ArrayCount(s_szTimeProfIndent)-1) : level;
|
||||
stream.write(s_szTimeProfIndent[level], strlen(s_szTimeProfIndent[level])*sizeof(char));
|
||||
char szData[512] = {0};
|
||||
float nAvgTime = 0;
|
||||
if (m_nTotalCount > 0)
|
||||
nAvgTime = (float)m_nTotalTime / m_nTotalCount;
|
||||
SNPRINTFA(szData, sizeof(szData), ("<%s ttime=\"%I64u\" tcount=\"%I64u\" atime=\"%f\" maxtime=\"%I64u\" mintime=\"%I64u\" ottime=\"%I64u\" otcount=\"%I64u\" omaxtime=\"%I64u\" omintime=\"%I64u\">\r\n"),
|
||||
m_szExecUnitName,m_nTotalTime, m_nTotalCount, nAvgTime, m_nMaxTime, m_nMinTime,
|
||||
m_nOccuTotalTime, m_nOccuTotalCount, m_nOccuMaxTime, m_nOccuMinTime);
|
||||
stream.write(szData, strlen(szData) * sizeof(szData[0]));
|
||||
reset();
|
||||
for (int i = 0; i < m_childrenNode.count(); i++)
|
||||
m_childrenNode[i]->dump(stream, level+1);
|
||||
SNPRINTFA(szData, sizeof(szData), ("%s</%s>\r\n"), s_szTimeProfIndent[level], m_szExecUnitName);
|
||||
stream.write(szData, strlen(szData) * sizeof(szData[0]));
|
||||
}
|
||||
|
||||
void TimeProfRecord::setName(const char* szName)
|
||||
{
|
||||
_STRNCPY_A(m_szExecUnitName, szName);
|
||||
}
|
||||
|
||||
TimeProfRecord::TimeProfRecord(const char*, unsigned int)
|
||||
{
|
||||
}
|
||||
|
||||
TimeProfRecord::~TimeProfRecord(){
|
||||
clear();
|
||||
}
|
||||
|
||||
void TimeProfRecord::clear()
|
||||
{
|
||||
for (int i = 0; i < m_childrenNode.count(); i++)
|
||||
{
|
||||
TimeProfRecord *pRecord = m_childrenNode[i];
|
||||
|
||||
pRecord->clear();
|
||||
TimeProfMgr::getSingleton().getThreadInst()->freeRecord(pRecord);
|
||||
}
|
||||
m_childrenNode.empty();
|
||||
}
|
||||
|
||||
TimeProfMgr::TimeProfMgr() : m_execUnitRoot("", 0), m_dwThreadId(0)
|
||||
{
|
||||
//::timeBeginPeriod(1);
|
||||
m_execUnitRoot.setName("Root");
|
||||
m_execUnitRoot.reset(true);
|
||||
m_execUnitStack.reserve(500);
|
||||
getCurrentTm(m_lastDumpTime);
|
||||
m_execUnitStack.push(&m_execUnitRoot);
|
||||
|
||||
m_freeRecordList.reserve(500);
|
||||
allocTimeProfRecord();
|
||||
}
|
||||
|
||||
TimeProfMgr::~TimeProfMgr()
|
||||
{
|
||||
//::timeEndPeriod(1);
|
||||
clear();
|
||||
}
|
||||
|
||||
void TimeProfMgr::getCurrentTm(tm &t)
|
||||
{
|
||||
time_t szClock;
|
||||
time(&szClock);
|
||||
struct tm *curTime = localtime(&szClock);
|
||||
t = *curTime;
|
||||
}
|
||||
|
||||
void TimeProfMgr::dumpImpl(stream::BaseStream& stream)
|
||||
{
|
||||
dumpDateTimeHeader(stream);
|
||||
m_execUnitRoot.dump(stream);
|
||||
stream.write(s_szEndProfRecord, strlen(s_szEndProfRecord)*sizeof(char));
|
||||
}
|
||||
|
||||
void TimeProfMgr::dump()
|
||||
{
|
||||
using namespace stream;
|
||||
FileStream fs(s_szLogFileName, FileStream::faWrite, FileStream::AlwaysOpen, NULL);
|
||||
int fileSize = fs.getSize();
|
||||
bool bFirstTime = true;
|
||||
if (fileSize > (LONGLONG)(strlen(s_szEndProfRecord)*sizeof(char)))
|
||||
{
|
||||
bFirstTime = false;
|
||||
fileSize -= (int)(strlen(s_szEndRecordsLabel)*sizeof(char));
|
||||
fs.setPosition(fileSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
fs.setPosition(fileSize);
|
||||
fs.write(s_szStartRecordsLabel, strlen(s_szStartRecordsLabel)*sizeof(char));
|
||||
}
|
||||
for (int i = 0; i < m_vecTimeProfMgr.count(); i++)
|
||||
{
|
||||
m_vecTimeProfMgr[i]->dumpImpl(fs);
|
||||
}
|
||||
////dumpDateTimeSep(fs);
|
||||
//dumpDateTimeHeader(fs);
|
||||
//m_execUnitRoot.dump(fs);
|
||||
//fs.write(s_szEndProfRecord, strlen(s_szEndProfRecord)*sizeof(char));
|
||||
////dumpDateTimeSep(fs);
|
||||
fs.write(s_szEndRecordsLabel, strlen(s_szEndRecordsLabel)*sizeof(char));
|
||||
}
|
||||
|
||||
void TimeProfMgr::dumpDateTimeHeader(stream::BaseStream& stream)
|
||||
{
|
||||
char szBeginDateTime[256] = {0};
|
||||
formatTimeStr(szBeginDateTime, ArrayCount(szBeginDateTime)-1, &m_lastDumpTime);
|
||||
szBeginDateTime[ArrayCount(szBeginDateTime)-1] = ('\0');
|
||||
stream.write(s_szStartProfRecord, strlen(s_szStartProfRecord)*sizeof(char));
|
||||
stream.write(szBeginDateTime, strlen(szBeginDateTime) * sizeof(char));
|
||||
stream.write("--", 2);
|
||||
|
||||
char szDateTime[256] = {0};
|
||||
getCurrentTm(m_lastDumpTime);
|
||||
formatTimeStr(szDateTime, ArrayCount(szDateTime)-1, &m_lastDumpTime);
|
||||
szDateTime[ArrayCount(szDateTime)-1] = ('\0');
|
||||
stream.write(szDateTime, strlen(szDateTime) * sizeof(char));
|
||||
|
||||
// dump thread id
|
||||
char szThreadInfo[64] = {0};
|
||||
SNPRINTFA(szThreadInfo, sizeof(szThreadInfo), s_szThreadLabel, m_dwThreadId);
|
||||
stream.write(szThreadInfo, strlen(szThreadInfo) * sizeof(char));
|
||||
stream.write(szXmlEndLable, strlen(szXmlEndLable) * sizeof(char));
|
||||
}
|
||||
|
||||
void TimeProfMgr::formatTimeStr(char* szDataBuff, size_t nLen, tm *t)
|
||||
{
|
||||
//_tcsftime(szDataBuff, nLen-1, ("%Y-%m-%d_%H:%M:%S"), t);
|
||||
SNPRINTFA(szDataBuff, (int)(nLen - 1), "%d-%d-%d_%d:%d:%d", t->tm_year + 1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
|
||||
}
|
||||
|
||||
void TimeProfMgr::dumpDateTimeSep(stream::BaseStream& stream)
|
||||
{
|
||||
stream.write(s_szSep, strlen(s_szSep) * sizeof(char));
|
||||
}
|
||||
|
||||
#endif
|
||||
295
Gateway/common/statistic/time_stat.h
Normal file
295
Gateway/common/statistic/time_stat.h
Normal file
@@ -0,0 +1,295 @@
|
||||
#ifndef _TIME_STAT_H_
|
||||
#define _TIME_STAT_H_
|
||||
#ifdef _MSC_VER
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// ʱ<><CAB1>ͳ<EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <09>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٳ<EFBFBD><D9B3><EFBFBD><EFBFBD>е<EFBFBD><D0B5>õĺ<C3B5><C4BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>
|
||||
// ˵ <09><><EFBFBD><EFBFBD>ͳ<EFBFBD>ư<EFBFBD><C6B0><EFBFBD><EFBFBD>趨<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <09>ڵ<EFBFBD><DAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>ٵķ<D9B5><C4B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 2<><32><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>ÿ<EFBFBD><C3BF>ִ<EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD>ҳ<EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>
|
||||
// <20><><EFBFBD>磺<EFBFBD><E7A3BA><EFBFBD><EFBFBD><DFBC>̣߳<DFB3><CCA3><EFBFBD><EFBFBD><EFBFBD><DFBC>߳<EFBFBD>ÿ<EFBFBD><C3BF>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ٽڵ㣬<DAB5><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>紦<EFBFBD><E7B4A6><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵȶ<C8B5><C8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٽڵ㣬<DAB5><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>ĸ<EFBFBD><C4B8>ٵ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ʱռ<CAB1><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <09><>Ϊ<EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>
|
||||
// ͳ<>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD>죡<EFBFBD><ECA3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>ռ<EFBFBD><D5BC>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>50%<25><><EFBFBD>ҵ<EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>
|
||||
// <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ˢ<EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD>⣬Ҳ<E2A3AC><D2B2><EFBFBD>ⲻ<EFBFBD><E2B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <09><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>⣬Ҫô<D2AA><C3B4><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>˷<EFBFBD>ʱ<EFBFBD><CAB1>Ҫô<D2AA><C3B4><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>÷<EFBFBD>ʱ<CAB1>ٽ<EFBFBD><D9BD>㡣
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <new>
|
||||
//#include "ObjectCounter.h"
|
||||
class TimeProfDummy
|
||||
{
|
||||
public:
|
||||
TimeProfDummy(const char* szUnitName, unsigned int nHashCode);
|
||||
~TimeProfDummy();
|
||||
};
|
||||
|
||||
// ִ<><D6B4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>¼<EFBFBD>ڵ<EFBFBD>
|
||||
class TimeProfRecord
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
MAX_EXEC_UNIT_NAME_LEN = 64, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
||||
};
|
||||
TimeProfRecord(){}
|
||||
TimeProfRecord(const char* szUnitName, unsigned int nHashCode);
|
||||
~TimeProfRecord();
|
||||
//<2F><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
void setName(const char* szName);
|
||||
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
|
||||
inline void addChild(TimeProfRecord* record)
|
||||
{
|
||||
m_childrenNode.add(record);
|
||||
}
|
||||
// <20><>ѯ<EFBFBD>ڵ<EFBFBD>
|
||||
//CTimeProfRecord* getChild(const char* szUnitName);
|
||||
inline TimeProfRecord* getChildByHash(int nHashCode)
|
||||
{
|
||||
for (int i = 0; i < m_childrenNode.count(); i++)
|
||||
{
|
||||
if ((unsigned int)nHashCode == m_childrenNode[i]->m_nNameHashCode)
|
||||
return m_childrenNode[i];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8>Ϣ
|
||||
void dump(stream::BaseStream& stream, int level = 0);
|
||||
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
inline void reset(bool bIncOccuData = false)
|
||||
{
|
||||
m_nTotalCount = 0;
|
||||
m_nMaxTime = 0;
|
||||
m_nMinTime = 0;
|
||||
m_nTotalTime = 0;
|
||||
if (bIncOccuData)
|
||||
{
|
||||
m_nOccuTotalCount = 0;
|
||||
m_nOccuTotalTime = 0;
|
||||
m_nOccuMaxTime = 0;
|
||||
m_nOccuMinTime = 0;
|
||||
}
|
||||
}
|
||||
inline void reInitBasicData(const char* szUnitName, unsigned int nHashCode)
|
||||
{
|
||||
ZeroMemory(this, offsetof(TimeProfRecord, m_childrenNode));
|
||||
_STRNCPY_A(m_szExecUnitName, szUnitName);
|
||||
for (int i = 0; i < (int)strlen(m_szExecUnitName); i++)
|
||||
{
|
||||
if (m_szExecUnitName[i] == ('\"') || m_szExecUnitName[i] == (',') || m_szExecUnitName[i] == ('<')
|
||||
|| m_szExecUnitName[i] == ('>') || m_szExecUnitName[i] == (':') || m_szExecUnitName[i] == (' '))
|
||||
m_szExecUnitName[i] = ('_');
|
||||
}
|
||||
m_nNameHashCode = nHashCode;
|
||||
}
|
||||
inline void startProf()
|
||||
{
|
||||
m_nStartTime = _getTickCount();
|
||||
m_nTotalCount++;
|
||||
m_nOccuTotalCount++;
|
||||
}
|
||||
inline void endProf()
|
||||
{
|
||||
m_nEndTime = _getTickCount();
|
||||
unsigned long long nTimeConsume = m_nEndTime - m_nStartTime;
|
||||
if (m_nMaxTime < nTimeConsume)
|
||||
m_nMaxTime = nTimeConsume;
|
||||
if (m_nMinTime > nTimeConsume)
|
||||
m_nMinTime = nTimeConsume;
|
||||
if (m_nOccuMaxTime < nTimeConsume)
|
||||
m_nOccuMaxTime = nTimeConsume;
|
||||
if (m_nOccuMinTime > nTimeConsume)
|
||||
m_nOccuMinTime = nTimeConsume;
|
||||
m_nTotalTime += nTimeConsume;
|
||||
m_nOccuTotalTime += nTimeConsume;
|
||||
}
|
||||
|
||||
void clear();
|
||||
|
||||
//<2F>ַ<EFBFBD><D6B7><EFBFBD>hash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ṩ<EFBFBD><E1B9A9><EFBFBD><EFBFBD>
|
||||
inline static unsigned int hashlstr(const char* str, size_t len)
|
||||
{
|
||||
unsigned int h = (unsigned int)len;
|
||||
size_t step = (len>>5)+1; /* if string is too long, don't hash all its chars */
|
||||
size_t l1;
|
||||
for (l1=len; l1>=step; l1-=step) /* compute hash */
|
||||
h = h ^ ((h<<5)+(h>>2)+(unsigned char)str[l1-1]);
|
||||
return h;
|
||||
}
|
||||
|
||||
protected:
|
||||
unsigned int m_nNameHashCode; // <20><><EFBFBD><EFBFBD>Hash<73><68>
|
||||
unsigned long long m_nTotalCount; // ִ<>д<EFBFBD><D0B4><EFBFBD>
|
||||
unsigned long long m_nOccuTotalCount; // <20>ۻ<EFBFBD>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>
|
||||
unsigned long long m_nMaxTime; // <20><><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>к<EFBFBD>ʱ
|
||||
unsigned long long m_nMinTime; // <20><><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Сִ<D0A1>к<EFBFBD>ʱ
|
||||
unsigned long long m_nOccuMaxTime; // <20>ۻ<EFBFBD><DBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>к<EFBFBD>ʱ
|
||||
unsigned long long m_nOccuMinTime; // <20>ۻ<EFBFBD><DBBB><EFBFBD><EFBFBD><EFBFBD>Сִ<D0A1>к<EFBFBD>ʱ
|
||||
unsigned long long m_nTotalTime; // <20><><EFBFBD><EFBFBD>ִ<EFBFBD>к<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
unsigned long long m_nOccuTotalTime; // <20>ۻ<EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>
|
||||
unsigned long long m_nStartTime; // <20><>ʼִ<CABC><D6B4>ʱ<EFBFBD><CAB1>
|
||||
unsigned long long m_nEndTime; // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>
|
||||
char m_szExecUnitName[MAX_EXEC_UNIT_NAME_LEN]; // ִ<>е<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||
container::Vector<TimeProfRecord*> m_childrenNode; // <20><><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD><DAB5>б<EFBFBD>
|
||||
};
|
||||
|
||||
|
||||
// ִ<><D6B4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
class TimeProfMgr
|
||||
{
|
||||
public:
|
||||
TimeProfMgr();
|
||||
~TimeProfMgr();
|
||||
enum
|
||||
{
|
||||
ALLOC_RECORD_NUM = 200,
|
||||
};
|
||||
|
||||
bool InitMgr()
|
||||
{
|
||||
if (TLS_OUT_OF_INDEXES == s_dwTlsIdx)
|
||||
{
|
||||
s_dwTlsIdx = TlsAlloc();
|
||||
return s_dwTlsIdx != TLS_OUT_OF_INDEXES ? true : false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static TimeProfMgr& getSingleton()
|
||||
{
|
||||
static TimeProfMgr mgr;
|
||||
return mgr;
|
||||
}
|
||||
|
||||
TimeProfMgr* getThreadInst()
|
||||
{
|
||||
TimeProfMgr* profMgr = (TimeProfMgr *)TlsGetValue(s_dwTlsIdx);
|
||||
if (!profMgr)
|
||||
{
|
||||
profMgr = new TimeProfMgr();
|
||||
profMgr->setThreadId(GetCurrentThreadId());
|
||||
TlsSetValue(s_dwTlsIdx, profMgr);
|
||||
m_lock.Lock();
|
||||
m_vecTimeProfMgr.add(profMgr);
|
||||
m_lock.Unlock();
|
||||
}
|
||||
|
||||
return profMgr;
|
||||
}
|
||||
|
||||
// <20><>ʼִ<CABC>м<EFBFBD>ʱ
|
||||
inline void OnTimeProfRecordStart(TimeProfRecord *record)
|
||||
{
|
||||
m_execUnitStack.push(record);
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD>ִ<EFBFBD>м<EFBFBD>ʱ
|
||||
inline void OnTimeProfRecordEnd(TimeProfRecord *)
|
||||
{
|
||||
m_execUnitStack.pop();
|
||||
}
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1>ǰִ<C7B0>е<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
||||
inline TimeProfRecord* getCurrTimeProfRecord()
|
||||
{
|
||||
int count = m_execUnitStack.count();
|
||||
if (count > 0)
|
||||
return m_execUnitStack[count-1];
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8>Ϣ
|
||||
void dump();
|
||||
|
||||
inline TimeProfRecord* allocRecord()
|
||||
{
|
||||
if (m_freeRecordList.count() <= 0)
|
||||
allocTimeProfRecord();
|
||||
return m_freeRecordList.pop();
|
||||
}
|
||||
|
||||
inline void freeRecord(TimeProfRecord *record)
|
||||
{
|
||||
m_freeRecordList.add(record);
|
||||
}
|
||||
inline void clear()
|
||||
{
|
||||
m_execUnitRoot.clear();
|
||||
|
||||
for (int i = 0; i < m_freeRecordList.count(); i++)
|
||||
{
|
||||
TimeProfRecord *pRecord = m_freeRecordList[i];
|
||||
if (pRecord)
|
||||
{
|
||||
pRecord->~TimeProfRecord();
|
||||
free(pRecord);
|
||||
}
|
||||
|
||||
}
|
||||
m_freeRecordList.empty();
|
||||
m_execUnitStack.empty();
|
||||
|
||||
if (s_dwTlsIdx != TLS_OUT_OF_INDEXES)
|
||||
{
|
||||
TlsFree(s_dwTlsIdx);
|
||||
s_dwTlsIdx = TLS_OUT_OF_INDEXES;
|
||||
}
|
||||
for (int i = 0; i < m_vecTimeProfMgr.count(); i++)
|
||||
{
|
||||
delete m_vecTimeProfMgr[i];
|
||||
}
|
||||
m_vecTimeProfMgr.empty();
|
||||
}
|
||||
protected:
|
||||
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͷ
|
||||
void dumpDateTimeHeader(stream::BaseStream& stream);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
|
||||
void dumpDateTimeSep(stream::BaseStream& stream);
|
||||
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
|
||||
void getCurrentTm(tm &t);
|
||||
// dump
|
||||
void dumpImpl(stream::BaseStream& stream);
|
||||
// <20><>ʽ<EFBFBD><CABD>ʱ<EFBFBD><CAB1>
|
||||
void formatTimeStr(char* szDataBuff, size_t nLen, tm *t);
|
||||
// ִ<><D6B4>һ<EFBFBD>η<EFBFBD><CEB7>䣨ÿ<E4A3A8>η<EFBFBD><CEB7><EFBFBD>ALLOC_RECORD_NUM<55><4D><EFBFBD><EFBFBD>
|
||||
inline void allocTimeProfRecord()
|
||||
{
|
||||
for (int i = 0; i < ALLOC_RECORD_NUM; i++)
|
||||
{
|
||||
TimeProfRecord* pRecords = (TimeProfRecord *)malloc(sizeof(TimeProfRecord));
|
||||
if (pRecords)
|
||||
{
|
||||
new (pRecords)TimeProfRecord();
|
||||
m_freeRecordList.add(pRecords);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>Id
|
||||
inline void setThreadId(DWORD dwThreadId) { m_dwThreadId = dwThreadId; }
|
||||
|
||||
protected:
|
||||
container::Vector<TimeProfRecord *> m_execUnitStack; // ִ<>е<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>ջ
|
||||
TimeProfRecord m_execUnitRoot; // ִ<>е<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD>ĸ<EFBFBD><C4B8>ڵ<EFBFBD>
|
||||
tm m_lastDumpTime; // <20>ϴ<EFBFBD>dump<6D><70><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
container::Vector<TimeProfRecord*> m_freeRecordList;
|
||||
static DWORD s_dwTlsIdx; // Tls Slot Index
|
||||
lock::Mutex m_lock; // Sync for multithread create timeprofmgr object
|
||||
container::Vector<TimeProfMgr*> m_vecTimeProfMgr; // TimeProfMgr list
|
||||
DWORD m_dwThreadId; // Current ThreadId
|
||||
};
|
||||
|
||||
#ifdef _TIME_STATE_CHECK_
|
||||
#define DECLARE_TIME_PROF(name) static unsigned int _STATIC_FUNCTION_HASH_VALUE_= TimeProfRecord::hashlstr(name,strlen(name)); \
|
||||
TimeProfDummy LocalTimeProfRecord(name, _STATIC_FUNCTION_HASH_VALUE_ );
|
||||
#define DECLARE_FUN_TIME_PROF() DECLARE_TIME_PROF(__FUNCTION__)
|
||||
#else
|
||||
#define DECLARE_TIME_PROF(name_)
|
||||
#define DECLARE_FUN_TIME_PROF() DECLARE_TIME_PROF(__FUNCTION__)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
59
Gateway/common/statistic/time_stat_log.h
Normal file
59
Gateway/common/statistic/time_stat_log.h
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
#define DEBUG_LOGIC_TIME
|
||||
#define DEBUG_LOG_INTERVAL 600000
|
||||
#define DEBUG_LOG_MAX_TIME 500
|
||||
|
||||
#ifdef DEBUG_LOGIC_TIME
|
||||
#define LOGTIME_BEGIN \
|
||||
static int __LOG_TIME_LOGS[100] = { 0 }; \
|
||||
int64_t __log_last_t, __log_curr_t; \
|
||||
__log_curr_t = __log_last_t = _getTickCount(); \
|
||||
int64_t __log_tick_t; \
|
||||
int __log_diff_t; \
|
||||
int __log_idx = 0; \
|
||||
static int64_t __log_log_t = __log_curr_t + DEBUG_LOG_INTERVAL;
|
||||
|
||||
#define LOGTIME \
|
||||
__log_tick_t = _getTickCount(); \
|
||||
__log_diff_t = (int)(__log_tick_t - __log_last_t); \
|
||||
if (__log_idx >= 0 && __log_idx < 100 && __log_diff_t > __LOG_TIME_LOGS[__log_idx]) \
|
||||
{ \
|
||||
__LOG_TIME_LOGS[__log_idx] = __log_diff_t; \
|
||||
} \
|
||||
__log_last_t = __log_tick_t; \
|
||||
__log_idx ++;
|
||||
|
||||
#define SW_LOGTIME(__log_idx_) \
|
||||
__log_tick_t = _getTickCount(); \
|
||||
__log_diff_t = (int)(__log_tick_t - __log_last_t); \
|
||||
if (__log_idx_ >= 0 && __log_idx_ < 100 && __log_diff_t > __LOG_TIME_LOGS[__log_idx_]) \
|
||||
{ \
|
||||
__LOG_TIME_LOGS[__log_idx_] = __log_diff_t; \
|
||||
} \
|
||||
__log_idx = __log_idx_;
|
||||
|
||||
#define LOGTIME_END(__log_fun, __log_max_time) \
|
||||
if (__log_curr_t >= __log_log_t && __log_idx >= 0 && __log_idx < 100) \
|
||||
{ \
|
||||
bool __log_haslog = true; \
|
||||
for (int i=0; i<__log_idx; i++) \
|
||||
{ \
|
||||
if (__LOG_TIME_LOGS[i] > __log_max_time) \
|
||||
{ \
|
||||
if (__log_haslog) { \
|
||||
OutputMsg(rmError, "=============debug %s time:============", __log_fun); \
|
||||
__log_haslog = false; \
|
||||
} \
|
||||
OutputMsg(rmError, "%d=%d", i, __LOG_TIME_LOGS[i]); \
|
||||
} \
|
||||
} \
|
||||
memset(__LOG_TIME_LOGS, 0, sizeof(__LOG_TIME_LOGS)); \
|
||||
__log_log_t = __log_curr_t + DEBUG_LOG_INTERVAL; \
|
||||
}
|
||||
|
||||
#else
|
||||
#define LOGTIME_BEGIN
|
||||
#define LOGTIME
|
||||
#define SW_LOGTIME(__log_idx_)
|
||||
#define LOGTIME_END(__log_fun, __log_max_time)
|
||||
#endif
|
||||
172
Gateway/common/thread/async_worker.cc
Normal file
172
Gateway/common/thread/async_worker.cc
Normal file
@@ -0,0 +1,172 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "os_def.h"
|
||||
#include "_ast.h"
|
||||
extern "C"
|
||||
{
|
||||
#include "lua.h"
|
||||
#include "lauxlib.h"
|
||||
#include "ltm.h"
|
||||
}
|
||||
#include "x_thread.h"
|
||||
#include "x_tick.h"
|
||||
#include "x_lock.h"
|
||||
#include "ref_string.hpp"
|
||||
#include "stream.h"
|
||||
#include "share_util.h"
|
||||
#include "container/str_hash_table.h"
|
||||
#include "container/queue_list.h"
|
||||
#include "memory/buffer_allocator.h"
|
||||
#include "luabase/base_lua.h"
|
||||
#include "luabase/base_lua_config.h"
|
||||
#include "luabase/lua_pre_process.h"
|
||||
#include "luabase/clvariant.h"
|
||||
#include "luabase/lua_clvariant.h"
|
||||
#include "luabase/lua_profiler.h"
|
||||
#include "luabase/script_value.hpp"
|
||||
#include "luabase/script_value_list.h"
|
||||
#include "luabase/vsp_def.h"
|
||||
#include "luabase/base_script.h"
|
||||
#include "async_worker.h"
|
||||
|
||||
AsyncWorker::AsyncWorker(const char* lua_file) : Inherited(),
|
||||
alloc_("AsyncWorker"), wcb_(NULL), reload_(false)
|
||||
{
|
||||
cb_list_.setLock(&cb_list_lock_);
|
||||
|
||||
LoadScript(lua_file);
|
||||
|
||||
_STRNCPY_A(lua_file_, lua_file);
|
||||
}
|
||||
|
||||
AsyncWorker::~AsyncWorker()
|
||||
{
|
||||
cb_list_.flush();
|
||||
int count = cb_list_.count();
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
CBData* cb = cb_list_[i];
|
||||
if (!cb) continue;
|
||||
|
||||
if (cb->params_ && cb->free_func_)
|
||||
{
|
||||
cb->free_func_(cb);
|
||||
}
|
||||
|
||||
alloc_.FreeBuffer(cb);
|
||||
}
|
||||
|
||||
cb_list_.clear();
|
||||
}
|
||||
|
||||
int AsyncWorker::Run()
|
||||
{
|
||||
if (reload_)
|
||||
{
|
||||
reload_ = false;
|
||||
LoadScript(lua_file_);
|
||||
}
|
||||
|
||||
if (cb_list_.appendCount() <= 0) return 0;
|
||||
|
||||
cb_list_.flush();
|
||||
int count = cb_list_.count();
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
CBData* cb = cb_list_[i];
|
||||
cb->work_func_(cb);
|
||||
|
||||
this->wcb_(cb);
|
||||
}
|
||||
|
||||
cb_list_.clear();
|
||||
return count;
|
||||
}
|
||||
|
||||
void AsyncWorker::OnRoutine()
|
||||
{
|
||||
OnStart();
|
||||
|
||||
while (!terminated())
|
||||
{
|
||||
if (Run() <= 0)
|
||||
Sleep(1);
|
||||
}
|
||||
|
||||
OnStop();
|
||||
}
|
||||
|
||||
void AsyncWorker::OnStart()
|
||||
{
|
||||
OutputMsg(rmError, "AsyncWorker start!");
|
||||
}
|
||||
|
||||
void AsyncWorker::OnStop()
|
||||
{
|
||||
OutputMsg(rmError, "AsyncWorker stop!");
|
||||
}
|
||||
|
||||
void AsyncWorker::AppendWork(CBData* cb)
|
||||
{
|
||||
cb_list_.append(cb);
|
||||
}
|
||||
|
||||
void AsyncWorker::LoadScript(const char* lua_file)
|
||||
{
|
||||
if (lua_file)
|
||||
{
|
||||
CVSPDefinition vsp_def;
|
||||
vsp_def.LoadDefinitions("./data/vspdef.txt");
|
||||
script_.SetVspDef(&vsp_def);
|
||||
|
||||
if (!script_.LoadScript(lua_file))
|
||||
{
|
||||
OutputMsg(rmError, "load AsyncWorker script fail!!!file:%s", lua_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int AsyncWorker::SendLuaMessage(ScriptValueList& req, WordFunc func)
|
||||
{
|
||||
id_++;
|
||||
|
||||
if (id_ == 0) id_++;
|
||||
|
||||
CBData* cb = (CBData*)alloc_.AllocBuffer(sizeof(*cb));
|
||||
new(cb)CBData(this, id_);
|
||||
|
||||
cb->worker_ = this;
|
||||
cb->work_func_ = &AsyncWorker::ExecuteLua;
|
||||
cb->after_func_ = func;
|
||||
cb->free_func_ = &AsyncWorker::FreeLuaParams;
|
||||
cb->params_ = alloc_.AllocBuffer(sizeof(LuaParams));
|
||||
new(cb->params_)LuaParams();
|
||||
|
||||
LuaParams* p = (LuaParams*)cb->params_;
|
||||
p->req_ = req;
|
||||
p->result_ << cb->guid_;
|
||||
AppendWork(cb);
|
||||
return cb->guid_;
|
||||
}
|
||||
|
||||
void AsyncWorker::FreeLuaParams(void* callback)
|
||||
{
|
||||
CBData* cb = (CBData*)callback;
|
||||
|
||||
if (cb->params_)
|
||||
{
|
||||
((LuaParams*)cb->params_)->~LuaParams();
|
||||
cb->worker_->GetAlloc().FreeBuffer(cb->params_);
|
||||
cb->params_ = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void AsyncWorker::ExecuteLua(void* cb)
|
||||
{
|
||||
CBData* c = (CBData*)cb;
|
||||
LuaParams* p = (LuaParams*)c->params_;
|
||||
c->worker_->script_.Call("main", &p->req_, &p->result_);
|
||||
}
|
||||
|
||||
93
Gateway/common/thread/async_worker.h
Normal file
93
Gateway/common/thread/async_worker.h
Normal file
@@ -0,0 +1,93 @@
|
||||
#ifndef _ASYNC_WORKER_H_
|
||||
#define _ASYNC_WORKER_H_
|
||||
|
||||
/*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>̣߳<DFB3><CCA3><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>߳<EFBFBD>ִ<EFBFBD>еIJ<D0B5><C4B2><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>web<65>ӿڡ<D3BF>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>µĹ<C2B5><C4B9>ܣ<EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>̵߳<DFB3>ִ<EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
|
||||
using namespace thread;
|
||||
using namespace container;
|
||||
|
||||
class AsyncWorker: public thread::BaseThread
|
||||
{
|
||||
public:
|
||||
typedef BufferAllocator AsyncWorkerAlloc;
|
||||
|
||||
typedef BaseThread Inherited;
|
||||
typedef void (*WordFunc)(void* cb);
|
||||
typedef void (*WorkerCallBack)(void* cb);
|
||||
typedef void (*FreeFunc)(void* cb);
|
||||
|
||||
struct LuaParams
|
||||
{
|
||||
ScriptValueList req_; // <20><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
ScriptValueList result_; // ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ص<F3B7B5BB>ֵ
|
||||
};
|
||||
|
||||
struct CBData
|
||||
{
|
||||
unsigned int guid_; // <20><><EFBFBD>кţ<D0BA>ÿ<EFBFBD><C3BF>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ψһ<CEA8><D2BB>id<69><64><EFBFBD><EFBFBD><EFBFBD>ڻص<DABB>
|
||||
WordFunc work_func_; // <20>ڱ<EFBFBD><DAB1>߳<EFBFBD><DFB3><EFBFBD>ִ<EFBFBD>еĹ<D0B5><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>web
|
||||
WordFunc after_func_; // <20><><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>߳<EFBFBD>Ҫִ<D2AA>еĺ<D0B5><C4BA><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
FreeFunc free_func_;
|
||||
void* params_;
|
||||
AsyncWorker* worker_;
|
||||
CBData(AsyncWorker* worker, unsigned int guid):
|
||||
guid_(guid), work_func_(NULL), after_func_(NULL),
|
||||
free_func_(NULL), params_(NULL), worker_(worker)
|
||||
{
|
||||
}
|
||||
};
|
||||
public:
|
||||
AsyncWorker(const char* lua_file = NULL);
|
||||
|
||||
void LoadScript(const char* lua_file);
|
||||
|
||||
virtual ~AsyncWorker();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>߳<EFBFBD>ִ<EFBFBD>еIJ<D0B5><C4B2><EFBFBD>
|
||||
void AppendWork(CBData* cb);
|
||||
|
||||
public:
|
||||
AsyncWorkerAlloc& GetAlloc()
|
||||
{
|
||||
return alloc_;
|
||||
}
|
||||
void SetWorkCallBack(WorkerCallBack wcb)
|
||||
{
|
||||
wcb_ = wcb;
|
||||
}
|
||||
void Reload()
|
||||
{
|
||||
reload_ = true;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>lua<75><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int SendLuaMessage(ScriptValueList& req, WordFunc func);
|
||||
protected:
|
||||
void OnRoutine();
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
int Run();
|
||||
void OnStart();
|
||||
void OnStop();
|
||||
private:
|
||||
static void FreeLuaParams(void* callback);
|
||||
static void ExecuteLua(void* cb);
|
||||
private:
|
||||
QueueList<CBData*> cb_list_;
|
||||
Mutex cb_list_lock_;
|
||||
|
||||
AsyncWorkerAlloc alloc_;
|
||||
unsigned int id_;
|
||||
WorkerCallBack wcb_;
|
||||
BaseScript script_; // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>lua<75>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
bool reload_; // ֪ͨ<CDA8><D6AA><EFBFBD>¼<EFBFBD><C2BC>ؽű<D8BD>
|
||||
char lua_file_[128]; //<2F>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
241
Gateway/common/utils/fdop.cc
Normal file
241
Gateway/common/utils/fdop.cc
Normal file
@@ -0,0 +1,241 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "os_def.h"
|
||||
#include "_ast.h"
|
||||
#include "share_util.h"
|
||||
#include "fdop.h"
|
||||
|
||||
#ifndef _MSC_VER
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
using namespace FDOP;
|
||||
|
||||
bool FDOP::FileExists(const char* sFilePath)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
DWORD dwAttr = GetFileAttributes(sFilePath);
|
||||
|
||||
if (dwAttr == (DWORD) - 1)
|
||||
return false;
|
||||
else return true;
|
||||
|
||||
#else
|
||||
|
||||
if (!access(sFilePath, F_OK))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
bool FDOP::DeepCreateDirectory(const char* sDirPath)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
char sPath[4096];
|
||||
LPTSTR sPathPtr = sPath;
|
||||
size_t dwNameLen, dwBufLen = ArrayCount(sPath) - 1;
|
||||
DWORD dwAttr;
|
||||
|
||||
while (true)
|
||||
{
|
||||
dwNameLen = ExtractTopDirectoryName(sDirPath, &sDirPath, sPathPtr, dwBufLen);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>Ƴ<EFBFBD><C6B3>ȳ<EFBFBD><C8B3><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (dwNameLen >= dwBufLen)
|
||||
return false;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (dwNameLen == 0)
|
||||
return true;
|
||||
|
||||
sPathPtr += dwNameLen;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>Ŀ¼
|
||||
if (sPathPtr[-1] != ':')
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2B4B4BD><EFBFBD>Ŀ¼
|
||||
dwAttr = GetFileAttributes(sPath);
|
||||
|
||||
if ((dwAttr == (DWORD) - 1 && GetLastError() == ERROR_FILE_NOT_FOUND))
|
||||
{
|
||||
if (!CreateDirectory(sPath, NULL))
|
||||
return false;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><EFBFBD>false
|
||||
else if (!(dwAttr & FILE_ATTRIBUTE_DIRECTORY))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
sPathPtr[0] = '\\';
|
||||
sPathPtr++;
|
||||
|
||||
if (dwBufLen > dwNameLen)
|
||||
dwBufLen -= dwNameLen + 1;
|
||||
else dwBufLen = 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
#else
|
||||
char dirName[256];
|
||||
_STRNCPY_A(dirName, sDirPath);
|
||||
int len = strlen(dirName);
|
||||
|
||||
if (dirName[len - 1] != '/')
|
||||
_STRNCAT_A(dirName, "/");
|
||||
|
||||
len = strlen(dirName);
|
||||
|
||||
for (int i = 1; i < len; i++)
|
||||
{
|
||||
if (dirName[i] == '/')
|
||||
{
|
||||
dirName[i] = 0;
|
||||
if (access(dirName, F_OK) != 0)
|
||||
{
|
||||
if (mkdir(dirName, 0755) == -1)
|
||||
{
|
||||
//OutputMsg(rmError, "mkdir error, %s", dirName);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
dirName[i] = '/';
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
size_t FDOP::ExtractFileDirectory(const char* sFilePath, char* sDirBuf, size_t dwBufLen)
|
||||
{
|
||||
const char* sDirEnd = sFilePath + strlen(sFilePath) - 1;
|
||||
|
||||
while (sDirEnd >= sFilePath && *sDirEnd != '/' && *sDirEnd != '\\')
|
||||
{
|
||||
sDirEnd--;
|
||||
}
|
||||
|
||||
if (sDirEnd > sFilePath)
|
||||
{
|
||||
size_t dwNameLen = sDirEnd - sFilePath;
|
||||
|
||||
if (dwBufLen > 0)
|
||||
{
|
||||
if (dwBufLen > dwNameLen)
|
||||
dwBufLen = dwNameLen;
|
||||
else dwBufLen--;
|
||||
|
||||
memcpy(sDirBuf, sFilePath, sizeof(*sDirBuf) * dwBufLen);
|
||||
sDirBuf[dwBufLen] = 0;
|
||||
}
|
||||
|
||||
return dwNameLen;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t FDOP::ExtractTopDirectoryName(const char* sDirPath, const char* *ppChildDirPath, char* sDirName, size_t dwBufLen)
|
||||
{
|
||||
const char* sNameEnd;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'/'<27><>'\'
|
||||
while (*sDirPath && (*sDirPath == '/' || *sDirPath == '\\'))
|
||||
{
|
||||
sDirPath++;
|
||||
}
|
||||
|
||||
sNameEnd = sDirPath;
|
||||
|
||||
//<2F><>λĿ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>λ<EFBFBD><CEBB>
|
||||
while (*sNameEnd)
|
||||
{
|
||||
if (*sNameEnd == '/' || *sNameEnd == '\\')
|
||||
break;
|
||||
|
||||
sNameEnd++;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
|
||||
if (sNameEnd > sDirPath)
|
||||
{
|
||||
size_t dwNameLen = sNameEnd - sDirPath;
|
||||
|
||||
if (dwBufLen > 0)
|
||||
{
|
||||
if (dwBufLen > dwNameLen)
|
||||
dwBufLen = dwNameLen;
|
||||
else dwBufLen--;
|
||||
|
||||
memcpy(sDirName, sDirPath, sizeof(*sDirPath) * dwBufLen);
|
||||
sDirName[dwBufLen] = 0;
|
||||
|
||||
if (ppChildDirPath)
|
||||
*ppChildDirPath = sNameEnd;
|
||||
}
|
||||
|
||||
return dwNameLen;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t FDOP::ExtractFileName(const char* sFilePath, char* sNameBuf, size_t dwBufLen)
|
||||
{
|
||||
const char* sNameStart;
|
||||
const char* sNameEnd = sFilePath + strlen(sFilePath) - 1;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'/'<27><>'\'
|
||||
while (sNameEnd >= sFilePath && (*sNameEnd == '/' || *sNameEnd == '\\'))
|
||||
{
|
||||
sNameEnd--;
|
||||
}
|
||||
|
||||
sNameStart = sNameEnd;
|
||||
sNameEnd++;
|
||||
|
||||
//<2F><>λĿ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>λ<EFBFBD><CEBB>
|
||||
while (sNameStart >= sFilePath)
|
||||
{
|
||||
if (*sNameStart == '/' || *sNameStart == '\\')
|
||||
break;
|
||||
|
||||
sNameStart--;
|
||||
}
|
||||
|
||||
sNameStart++;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
|
||||
if (sNameStart < sNameEnd)
|
||||
{
|
||||
size_t dwNameLen = sNameEnd - sNameStart;
|
||||
|
||||
if (dwBufLen > 0)
|
||||
{
|
||||
if (dwBufLen > dwNameLen)
|
||||
dwBufLen = dwNameLen;
|
||||
else dwBufLen--;
|
||||
|
||||
memcpy(sNameBuf, sNameStart, sizeof(*sNameStart) * dwBufLen);
|
||||
sNameBuf[dwBufLen] = 0;
|
||||
}
|
||||
|
||||
return dwNameLen;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
66
Gateway/common/utils/fdop.h
Normal file
66
Gateway/common/utils/fdop.h
Normal file
@@ -0,0 +1,66 @@
|
||||
#ifndef _FDOP_H_
|
||||
#define _FDOP_H_
|
||||
|
||||
/************************************************************************
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
namespace FDOP
|
||||
{
|
||||
/* <20>ж<EFBFBD><D0B6>ļ<EFBFBD><C4BC><EFBFBD>Ŀ¼<C4BF>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20>ڲ<EFBFBD><DAB2><EFBFBD>ϵͳ<CFB5>У<EFBFBD>Ŀ¼Ҳ<C2BC><D2B2>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ж<EFBFBD>һ<EFBFBD><D2BB>Ŀ¼<C4BF>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ʹ<EFBFBD><CAB9>DirectoryExists<74><73>
|
||||
* Ҫ<>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>鵵<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ӧ<EFBFBD><D3A6>ʹ<EFBFBD><CAB9>IsArchive<76><65>
|
||||
* @<40><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true<75><65><EFBFBD><EFBFBD>false
|
||||
* %<25>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2>ó<EFBFBD><C3B3><EFBFBD>MAX_PATH
|
||||
*/
|
||||
bool FileExists(const char* sFilePath);
|
||||
|
||||
/* <20><><EFBFBD>㴴<EFBFBD><E3B4B4>Ŀ¼
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼C:\a\b\c\d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF>ĸ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F0BCB6B4><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
||||
* @<40><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false<73><65>
|
||||
* %<25><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>Ŀ¼<C4BF>ɹ<EFBFBD><C9B9><EFBFBD><F3B2A2B4><EFBFBD><EFBFBD><EFBFBD>Ŀ¼ʧ<C2BC>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false<73><65><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>ᱻɾ<E1B1BB><C9BE><EFBFBD><EFBFBD>
|
||||
* %Ŀ¼·<C2BC><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAX_PATH<54><48><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
bool DeepCreateDirectory(const char* sDirPath);
|
||||
|
||||
|
||||
/* <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ŀ¼·<C2BC><C2B7>
|
||||
* c:\abc\efg\123.txt --> c:\abc\efg\
|
||||
* c:\abc\efg\ --> c:\abc\
|
||||
* <20><><EFBFBD><EFBFBD>sDirBuf<75><66><EFBFBD>ڴ洢Ŀ¼<C4BF>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwBufLenΪsDirName<6D><65><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD>dwBufLenֵΪ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ὫĿ¼·<C2BC><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sDirBuf<75>У<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD>dwBufLenֵ<6E><D6B5>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ὫĿ¼·<C2BC><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sDirBuf<75>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>sDirBuf<75><66>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>;
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>dwBufLen-1<><31><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sDirBuf<75><66>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>Ŀ¼·<C2BC><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
*/
|
||||
size_t ExtractFileDirectory(const char* sFilePath, char* sDirBuf, size_t dwBufLen);
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
|
||||
* (abc\efg\ --> abc)
|
||||
* <20><><EFBFBD><EFBFBD>ppChildDirPath<74><68><EFBFBD>ڴ涥<DAB4><E6B6A5>Ŀ¼֮<C2BC><D6AE><EFBFBD><EFBFBD>Ŀ¼·<C2BC><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
|
||||
* <20><><EFBFBD><EFBFBD>sDirName<6D><65><EFBFBD>ڴ洢Ŀ¼<C4BF>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwBufLenΪsDirName<6D><65><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD>dwBufLenֵΪ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ὫĿ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sDirName<6D>У<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD>dwBufLenֵ<6E><D6B5>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ὫĿ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sDirName<6D>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>sDirName<6D><65>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>;
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>dwBufLen-1<><31><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sDirName<6D><65>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
*/
|
||||
size_t ExtractTopDirectoryName(const char* sDirPath, const char* *ppChildDirPath, char* sDirName, size_t dwBufLen);
|
||||
|
||||
/* <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
|
||||
* c:\abc\123.txt --> 123.txt
|
||||
* c:\abc\efg\ --> efg
|
||||
* <20><><EFBFBD><EFBFBD>sDirBuf<75><66><EFBFBD>ڴ洢<DAB4>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwBufLenΪsNameBuf<75><66><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD>dwBufLenֵΪ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ὣ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sNameBuf<75>У<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD>dwBufLenֵ<6E><D6B5>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ὣ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sNameBuf<75>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>sNameBuf<75><66>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>;
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>dwBufLen-1<><31><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sNameBuf<75><66>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
*/
|
||||
size_t ExtractFileName(const char* sFilePath, char* sNameBuf, size_t dwBufLen);
|
||||
}
|
||||
|
||||
#endif
|
||||
36
Gateway/common/utils/luareader.h
Normal file
36
Gateway/common/utils/luareader.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
#include "luabase/base_lua_config.h"
|
||||
#include "string_ex.h"
|
||||
|
||||
/*
|
||||
ly:ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ṩ<EFBFBD><E1B9A9>ȡlua<75>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD>ͽӿڣ<D3BF><DAA3><EFBFBD>ȡlua<75><61><EFBFBD>õĵط<C4B5>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA>Դ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<09><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>벢<EFBFBD>̳<EFBFBD>BaseLuaConfig<69><67>
|
||||
*/
|
||||
class LuaReader :public BaseLuaConfig
|
||||
{
|
||||
typedef BaseLuaConfig Base;
|
||||
public:
|
||||
void showError(const char* sError) { OutputMsg(rmError, sError); }
|
||||
void showTableNotExists(const char* sTableName) { return Base::showTableNotExists(sTableName); }
|
||||
void showFieldDoesNotContainValue(const char* sFieldName, const char* sValueType) { return Base::showFieldDoesNotContainValue(sFieldName, sValueType); }
|
||||
|
||||
bool openGlobalTable(const char* sTableName) { return Base::openGlobalTable(sTableName); }
|
||||
bool openFieldTable(const char* sTableName) { return Base::openFieldTable(sTableName); }
|
||||
bool enumTableFirst(){ return Base::enumTableFirst(); }
|
||||
bool enumTableNext() { return Base::enumTableNext(); }
|
||||
void endTableEnum() { return Base::endTableEnum(); }
|
||||
bool getFieldIndexTable(const int IndexStartFromOne) { return Base::getFieldIndexTable(IndexStartFromOne); }
|
||||
bool fieldTableExists(const char* sTableName) { return Base::feildTableExists(sTableName); }
|
||||
void closeTable() { return Base::closeTable(); }
|
||||
const char* getTablePath() { String r; return Base::getTablePath(r); }
|
||||
const char* getKeyName() { String r; return Base::getKeyName(r); }
|
||||
inline int getValueType(){ return Base::getValueType(); }
|
||||
bool getFieldBoolean(const char* sFieldName, const bool* pDefValue = nullptr, int* pIsValid = nullptr) { return Base::getFieldBoolean(sFieldName, pDefValue, pIsValid); }
|
||||
double getFieldNumber(const char* sFieldName, const double* pDefValue = nullptr, int* pIsValid = nullptr) { return Base::getFieldNumber(sFieldName, pDefValue, pIsValid); }
|
||||
int64_t getFieldInt64(const char* sFieldName, const int64_t* pDefValue = nullptr, int* pIsValid = nullptr) { return Base::getFieldInt64(sFieldName, pDefValue, pIsValid); }
|
||||
int getFieldInt(const char* sFieldName, const int* pDefValue = nullptr, int* pIsValid = nullptr) { return Base::getFieldInt(sFieldName, pDefValue, pIsValid); }
|
||||
const char* getFieldString(const char* sFieldName, const char* pDefValue = nullptr, int* pIsValid = nullptr) { return Base::getFieldString(sFieldName, pDefValue, pIsValid); }
|
||||
int getFieldStringBuffer(const char* sFieldName, char* sBuffer, size_t dwBufLen) { return Base::getFieldStringBuffer(sFieldName, sBuffer, dwBufLen); }
|
||||
int getTableLen() { return (int)lua_objlen(lua_, -1); }
|
||||
};
|
||||
40
Gateway/common/utils/singleton.h
Normal file
40
Gateway/common/utils/singleton.h
Normal file
@@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
template< typename T >
|
||||
struct Singleton
|
||||
{
|
||||
typedef T value_type;
|
||||
typedef Singleton self_type;
|
||||
|
||||
private:// not to be implemented
|
||||
Singleton(const self_type&){}
|
||||
self_type& operator = (const self_type&){}
|
||||
Singleton(){}
|
||||
|
||||
friend T;
|
||||
private:// this struct promises thread safty
|
||||
struct creator
|
||||
{
|
||||
creator()
|
||||
{ // ensure that instance() called before main() starts
|
||||
self_type::instance();
|
||||
}
|
||||
inline void null_action() const
|
||||
{
|
||||
//empty
|
||||
}
|
||||
};
|
||||
|
||||
static creator creator_;
|
||||
|
||||
public:
|
||||
static value_type& instance()
|
||||
{ // the object to be returned
|
||||
static value_type instance_;
|
||||
// force the initialization of creator_
|
||||
creator_.null_action();
|
||||
return instance_;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
typename Singleton<T>::creator Singleton<T>::creator_;
|
||||
250
Gateway/common/utils/watch_thread.cc
Normal file
250
Gateway/common/utils/watch_thread.cc
Normal file
@@ -0,0 +1,250 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "os_def.h"
|
||||
#include "_ast.h"
|
||||
|
||||
#include "x_tick.h"
|
||||
#include "x_lock.h"
|
||||
#include "container/queue_list.h"
|
||||
#include "share_util.h"
|
||||
#include "os_def.h"
|
||||
#include "appitnmsg.h"
|
||||
#include "server_def.h"
|
||||
#include "watch_thread.h"
|
||||
|
||||
|
||||
WatchThread::WatchThread()
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
handle_ = NULL;
|
||||
#endif
|
||||
stoped_ = true;
|
||||
exit_ = true;
|
||||
|
||||
msg_list_.setLock(&msg_lock_);
|
||||
|
||||
Startup();
|
||||
}
|
||||
|
||||
WatchThread::~WatchThread()
|
||||
{
|
||||
Stop();
|
||||
|
||||
msg_list_.flush();
|
||||
msg_list_.clear();
|
||||
}
|
||||
|
||||
void WatchThread::SingleRun()
|
||||
{
|
||||
ProcessSysMsg();
|
||||
|
||||
//check
|
||||
time_t now_t = _getTickCount();
|
||||
for (int i = 0; i < list_.count(); ++i)
|
||||
{
|
||||
WatchData& data = list_[i];
|
||||
|
||||
if (now_t - data.last_t_ >= data.timeout_)
|
||||
{
|
||||
printf("watch thread: %d block!time:%lld current = %d\n",
|
||||
data.id_, (long long int)(now_t - data.last_t_), list_.count());
|
||||
|
||||
if (data.func_)
|
||||
data.func_(data.params_);
|
||||
data.last_t_ = now_t; // <20><><EFBFBD>ⲻ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WatchThread::PostMsg(UINT uMsg, size_t para1, size_t para2, BlockFunc func, void* params)
|
||||
{
|
||||
InterMsg msg;
|
||||
msg.uMsg = uMsg;
|
||||
msg.uParam1 = para1;
|
||||
msg.uParam2 = para2;
|
||||
msg.func = func;
|
||||
msg.params = params;
|
||||
msg_list_.append(msg);
|
||||
}
|
||||
|
||||
void WatchThread::OnRecvSysMsg(UINT msg, size_t p1, size_t p2, BlockFunc func, void* params)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case wmAddWatch:
|
||||
{
|
||||
int id = (int)p1;
|
||||
if (Find(id))
|
||||
{
|
||||
OutputMsg(rmError, "this id exist:%d", id);
|
||||
}
|
||||
WatchData data;
|
||||
data.id_ = id;
|
||||
data.last_t_ = _getTickCount();
|
||||
data.timeout_ = (int)p2;
|
||||
data.func_ = func;
|
||||
data.params_ = params;
|
||||
list_.add(data);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case wmReport:
|
||||
{
|
||||
WatchData* data = Find((int)p1);
|
||||
if (data)
|
||||
{
|
||||
data->last_t_ = _getTickCount();
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%d is not find. report error!!!!\n", (int)p1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case wmRemove:
|
||||
{
|
||||
int id = (int)p1;
|
||||
for (int i = 0; i < list_.count(); ++i)
|
||||
{
|
||||
WatchData& data = list_[i];
|
||||
|
||||
if (data.id_ == id)
|
||||
{
|
||||
int count = list_.count();
|
||||
//<2F><><EFBFBD><EFBFBD>
|
||||
//list_.remove(i);
|
||||
for (int j = i + 1, t = i; j < list_.count(); j++, t++)
|
||||
{
|
||||
WatchData& srcData = list_[j];
|
||||
WatchData& destData = list_[t];
|
||||
memcpy(&destData, &srcData, sizeof(WatchData));
|
||||
}
|
||||
list_.trunc(count-1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void WatchThread::ProcessSysMsg()
|
||||
{
|
||||
msg_list_.flush();
|
||||
int count = msg_list_.count();
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
InterMsg& msg = msg_list_[i];
|
||||
OnRecvSysMsg(msg.uMsg, msg.uParam1, msg.uParam2, msg.func, msg.params);
|
||||
}
|
||||
|
||||
msg_list_.clear();
|
||||
}
|
||||
|
||||
void WatchThread::OnWorkThreadStart()
|
||||
{
|
||||
OutputMsg(rmError, "watch thread start");
|
||||
}
|
||||
|
||||
void WatchThread::OnWorkThreadStop()
|
||||
{
|
||||
OutputMsg(rmError, "watch thread stop");
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
void STDCALL WatchThread::Work_R(WatchThread* ptr)
|
||||
#else
|
||||
void* WatchThread::Work_R(void* ptr)
|
||||
#endif
|
||||
{
|
||||
WatchThread* watch = (WatchThread*)ptr;
|
||||
|
||||
watch->OnWorkThreadStart();
|
||||
|
||||
while (!watch->stoped_)
|
||||
{
|
||||
watch->SingleRun();
|
||||
|
||||
Sleep(1);
|
||||
}
|
||||
|
||||
watch->OnWorkThreadStop();
|
||||
|
||||
watch->exit_ = true;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
ExitThread(0);//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool WatchThread::Startup()
|
||||
{
|
||||
bool ret = true;
|
||||
int err = 0;
|
||||
|
||||
stoped_ = false;
|
||||
#ifdef _MSC_VER
|
||||
handle_ = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Work_R, this, 0, &thread_id_);
|
||||
|
||||
if (!handle_)
|
||||
{
|
||||
err = GetLastError();
|
||||
ret = false;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
if (pthread_create(&thread_id_, NULL, Work_R, this))
|
||||
{
|
||||
err = errno;
|
||||
ret = false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (!ret)
|
||||
{
|
||||
OutputError(err, ("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ʧ<EFBFBD><EFBFBD>"));
|
||||
return false;
|
||||
}
|
||||
|
||||
exit_ = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void WatchThread::Stop()
|
||||
{
|
||||
stoped_ = true;
|
||||
|
||||
while (!exit_)
|
||||
{
|
||||
Sleep(10);
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
CloseThread(handle_);
|
||||
#endif
|
||||
}
|
||||
|
||||
WatchThread::WatchData* WatchThread::Find(int id)
|
||||
{
|
||||
for (int i = 0; i < list_.count(); ++i)
|
||||
{
|
||||
WatchData& data = list_[i];
|
||||
|
||||
if (data.id_ == id)
|
||||
{
|
||||
return &data;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
102
Gateway/common/utils/watch_thread.h
Normal file
102
Gateway/common/utils/watch_thread.h
Normal file
@@ -0,0 +1,102 @@
|
||||
#ifndef _WATCH_THREAD_H_
|
||||
#define _WATCH_THREAD_H_
|
||||
|
||||
using namespace tick64;
|
||||
using namespace container;
|
||||
using namespace lock;
|
||||
|
||||
typedef void (*BlockFunc)(void*);
|
||||
|
||||
class WatchThread
|
||||
{
|
||||
// <20><><EFBFBD>Կ<EFBFBD><D4BF>ǼӸ<C7BC><D3B8><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct WatchData
|
||||
{
|
||||
int id_;
|
||||
int64_t last_t_;
|
||||
int timeout_;
|
||||
BlockFunc func_;
|
||||
void* params_;
|
||||
WatchData() : id_(0), last_t_(0), timeout_(0), func_(NULL), params_(NULL)
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
enum WatchMsg
|
||||
{
|
||||
wmAddWatch,
|
||||
wmReport,
|
||||
wmRemove,
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned int uMsg; //<2F><>Ϣ<EFBFBD><CFA2>
|
||||
size_t uParam1;//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>1
|
||||
size_t uParam2;//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>2
|
||||
BlockFunc func;
|
||||
void* params;
|
||||
}InterMsg;
|
||||
public:
|
||||
WatchThread();
|
||||
virtual ~WatchThread();
|
||||
|
||||
bool Startup();
|
||||
void Stop();
|
||||
#ifdef _MSC_VER
|
||||
unsigned long GetThreadId()
|
||||
#else
|
||||
pthread_t GetThreadId()
|
||||
#endif
|
||||
{
|
||||
return thread_id_;
|
||||
}
|
||||
|
||||
void AddWatch(int id, int timeout, BlockFunc func = NULL, void* params = NULL)
|
||||
{
|
||||
PostMsg(wmAddWatch, id, timeout, func, params);
|
||||
}
|
||||
void RemoveWatch(int id)
|
||||
{
|
||||
PostMsg(wmRemove, id, 0, NULL, NULL);
|
||||
}
|
||||
void Report(int id)
|
||||
{
|
||||
PostMsg(wmReport, id, 0, NULL, NULL);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void OnWorkThreadStart();
|
||||
virtual void OnWorkThreadStop();
|
||||
protected:
|
||||
void SingleRun();
|
||||
void ProcessSysMsg();
|
||||
void OnRecvSysMsg(UINT msg, size_t p1, size_t p2, BlockFunc func, void* params);
|
||||
void PostMsg(UINT uMsg, size_t para1, size_t para2, BlockFunc func, void* params);
|
||||
|
||||
WatchData* Find(int id);
|
||||
private:
|
||||
#ifdef _MSC_VER
|
||||
static void STDCALL Work_R(WatchThread* ptr);
|
||||
#else
|
||||
static void* Work_R(void* ptr);
|
||||
#endif
|
||||
private:
|
||||
#ifdef _MSC_VER
|
||||
HANDLE handle_; //<2F><><EFBFBD><EFBFBD><EFBFBD>߳̾<DFB3><CCBE><EFBFBD>
|
||||
unsigned long thread_id_; //<2F>߳<EFBFBD>ID
|
||||
#else
|
||||
pthread_t thread_id_;
|
||||
#endif
|
||||
bool stoped_; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ϊֹͣ
|
||||
bool exit_;
|
||||
|
||||
QueueList<InterMsg> msg_list_; //<2F>ڲ<EFBFBD><DAB2><EFBFBD>Ϣ<EFBFBD>б<EFBFBD>
|
||||
Mutex msg_lock_; //<2F>ڲ<EFBFBD><DAB2><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
||||
|
||||
Vector<WatchData> list_;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user