📄 mapserversocket.h
字号:
////////////////////////////////////////////////////////////////////////////////////////
// MapServerSocket.h
//
//
//
////////////////////////////////////////////////////////////////////////////////////////
#if !defined( _MAPSERVERSOCKET_H__)
#define _MAPSERVERSOCKET_H__
#include <process.h>
#include "tgaBase.h" // struct
#include "MemPool.h" // 皋葛府钱
#include "XPtrList.h" // 犬厘 CPtrList
#include "SafeMap.h" // STL MAP
#include "map.h" // MAP
#include "BaseData.h" // Data Base Data
#include "MapDBAccess.h" // DATA BASE
#ifdef DEF_AUTHCODE
#include "AuthCode.h"
#endif
#ifdef DEF_KUMA_GAMBLE
#include "Gamble.h"
#endif
#ifdef DEF_AZIT
#include "Azit.h" // Azit
#endif
bool IsSocketValidity( _LPSOCKET_FD pSocketFD );
bool IsPlayerConnect( _LPSOCKET_FD pSocketFD );
class MapServerSocket ;
typedef MapServerSocket * _LPMAPSOCK ;
////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////
class MapServerSocket
{
public:
MapServerSocket();
~MapServerSocket();
BOOL m_bPKMode; // true PK Mode / false NON-PK Mode
#ifdef DEF_SECURITYPACKET
int m_iSeedLength ;
char m_sSeed[40] ;
char m_sSeedKey[20] ;
#endif
private:
// --------------------------------------------------------------------------------
// 荤侩磊 包府 Linked-List / STL Map
// --------------------------------------------------------------------------------
CXPtrList m_listConnection; // 立加 client 府胶飘
#if defined(DEF_SPEEDHACK) || defined(DEF_KORSPEEDHACK)
CXPtrList m_listHackingConnection; // 秦欧 立加 秦瘤 client 府胶飘
#endif
CMemPool<_PER_IO_CONTEXT>* m_pSendIOPool; // IO
CMemPool<_PER_IO_CONTEXT>* m_pRecvIOPool; // IO
HANDLE m_hIOCP; // IOCP handle
HANDLE m_hIOCPThreads[MAX_WORKER_THREAD]; // IOCP Work Threads
DWORD m_dwThreadCount; // 角 iocp work thread 肮荐
SOCKET m_SocketListen; // Listen Socket
// --------------------------------------------------------------------------------
// Completed Read
// --------------------------------------------------------------------------------
HANDLE m_hReadEventCompleted; // IO READ 肯丰登菌澜阑 舅覆
CXPtrList m_listReadCompleted; // 肯丰等 IO 钮, 贸府甫 扁促赴促.
#ifdef DEF_AUTHCODE
//Jason 2004-10-06
CAuthCode m_auth;
#endif
public:
#ifdef DEF_KUMA_GAMBLE
CGamble m_Gamble;
#endif
char m_cMsg[100] ;
void CLOSEHANDLE( HANDLE &x ) // Close Handle
{
if( x != NULL )
{
CloseHandle(x);
x = NULL;
}
}
void CLOSESOCKET( SOCKET &x )
{
if( x != INVALID_SOCKET ){
closesocket(x);
x = INVALID_SOCKET;
}
}
void CLOSEEVENT( HANDLE &x )
{
if( x != NULL ){
SetEvent(x);
CloseHandle(x);
x = NULL;
}
}
public:
// 2005-1-7 badajoa
// 努扼捞攫飘肺 弊成 焊郴绰 菩哦捞 腹酒辑 袍敲复阑 父甸菌促.
template < typename PacketPoint >
void PacketSend_ToClient( _LPSOCKET_FD pSocketFD, DWORD dwPacketID, PacketPoint lpPacket )
{
_LPZEMIPACKET lpSendPacket = g_pServerMem->ZemiPacket_Pop();
lpSendPacket->dwCommand = dwPacketID ;
lpSendPacket->dwSize = sizeof( *lpPacket);
memcpy(lpSendPacket->strPacket,lpPacket , sizeof(*lpPacket) ) ;
Send_Single( pSocketFD, lpSendPacket );
g_pServerMem->ZemiPacket_Push( lpSendPacket );
}
void PacketSend_NPCMenuClose(_LPSOCKET_FD pSocketFD, BYTE pNPCType );
void PacketSend_Emoticon(_LPSOCKET_FD pSocketFD, _LPZP_EMOTICON_ASK pPacket );
void PacketSend_ChangeAlign(_LPSOCKET_FD pSocketFD);
void PacketSend_MultiNotConnect();
void CloseClient(_LPSOCKET_FD lpSktContext );
// Jason 2004-07-22
void UserTrace(_LPSOCKET_FD p, DWORD dwCommand);
void LogTrace_Player(_LPSOCKET_FD pSockketFD, char* pOption, char* pCharId);
//Jason 2004-08-26-china
void ShutdownServer();
#ifdef DEF_AUTHCODE
// Jason 2004-10-06
void Load_AuthCode();
#endif
// --------------------------------------------------------------------------------
// 檬扁拳 包访 Functions
// --------------------------------------------------------------------------------
bool Initialize();
BOOL InitializeEvent();
BOOL InitializeNetwork(LPSTR pAddress, UINT pPort);
BOOL InitializeThread();
_LPPER_IO_CONTEXT CreateIOContext(_IO_TYPE io);
_LPSOCKET_FD CreateSocketContext();
// --------------------------------------------------------------------------------
// 立加 包访 Functions
// --------------------------------------------------------------------------------
void PacketSend_PlayerNew( _LPSOCKET_FD pSocketFD );
void PacketSend_PlayerDelete( _LPSOCKET_FD pSocketFD, DWORD pPlayerHandle );
void PacketSend_PlayerUpdate(_LPSOCKET_FD pSocketFD);
void PacketSend_PlayerStart(_LPSOCKET_FD pSocketFD );
void PacketSend_PlayerBase( _LPSOCKET_FD pSocketFD, _LPZP_PLAYERBASE_REP pPlayerBase ); // 纳腐 扁夯 沥焊 傈价
void PacketSend_PlayerList(_LPSOCKET_FD pSocketFD); // PC LIST 沥焊
void PacketSend_SellList(_LPSOCKET_FD pSocketFD); // NPC 魄概 ITEM沥焊
void PacketSend_ItemSlotList(_LPSOCKET_FD pSocketFD); // ITEM SLOT 府胶飘 傈价 // Jason 2004-06-02
void PacketSend_AzitStatus (_LPSOCKET_FD pSocketFD, _LPZW_AZITSTATUSLIST_REP pAzitInfo );
void PacketSend_InventoryAct (_LPSOCKET_FD pSocketFD, _LPZP_INVENTORYACT_ASK pPacket );
#ifdef DEF_GUILDBIGMONEY_BADAJOA20050622
void PacketSend_GuildBankInfo (_LPSOCKET_FD pSocketFD, __int64 pBankMoney, BYTE pBankTab );
void PacketSend_GuildBankUpdate (_LPSOCKET_FD pSocketFD, __int64 pBankMoney, BYTE pBankTab );
#else // #ifdef DEF_GUILDBIGMONEY_BADAJOA20050622
void PacketSend_GuildBankInfo (_LPSOCKET_FD pSocketFD, int pBankMoney, BYTE pBankTab );
void PacketSend_GuildBankUpdate (_LPSOCKET_FD pSocketFD, int pBankMoney, BYTE pBankTab );
#endif // #ifdef DEF_GUILDBIGMONEY_BADAJOA20050622
// --------------------------------------------------------------------------------
// Quest Send Functions
// --------------------------------------------------------------------------------
//
// Quest惑怕 包访 Functions
//
void PacketSend_QuestComplete (_LPSOCKET_FD pSocketFD, DWORD pQuestIndex, BOOL pComplete);
void PacketSend_QuestDelete (_LPSOCKET_FD pSocketFD, DWORD pQuestIndex);
void PacketSend_QuestInsert (_LPSOCKET_FD pSocketFD, CActiveQuest *pActvieQuest);
//
// Quest API包访 Functions
//
void PacketSend_QuestNPCSHOUT (_LPSOCKET_FD pSocketFD, DWORD pNPCID, char *pMsg);
void PacketSend_QuestShowUI (_LPSOCKET_FD pSocketFD, DWORD pHandle, BYTE pUI);
void PacketSend_QuestNPCSAY (_LPSOCKET_FD pSocketFD, _LPZP_QUESTNPCSAY_REP pNpcSay );
void PacketSend_QuestMsgBox (_LPSOCKET_FD pSocketFD, _LPZP_QUESTMSGBOX_REP pMsgBox );
void PacketSend_QuestChangeExp (_LPSOCKET_FD pSocketFD);
void PacketSend_QuestChangeGold (_LPSOCKET_FD pSocketFD);
void PacketSend_QuestKillTimer (_LPSOCKET_FD pSocketFD, DWORD pQuestIndex, BYTE nTimerID );
void PacketSend_QuestSetTimer (_LPSOCKET_FD pSocketFD, DWORD pQuestIndex, BYTE nTimerID, DWORD pExpiredTime );
void PacketSend_QuestUpdate (_LPSOCKET_FD pSocketFD, CActiveQuest *pActvieQuest);
void PacketSend_QuestEffect (_LPSOCKET_FD pSocketFD, int pID, BYTE pOption );
void PacketSend_QuestMissionComplete(_LPSOCKET_FD pSocketFD, DWORD pQuestIndex, BYTE pComplete);
void PacketSend_QuestGate (_LPSOCKET_FD pSocketFD, int pGate, int pLock );
void PacketSend_EnchantStop ( _LPSOCKET_FD pSocketFD, DWORD pHandle, WORD pSkillIndex, DWORD pSetItemId = 0 ,WORD wAllSkillUp = 0);
void PacketSend_EnchantStart ( _LPSOCKET_FD pSocketFD, DWORD pHandle, WORD pSkillIndex, DWORD pEnchatTimes, DWORD pSetItemId = 0,WORD wAllSkillUp = 0 );
void PacketSend_PlayMusic ( _LPSOCKET_FD pSocketFD, _LPZP_PLAYMUSIC_REP pPacket);
void PacketSend_CurseAttack(NPC *pNPC );
void PacketSend_CurseAttack(_LPSOCKET_FD pSocketFD);
void PacketSend_NoticMsg(char pMsg[]);
void PacketSend_NPCRecall(NPC *pNPC);
void PacketSend_NPCUpdate(NPC *pNPC);
void PacketSend_NPCEnchantUpdate(NPC *pNPC);
void PacketSend_ManaLow ( _LPSOCKET_FD pSocketFD, int pNeedMP );
void PacketSend_PlayerEnchantUpdate(_LPSOCKET_FD pSocketFD);
void PacketSend_ItemRefresh (_LPSOCKET_FD pSocketFD, CItem *pItem );
void PacketSend_ChangeLevelDown (_LPSOCKET_FD pSocketFD);
void PacketSend_WarningMsg (_LPSOCKET_FD pSocketFD, const char *pszParam, ... );
void PacketSend_NPCSkillAttack ( BYTE pMapLayer, _POINT pPoint, _LPZP_SKILLATTACKMULTI_REP pMultiAttack, DWORD pChannelHandle=0);
void PacketSend_EventItemUse (_LPSOCKET_FD pSocketFD, DWORD pPlayerHandle, DWORD pItemIdex );
// --------------------------------------------------------------------------------
// 某腐 荐摹 函版 傈价 Packet
// --------------------------------------------------------------------------------
void PacketSend_ChangePlayerBase ( _LPSOCKET_FD pSocketFD ); // 纳腐扁夯荐摹 函版 Packet傈价
void PacketSend_ChangeGold (_LPSOCKET_FD pSocketFD); // 榜靛函版 Packet傈价
void PacketSend_ChangeExp ( _LPSOCKET_FD pSocketFD ); // 版氰摹函版 Packet傈价
void PacketSend_ChangeLevel (_LPSOCKET_FD pSocketFD); // Level函版 Packet傈价
void PacketSend_ChangeMP (_LPSOCKET_FD pSocketFD,int iGetMP); // MP函版 Packet傈价
void PacketSend_ChangeHP (_LPSOCKET_FD pSocketFD,int iGetHP); // HP函版 Packet傈价
void PacketSend_ChangeHPMPDP (_LPSOCKET_FD pSocketFD); // HP MP DP 函版 Packet 傈价
void PacketSend_PlayerUpdate (_LPSOCKET_FD pSocketFD, _POINT_TILE pPoint );
// --------------------------------------------------------------------------------
// 俺牢 惑痢 包访 Functions
// --------------------------------------------------------------------------------
void PacketSend_StallIn (_LPSOCKET_FD pScoketFD, DWORD pVisiterHandle, DWORD pOwnerHandle);
void PacketSend_StallListEnd (_LPSOCKET_FD pSocketFD );
void PacketSend_StallListStart (_LPSOCKET_FD pSocketFD, DWORD pVisiterHandle, DWORD pOwnerHandle, char* pSellComment );
void PacketSend_StallClose (_LPSOCKET_FD pScoketFD, DWORD pOwnerHandle );
void PacketSend_StallOut (_LPSOCKET_FD pScoketFD, DWORD pVisiterHandle, DWORD pOwnerHandle);
void PacketSend_StallBuy (_LPSOCKET_FD pSocketFD, _LPZP_STALLBUY_ASK pPacket );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -