📄 mapserversocket.cpp
字号:
PostQueuedCompletionStatus(g_hIOCP, 0, 0, NULL);
}
}
CLOSEHANDLE(g_hIOCP); // IOCP handle
SetEvent(m_hReadEventCompleted);
CLOSEEVENT(m_hReadEventCompleted);
CLOSESOCKET(m_SocketListen); // Listen Socket 秦力
// --------------------------------------------------------------------------------
// 秦寸 Memory俊辑 秦力 矫糯
//
// - 荤侩磊 Memory甫 眠饶 昏力 矫糯
// --------------------------------------------------------------------------------
if( m_listConnection.GetCount() > 0 )
{
POSITION pos = m_listConnection.GetHeadPosition();
while( pos )
{
_LPSOCKET_FD pTempSocket = (_LPSOCKET_FD)m_listConnection.GetNext(pos);
// Memory啊 蜡瓤茄 版快
if( !IsBadReadPtr( pTempSocket, sizeof(_SOCKET_FD) ) )
{
ReleaseSocketContext( pTempSocket );
}
}
}
if( m_listReadCompleted.GetCount() > 0 )
{
POSITION pos = m_listReadCompleted.GetHeadPosition();
while( pos )
{
_LPPER_IO_CONTEXT lpIOContext = (_LPPER_IO_CONTEXT)m_listReadCompleted.GetNext(pos);
ReleaseIOContext(lpIOContext);
}
}
m_listConnection.RemoveAll();
m_listReadCompleted.RemoveAll();
#if defined(DEF_SPEEDHACK) || defined(DEF_KORSPEEDHACK)
if( m_listHackingConnection.GetCount() > 0 )
{
POSITION pos = m_listHackingConnection.GetHeadPosition();
while( pos )
{
_LPSOCKET_FD pTempSocket = (_LPSOCKET_FD)m_listHackingConnection.GetNext(pos);
// Memory啊 蜡瓤茄 版快
if( !IsBadReadPtr( pTempSocket, sizeof(_SOCKET_FD) ) )
{
ReleaseSocketContext( pTempSocket );
}
}
}
m_listHackingConnection.RemoveAll();
#endif
// --------------------------------------------------------------------------------
// Memory Pool Delete
// --------------------------------------------------------------------------------
SAFE_DELETE< CMemPool<_PER_IO_CONTEXT> > (&m_pSendIOPool) ;
SAFE_DELETE< CMemPool<_PER_IO_CONTEXT> > (&m_pRecvIOPool) ;
#ifdef _DEBUG
EndDialog(g_MainHwnd, 0 );
#else
_Module.UnregisterServer();
#endif
}
////////////////////////////////////////////////////////////////////////////////////////
// Function Pointer 涝仿
//
//
////////////////////////////////////////////////////////////////////////////////////////
void MapServerSocket::InitializeFP()
{
for(int i =0; i < DEF_MAXMAPACKET; i++ )
{
OnTransFunc[i].proc = Packet_NoAction;
}
// --------------------------------------------------------------------------------
// 立加 包访
// --------------------------------------------------------------------------------
OnTransFunc[ZP_PLAYERIN_ASK ].proc = Packet_PlayerIn;
OnTransFunc[ZP_START_ASK ].proc = Packet_Start;
OnTransFunc[ZP_PLAYEROUT_ASK ].proc = Packet_PlayerOut;
OnTransFunc[ZP_PCMOVE_ASK ].proc = Packet_PCMove; // 荤侩磊 某腐磐 捞悼
OnTransFunc[ZP_PHYSICALATTACK_ASK ].proc = Packet_AttackPhysical; // PC/MONSTER傍拜
OnTransFunc[ZP_ARCHERATTACK_ASK ].proc = Packet_AttackArcher; // 泵荐 劝 老馆 傍拜
OnTransFunc[ZP_MOVEWARP_ASK ].proc = Packet_MoveWarp; // 纳腐 鉴埃 捞悼矫
// --------------------------------------------------------------------------------
// 眉泼 包访 Protocl
// --------------------------------------------------------------------------------
OnTransFunc[ZP_CHATMSG_ASK ].proc = Packet_ChatMsg; // 老馆 眉泼
OnTransFunc[ZP_CHATWHISPER_ASK ].proc = Packet_ChatWhisperMsg; // 庇富 眉泼
OnTransFunc[ZP_FINDPLAYER_ASK ].proc = Packet_FindPlayer; // 漂沥 荤侩磊 立加 蜡公 犬牢
OnTransFunc[ZP_EMOTICON_ASK ].proc = Packet_Emoticon; // 蜡历狼 捞葛萍能 悼累
OnTransFunc[ZP_CELLHANDLE_ASK ].proc = Packet_CellHandle; // 漂沥 Object狼 沥焊 夸没
OnTransFunc[ZP_MOVEMAP_ASK ].proc = Packet_MoveMap; // MAP 捞悼 矫
OnTransFunc[ZP_MOVEPOINT_ASK ].proc = Packet_MovePoint; // 泅犁 困摹 沥焊甫 (MAP Array俊 Update矫糯)
// --------------------------------------------------------------------------------
// SKILL贸府 Protocol
// --------------------------------------------------------------------------------
OnTransFunc[ZP_SKILLATTACKREADY_ASK ].proc = Packet_SkillAttackReady; // SKILL 霖厚 悼累
OnTransFunc[ZP_SKILLATTACK_ASK ].proc = Packet_SkillAttack; // SKILL 荤侩 矫
OnTransFunc[ZP_SKILLCHAINLIGHTING_ASK ].proc = Packet_SkillChainLighting; // 眉牢 扼捞飘醋 胶懦
OnTransFunc[ZP_SKILLREACTPOINT_ASK ].proc = Packet_SkillAttackReactPoint; // SKILL 痢 傍拜 矫 楷加 悼累 贸府
OnTransFunc[ZP_SKILLENCHANT_ASK ].proc = Packet_SkillEnchant; // 牢镁飘
OnTransFunc[ZP_SKILLINSTANT_ASK ].proc = Packet_SkillInstantEnchant; // 鉴埃 矫傈
OnTransFunc[ZP_SKILLINSTANTATTACK_ASK ].proc = Packet_SkillInstantMoveAttack;// 鉴埃 捞悼 傍拜 //Jason 2004-05-13
OnTransFunc[ZP_MONSTERSUMMON_ASK ].proc = Packet_MonsterSummon; // 家券
OnTransFunc[ZP_SKILLENCHANTATTACK_ASK ].proc = Packet_SkillEnchantAttack; // 牢镁飘 傍拜
// --------------------------------------------------------------------------------
// Inventory贸府 Protocol
// --------------------------------------------------------------------------------
OnTransFunc[ZP_INVENTORYACT_ASK ].proc = Packet_InventoryAct;
OnTransFunc[ZP_INVENTORYADD_ASK ].proc = Packet_InventoryItemAdd; // Inventory俊辑 酒捞袍 梅啊 矫虐扁 拱距
// --------------------------------------------------------------------------------
// 芒绊 包访 Protocol
// --------------------------------------------------------------------------------
OnTransFunc[ZP_DEPOSIT_ASK ].proc = Packet_Deposit;
OnTransFunc[ZP_WITHDRAWAL_ASK ].proc = Packet_Withdrawal;
OnTransFunc[ZP_CHANGEBANKLOCK_ASK ].proc = Packet_ChangeBankLock;
OnTransFunc[ZP_CHANGEBANKPASSWORD_ASK ].proc = Packet_ChangeBankPassword;
// --------------------------------------------------------------------------------
// Item包访 贸府 Protocol
// --------------------------------------------------------------------------------
OnTransFunc[ZP_ITEMTHROW_ASK ].proc = Packet_ItemThrow; // Item阑 滚府绰 版快
OnTransFunc[ZP_ITEMPICKUP_ASK ].proc = Packet_ItemPickUp; // Item 凛绰 版快
OnTransFunc[ZP_ITEMUSE_ASK ].proc = Packet_ItemUse; // Item阑 汗侩窍绰 版快
OnTransFunc[ZP_ITEMBUY_ASK ].proc = Packet_ItemBuy; // Item阑 荤绰 版快
OnTransFunc[ZP_ITEMSELL_ASK ].proc = Packet_ItemSell; // Item阑 颇绰 版快
OnTransFunc[ZP_ITEMREFRESH_ASK ].proc = Packet_ItemRefresh; // Item狼 困摹 沥焊甫 努扼捞攫飘俊 焊郴霖促.
OnTransFunc[ZP_ITEMUPGRADE_ASK ].proc = Packet_ItemUpgrade; // Item诀弊饭捞靛
OnTransFunc[ZP_MOVEZONE_ASK ].proc = Packet_MoveZone; // PC 矫累 困摹 捞悼
OnTransFunc[ZP_STATUP_ASK ].proc = Packet_StatUp; // 纳腐 STAT阑 刘啊 矫糯
// --------------------------------------------------------------------------------
// 纳腐 SKILL 包访 悼累
// --------------------------------------------------------------------------------
OnTransFunc[ZP_SKILLUP_ASK ].proc = Packet_SkillUp; // SKILL UP
OnTransFunc[ZP_SKILLDOWN_ASK ].proc = Packet_SkillDown; // SKILL DOWN
OnTransFunc[ZP_SKILLSLOTINSERT_ASK ].proc = Packet_SkillSlotInsert; // SKILL 窍窜 ICON殿废
OnTransFunc[ZP_SKILLSLOTDELETE_ASK ].proc = Packet_SkillSlotDelete; // SKILL 窍窜 ICON昏力
OnTransFunc[ZP_SKILLSLOTACTIVE_ASK ].proc = Packet_SkillSlotActive; // SKILL 窍窜 ICON 急琶 矫
OnTransFunc[ZP_SKILLCLEAR_ASK ].proc = Packet_SkillDelete; // SKILL 窍窜 ICON 急琶 矫
OnTransFunc[ZP_GUILDSKILLUP_ASK ].proc = Packet_GuildSkillUp; // SKILL UP
// --------------------------------------------------------------------------------
// TRADE贸府 Packet
// --------------------------------------------------------------------------------
OnTransFunc[ZP_TRADEREQ_ASK ].proc = Packet_TradeRequest; // 芭贰 脚没 矫
OnTransFunc[ZP_TRADEACK_ASK ].proc = Packet_TradeAck;
OnTransFunc[ZP_TRADEMONEY_ASK ].proc = Packet_TradeMoney; // 芭贰 陛咀 涝仿 矫
OnTransFunc[ZP_TRADEOK_ASK ].proc = Packet_TradeOK; // 背券 滚瓢 努腐 矫
OnTransFunc[ZP_TRADECANCEL_ASK ].proc = Packet_TradeCancel; // 背券 秒家 努腐 矫
// --------------------------------------------------------------------------------
// 颇萍 包访 Msg
// --------------------------------------------------------------------------------
OnTransFunc[ZP_PARTYJOINREQ_ASK ].proc = Packet_PartyJoinRequest; // 颇萍 脚没
OnTransFunc[ZP_PARTYJOINANS_ASK ].proc = Packet_PartyJoinAnswer; // 颇萍 览翠
OnTransFunc[ZP_PARTYLEAVE_ASK ].proc = Packet_PartyLeave; // 颇萍 呕硼/碍硼
OnTransFunc[ZP_PARTYCHAT_ASK ].proc = Packet_PartyChat; // 颇萍 眉泼
OnTransFunc[ZP_PARTYLIST_ASK ].proc = Packet_PartyList; // 颇萍 府胶飘
// --------------------------------------------------------------------------------
// 傍瘤 荤亲 Message 贸府 (眠饶 Control Message肺 捞包)
// --------------------------------------------------------------------------------
OnTransFunc[ZC_NOTICE_ASK ].proc = Packet_Notice;
// --------------------------------------------------------------------------------
// 霸烙 可记 殿废
// --------------------------------------------------------------------------------
OnTransFunc[ZP_GAMEOPTION_ASK ].proc = Packet_SetGameOption;
// --------------------------------------------------------------------------------
// GUILD 包访
// --------------------------------------------------------------------------------
OnTransFunc[ZP_CREATEGUILD_ASK ].proc = Packet_GuildCreate;
OnTransFunc[ZP_LEAVEGUILD_ASK ].proc = Packet_GuildLeave;
OnTransFunc[ZP_DISBANDGUILD_ASK ].proc = Packet_GuildRequestDisband;
OnTransFunc[ZP_GUILDMSG_ASK ].proc = Packet_GuildMsg;
OnTransFunc[ZP_KICKMEMBER_ASK ].proc = Packet_GuildKickMember;
OnTransFunc[ZP_APPOINTMASTER_ASK ].proc = Packet_GuildAppointMaster;
OnTransFunc[ZP_GUILDINFOR_ASK ].proc = Packet_GuildInfor;
OnTransFunc[ZP_GUILDJOINREQ_ASK ].proc = Packet_GuildJoinRequest;
OnTransFunc[ZP_GUILDJOINANS_ASK ].proc = Packet_GuildJoinAnswer;
OnTransFunc[ZP_GUILDMARKCHANGE_ASK ].proc = Packet_GuildMarkChange;
OnTransFunc[ZP_GUILDMEMBER_ASK ].proc = Packet_GuildMember;
// --------------------------------------------------------------------------------
// GM COMMAND贸府
// --------------------------------------------------------------------------------
OnTransFunc[ZG_SILENT_ASK ].proc = PacketGM_Slient; // 盲泼 陛攫 ON/OFF
OnTransFunc[ZG_DISCONNECT_ASK ].proc = PakcetGM_Disconnect; // 漂沥 荤侩磊 立加 辆丰 贸府
OnTransFunc[ZG_FINDPLAYER_ASK ].proc = PacketGM_FindPlayer; // 漂沥 荤侩磊 茫扁 扁瓷 贸府
OnTransFunc[ZG_MOVE_ASK ].proc = PacketGM_Move; // 漂沥 困摹 捞悼 扁瓷
OnTransFunc[ZG_MOVEMAP_ASK ].proc = PacketGM_MoveMap; // 漂沥 MAP立加 扁瓷
OnTransFunc[ZG_TELEPORT_ASK ].proc = PacketGM_TelePort; // 漂沥 荤侩磊狼 困摹肺 捞悼
OnTransFunc[ZG_SUMMON_ASK ].proc = PacketGM_Summon; // 漂沥 荤侩磊 家券
OnTransFunc[ZG_INVISIBLE_ASK ].proc = PacketGM_Invisible; // 款康磊 捧疙 纳腐拳 ON/OFF
OnTransFunc[ZG_NOTICE_ASK ].proc = PacketGM_Notice; // 款康磊 傍瘤 扁瓷
OnTransFunc[ZG_COMMAND_ASK ].proc = PacketGM_Command; // 疙飞 扁瓷 //Jason 2004-05-11
// --------------------------------------------------------------------------------
// 俺牢 惑痢
// --------------------------------------------------------------------------------
OnTransFunc[ZP_STALLOPEN_ASK ].proc = Packet_StallOpen; // 俺牢 惑痢 OPEN
OnTransFunc[ZP_STALLCLOSE_ASK ].proc = Packet_StallClose; // 俺牢 惑痢 CLOSE
OnTransFunc[ZP_STALLIN_ASK ].proc = Packet_StallIn; // 俺牢 惑痢 IN
OnTransFunc[ZP_STALLOUT_ASK ].proc = Packet_StallOut; // 俺牢 惑痢 OUT
OnTransFunc[ZP_STALLLIST_ASK ].proc = Packet_StallList; // 俺牢 惑痢 LIST
OnTransFunc[ZP_STALLBUY_ASK ].proc = Packet_StallBuy; // 俺牢 惑痢 备概
OnTransFunc[ZP_STALLITEMPRICEDOWN_ASK ].proc = Packet_StallItemPriceDown;// 俺牢 惑痢 酒捞袍 啊拜 促款
// --------------------------------------------------------------------------------
// 模备 扁瓷
// --------------------------------------------------------------------------------
OnTransFunc[ZP_FRIENDREGREQ_ASK ].proc = Packet_FriendRegRequest;
OnTransFunc[ZP_FRIENDREGANS_ASK ].proc = Packet_FriendRegAnswer ;
OnTransFunc[ZP_FRIENDINFOR_ASK ].proc = Packet_FriendInfor ;
OnTransFunc[ZP_DISMISSFRIEND_ASK ].proc = Packet_FriendDismiss ;
// --------------------------------------------------------------------------------
// 荤捧厘 扁瓷
// --------------------------------------------------------------------------------
OnTransFunc[ZP_FIGHTZONELIST_ASK ].proc = Packet_FightzoneList ;
OnTransFunc[ZP_PVPREQ_ASK ].proc = Packet_PVPRequest ;
OnTransFunc[ZP_PVPANS_ASK ].proc = Packet_PVPAnswer ;
OnTransFunc[ZP_PVPPRIZEMONEY_ASK ].proc = Packet_PVPPrizeMoney; // 陛咀 涝仿 矫
OnTransFunc[ZP_PVPPRIZEOK_ASK ].proc = Packet_PVPPrizeOK; // OK 滚瓢 努腐 矫
OnTransFunc[ZP_PVPPRIZECANCEL_ASK ].proc = Packet_PVPPrizeCancel; // 秒家 努腐 矫
// --------------------------------------------------------------------------------
// QUEST Function
// --------------------------------------------------------------------------------
OnTransFunc[ZP_QUESTABANDON_ASK ].proc = Packet_QuestAbandon;
OnTransFunc[ZP_QUESTTRIGGERONCLICK_ASK ].proc = Packet_QuestTriggerOnClick;
OnTransFunc[ZP_QUESTTRIGGERONMSG_ASK ].proc = Packet_QuestTriggerOnMsg;
OnTransFunc[ZP_QUESTTRIGGERONKILL_ASK ].proc = Packet_QuestTriggerOnKill;
OnTransFunc[ZP_QUESTTRIGGERONARRIVE_ASK ].proc = Packet_QuestTriggerOnArrive;
OnTransFunc[ZP_QUESTTRIGGERONDEPART_ASK ].proc = Packet_QuestTriggerOnDepart;
OnTransFunc[ZP_QUESTTRIGGERONDIE_ASK ].proc = Packet_QuestTriggerOnDie;
OnTransFunc[ZP_QUESTTRIGGERONMISSIONSTOP_ASK].proc = Packet_QuestTriggerOnMissionStop;
OnTransFunc[ZP_QUESTTRIGGERONRETURN_ASK ].proc = Packet_QuestTriggerOnReturn;
// --------------------------------------------------------------------------------
// ITEM SLOT
// Jason 2004-05-31
// --------------------------------------------------------------------------------
OnTransFunc[ZP_ITEMSLOTINSERT_ASK ].proc = Packet_ItemSlotInsert; // ITEM 窍窜 ICON殿废
OnTransFunc[ZP_ITEMSLOTDELETE_ASK ].proc = Packet_ItemSlotDelete; // ITEM 窍窜 ICON昏力
OnTransFunc[ZP_SUMMONMONSTERCMD_ASK ].proc = Packet_SummonMonsterCmd; // ITEM 窍窜 ICON昏力
#ifdef DEF_SECURITYPACKET
OnTransFunc[ZP_SEED_ASK ].proc = Packet_Seed;
#endif
OnTransFunc[ZP_NPCMENU_ASK ].proc = Packet_NPCMenu; // NPC 皋春甫 楷促
#ifdef DEF_AUTHCODE
OnTransFunc[ZP_NPCMENUAUTHCODE_ASK ].proc = Packet_NPCMenuAuthCode; // 牢刘 内靛 蔼阑 罐绰促.
#endif
//
// 力炼 盒秦 矫胶袍
//
// - Jason 2004-10-12
#ifdef DEF_PRODUCTION_DECOMPOSITON
OnTransFunc[ZP_ESTIMATION_ASK ].proc = Packet_AskEstimation;
OnTransFunc[ZP_PRODUCEITEM_ASK ].proc = Packet_ProduceItem ;
OnTransFunc[ZP_DECOMPOSEITEM_ASK ].proc = Packet_DecomposeItem ; // 盒秦
#endif
//////////////////////////////////////////////////////////////////
// GAMBLING 2004.10.26 by kuma
//////////////////////////////////////////////////////////////////
OnTransFunc[ZP_GAMBLING_ASK ].proc = Packet_AskGambling;
OnTransFunc[ZP_GUILDNOTICESET_ASK ].proc = Packet_GuildNoticeSet;
#ifdef DEF_GUILDBANK
//
// 辨靛 芒绊 包访 Function
//
OnTransFunc[ZP_NPCMENUCLOSE_ASK ].proc = Packet_NPCMenuClose;
OnTransFunc[ZP_GUILDBANKGOLDINOUT_ASK ].proc = Packet_GuildBankGoldInOut;
OnTransFunc[ZP_GUILDINVENTORYACT_ASK ].proc = Packet_GuildInventoryAct;
#endif
#ifdef DEF_GUILDRANKDUB
OnTransFunc[ZP_GUILDRANKDUB_ASK ].proc = Packet_GuildRankDub;
#endif
#ifdef DEF_GUILDWAR
OnTransFunc[ZP_GUILDWARREQ_ASK ].proc = Packet_GuildWarRequest;
OnTransFunc[ZP_GUILDWARANS_ASK ].proc = Packet_GuildWarAnswer;
OnTransFunc[ZP_GUILDARMISTICEREQ_ASK ].proc = Packet_GuildArmisticensRequest;
OnTransFunc[ZP_GUILDARMISTICEANS_ASK ].proc = Packet_GuildArmisticensAnswer;
#endif
}
////////////////////////////////////////////////////////////////////////////////////////
// Event Module Initialize
//
// - Initialize Critical Section
// - Memory allocation
// - Event Create
// - IOCP Create
////////////////////////////////////////////////////////////////////////////////////////
BOOL MapServerSocket::InitializeEvent()
{
// --------------------------------------------------------------------------------
// Memory Pool allocation
// --------------------------------------------------------------------------------
m_pSendIOPool = new CMemPool<_PER_IO_CONTEXT>(MAX_IO_CONTEXT);
if( m_pSendIOPool == NULL )
{
ErrorMsg("memory alloc error .1= %d\n",GetLastError());
return FALSE;
}
m_pRecvIOPool = new CMemPool<_PER_IO_CONTEXT>(MAX_IO_CONTEXT/10);
if( m_pRecvIOPool == NULL )
{
ErrorMsg("memory alloc error .1= %d\n",GetLastError());
return FALSE;
}
// --------------------------------------------------------------------------------
// Create IO Completed
// --------------------------------------------------------------------------------
m_hReadEventCompleted = CreateEvent( NULL, FALSE, FALSE, NULL);
if( !m_hReadEventCompleted )
{
ErrorMsg(TEXT("Error IOCompletedEvent Create. Error code = %d"),GetLastError());
return FALSE;
}
// --------------------------------------------------------------------------------
// IOCP Create
// --------------------------------------------------------------------------------
g_hIOCP = CreateIoCompletionPort( INVALID_HANDLE_VALUE, NULL, 0, 0 );
if( g_hIOCP == INVALID_HANDLE_VALUE )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -