Networking Overhaul: Modern packets, buffers, handshake, dispatch & security hardening
See Readme
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
// vim:ts=8 sw=4
|
||||
// vim:ts=8 sw=4
|
||||
#ifndef __INC_CLIENTMANAGER_H__
|
||||
#define __INC_CLIENTMANAGER_H__
|
||||
|
||||
@@ -157,7 +157,7 @@ class CClientManager : public CNetBase, public singleton<CClientManager>
|
||||
|
||||
CPeer * GetAnyPeer();
|
||||
|
||||
void ForwardPacket(BYTE header, const void* data, int size, BYTE bChannel = 0, CPeer * except = NULL);
|
||||
void ForwardPacket(uint16_t wHeader, const void* data, int size, BYTE bChannel = 0, CPeer * except = NULL);
|
||||
|
||||
void SendNotice(const char * c_pszFormat, ...);
|
||||
|
||||
@@ -181,8 +181,6 @@ class CClientManager : public CNetBase, public singleton<CClientManager>
|
||||
bool InitializeLandTable();
|
||||
bool InitializeObjectProto();
|
||||
bool InitializeObjectTable();
|
||||
bool InitializeMonarch();
|
||||
|
||||
// mob_proto.txt, item_proto.txt에서 읽은 mob_proto, item_proto를 real db에 반영.
|
||||
// item_proto, mob_proto를 db에 반영하지 않아도, 게임 돌아가는데는 문제가 없지만,
|
||||
// 운영툴 등에서 db의 item_proto, mob_proto를 읽어 쓰기 때문에 문제가 발생한다.
|
||||
@@ -317,7 +315,6 @@ class CClientManager : public CNetBase, public singleton<CClientManager>
|
||||
void QUERY_CHANGE_NAME(CPeer * peer, DWORD dwHandle, TPacketGDChangeName * p);
|
||||
void GetPlayerFromRes(TPlayerTable * player_table, MYSQL_RES* res);
|
||||
|
||||
void QUERY_SMS(CPeer * pkPeer, TPacketGDSMS * p);
|
||||
void QUERY_LOGIN_KEY(CPeer * pkPeer, TPacketGDLoginKey * p);
|
||||
|
||||
void AddGuildPriv(TPacketGiveGuildPriv* p);
|
||||
@@ -349,14 +346,14 @@ class CClientManager : public CNetBase, public singleton<CClientManager>
|
||||
// MYSHOP_PRICE_LIST
|
||||
// 개인상점 가격정보
|
||||
|
||||
/// 아이템 가격정보 리스트 업데이트 패킷(HEADER_GD_MYSHOP_PRICELIST_UPDATE) 처리함수
|
||||
/// 아이템 가격정보 리스트 업데이트 패킷(GD::MYSHOP_PRICELIST_UPDATE) 처리함수
|
||||
/**
|
||||
* @param [in] pPacket 패킷 데이터의 포인터
|
||||
*/
|
||||
// void MyshopPricelistUpdate(const TPacketMyshopPricelistHeader* pPacket);
|
||||
void MyshopPricelistUpdate(const TItemPriceListTable* pPacket);
|
||||
|
||||
/// 아이템 가격정보 리스트 요청 패킷(HEADER_GD_MYSHOP_PRICELIST_REQ) 처리함수
|
||||
/// 아이템 가격정보 리스트 요청 패킷(GD::MYSHOP_PRICELIST_REQ) 처리함수
|
||||
/**
|
||||
* @param peer 패킷을 보낸 Game server 의 peer 객체의 포인터
|
||||
* @param [in] dwHandle 가격정보를 요청한 peer 의 핸들
|
||||
@@ -452,7 +449,7 @@ class CClientManager : public CNetBase, public singleton<CClientManager>
|
||||
typedef std::map<std::string, long> TEventFlagMap;
|
||||
TEventFlagMap m_map_lEventFlag;
|
||||
|
||||
BYTE m_bLastHeader;
|
||||
uint16_t m_wLastHeader;
|
||||
int m_iCacheFlushCount;
|
||||
int m_iCacheFlushCountLimit;
|
||||
|
||||
@@ -507,22 +504,6 @@ class CClientManager : public CNetBase, public singleton<CClientManager>
|
||||
|
||||
void FlushPlayerCacheSet(DWORD pid);
|
||||
|
||||
//MONARCH
|
||||
void Election(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
void Candidacy(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
void AddMonarchMoney(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
void TakeMonarchMoney(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
void ComeToVote(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
void RMCandidacy(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
void SetMonarch(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
void RMMonarch(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
|
||||
|
||||
void DecMonarchMoney(CPeer * peer, DWORD dwHandle, const char * p);
|
||||
//END_MONARCH
|
||||
|
||||
void ChangeMonarchLord(CPeer* peer, DWORD dwHandle, TPacketChangeMonarchLord* info);
|
||||
|
||||
void SendSpareItemIDRange(CPeer* peer);
|
||||
|
||||
void UpdateHorseName(TPacketUpdateHorseName* data, CPeer* peer);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "stdafx.h"
|
||||
#include "ClientManager.h"
|
||||
#include "Main.h"
|
||||
#include "Monarch.h"
|
||||
|
||||
#include "CsvReader.h"
|
||||
#include "ProtoReader.h"
|
||||
|
||||
@@ -92,13 +92,6 @@ bool CClientManager::InitializeTables()
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeMonarch())
|
||||
{
|
||||
sys_err("InitializeMonarch FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1339,12 +1332,6 @@ bool CClientManager::InitializeObjectTable()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CClientManager::InitializeMonarch()
|
||||
{
|
||||
CMonarch::instance().LoadMonarch();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CClientManager::MirrorMobTableIntoDB()
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// vim:ts=4 sw=4
|
||||
// vim:ts=4 sw=4
|
||||
#include "stdafx.h"
|
||||
#include "ClientManager.h"
|
||||
#include "Main.h"
|
||||
@@ -23,14 +23,14 @@ void CClientManager::LoadEventFlag()
|
||||
str_to_number(p.lValue, row[1]);
|
||||
sys_log(0, "EventFlag Load %s %d", p.szFlagName, p.lValue);
|
||||
m_map_lEventFlag.insert(std::make_pair(std::string(p.szFlagName), p.lValue));
|
||||
ForwardPacket(HEADER_DG_SET_EVENT_FLAG, &p, sizeof(TPacketSetEventFlag));
|
||||
ForwardPacket(DG::SET_EVENT_FLAG, &p, sizeof(TPacketSetEventFlag));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CClientManager::SetEventFlag(TPacketSetEventFlag* p)
|
||||
{
|
||||
ForwardPacket(HEADER_DG_SET_EVENT_FLAG, p, sizeof(TPacketSetEventFlag));
|
||||
ForwardPacket(DG::SET_EVENT_FLAG, p, sizeof(TPacketSetEventFlag));
|
||||
|
||||
bool bChanged = false;
|
||||
|
||||
@@ -56,10 +56,10 @@ void CClientManager::SetEventFlag(TPacketSetEventFlag* p)
|
||||
|
||||
//CDBManager::instance().ReturnQuery(szQuery, QID_QUEST_SAVE, 0, NULL);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
sys_log(0, "HEADER_GD_SET_EVENT_FLAG : Changed CClientmanager::SetEventFlag(%s %d) ", p->szFlagName, p->lValue);
|
||||
sys_log(0, "GD::SET_EVENT_FLAG : Changed CClientmanager::SetEventFlag(%s %d) ", p->szFlagName, p->lValue);
|
||||
return;
|
||||
}
|
||||
sys_log(0, "HEADER_GD_SET_EVENT_FLAG : No Changed CClientmanager::SetEventFlag(%s %d) ", p->szFlagName, p->lValue);
|
||||
sys_log(0, "GD::SET_EVENT_FLAG : No Changed CClientmanager::SetEventFlag(%s %d) ", p->szFlagName, p->lValue);
|
||||
}
|
||||
|
||||
void CClientManager::SendEventFlagsOnSetup(CPeer* peer)
|
||||
@@ -69,7 +69,7 @@ void CClientManager::SendEventFlagsOnSetup(CPeer* peer)
|
||||
TPacketSetEventFlag p;
|
||||
strlcpy(p.szFlagName, it->first.c_str(), sizeof(p.szFlagName));
|
||||
p.lValue = it->second;
|
||||
peer->EncodeHeader(HEADER_DG_SET_EVENT_FLAG, 0, sizeof(TPacketSetEventFlag));
|
||||
peer->EncodeHeader(DG::SET_EVENT_FLAG, 0, sizeof(TPacketSetEventFlag));
|
||||
peer->Encode(&p, sizeof(TPacketSetEventFlag));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// vim:ts=4 sw=4
|
||||
// vim:ts=4 sw=4
|
||||
#include "stdafx.h"
|
||||
#include "ClientManager.h"
|
||||
#include "Main.h"
|
||||
@@ -11,7 +11,7 @@
|
||||
void CClientManager::GuildCreate(CPeer * peer, DWORD dwGuildID)
|
||||
{
|
||||
sys_log(0, "GuildCreate %u", dwGuildID);
|
||||
ForwardPacket(HEADER_DG_GUILD_LOAD, &dwGuildID, sizeof(DWORD));
|
||||
ForwardPacket(DG::GUILD_LOAD, &dwGuildID, sizeof(DWORD));
|
||||
|
||||
CGuildManager::instance().Load(dwGuildID);
|
||||
}
|
||||
@@ -19,7 +19,7 @@ void CClientManager::GuildCreate(CPeer * peer, DWORD dwGuildID)
|
||||
void CClientManager::GuildChangeGrade(CPeer* peer, TPacketGuild* p)
|
||||
{
|
||||
sys_log(0, "GuildChangeGrade %u %u", p->dwGuild, p->dwInfo);
|
||||
ForwardPacket(HEADER_DG_GUILD_CHANGE_GRADE, p, sizeof(TPacketGuild));
|
||||
ForwardPacket(DG::GUILD_CHANGE_GRADE, p, sizeof(TPacketGuild));
|
||||
}
|
||||
|
||||
void CClientManager::GuildAddMember(CPeer* peer, TPacketGDGuildAddMember * p)
|
||||
@@ -62,7 +62,7 @@ void CClientManager::GuildAddMember(CPeer* peer, TPacketGDGuildAddMember * p)
|
||||
str_to_number(dg.bJob, row[5]);
|
||||
strlcpy(dg.szName, row[6], sizeof(dg.szName));
|
||||
|
||||
ForwardPacket(HEADER_DG_GUILD_ADD_MEMBER, &dg, sizeof(TPacketDGGuildMember));
|
||||
ForwardPacket(DG::GUILD_ADD_MEMBER, &dg, sizeof(TPacketDGGuildMember));
|
||||
}
|
||||
|
||||
void CClientManager::GuildRemoveMember(CPeer* peer, TPacketGuild* p)
|
||||
@@ -76,25 +76,25 @@ void CClientManager::GuildRemoveMember(CPeer* peer, TPacketGuild* p)
|
||||
snprintf(szQuery, sizeof(szQuery), "REPLACE INTO quest%s (dwPID, szName, szState, lValue) VALUES(%u, 'guild_manage', 'withdraw_time', %u)", GetTablePostfix(), p->dwInfo, (DWORD) GetCurrentTime());
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
ForwardPacket(HEADER_DG_GUILD_REMOVE_MEMBER, p, sizeof(TPacketGuild));
|
||||
ForwardPacket(DG::GUILD_REMOVE_MEMBER, p, sizeof(TPacketGuild));
|
||||
}
|
||||
|
||||
void CClientManager::GuildSkillUpdate(CPeer* peer, TPacketGuildSkillUpdate* p)
|
||||
{
|
||||
sys_log(0, "GuildSkillUpdate %d", p->amount);
|
||||
ForwardPacket(HEADER_DG_GUILD_SKILL_UPDATE, p, sizeof(TPacketGuildSkillUpdate));
|
||||
ForwardPacket(DG::GUILD_SKILL_UPDATE, p, sizeof(TPacketGuildSkillUpdate));
|
||||
}
|
||||
|
||||
void CClientManager::GuildExpUpdate(CPeer* peer, TPacketGuildExpUpdate* p)
|
||||
{
|
||||
sys_log(0, "GuildExpUpdate %d", p->amount);
|
||||
ForwardPacket(HEADER_DG_GUILD_EXP_UPDATE, p, sizeof(TPacketGuildExpUpdate), 0, peer);
|
||||
ForwardPacket(DG::GUILD_EXP_UPDATE, p, sizeof(TPacketGuildExpUpdate), 0, peer);
|
||||
}
|
||||
|
||||
void CClientManager::GuildChangeMemberData(CPeer* peer, TPacketGuildChangeMemberData* p)
|
||||
{
|
||||
sys_log(0, "GuildChangeMemberData %u %u %d %d", p->pid, p->offer, p->level, p->grade);
|
||||
ForwardPacket(HEADER_DG_GUILD_CHANGE_MEMBER_DATA, p, sizeof(TPacketGuildChangeMemberData), 0, peer);
|
||||
ForwardPacket(DG::GUILD_CHANGE_MEMBER_DATA, p, sizeof(TPacketGuildChangeMemberData), 0, peer);
|
||||
}
|
||||
|
||||
void CClientManager::GuildDisband(CPeer* peer, TPacketGuild* p)
|
||||
@@ -118,7 +118,7 @@ void CClientManager::GuildDisband(CPeer* peer, TPacketGuild* p)
|
||||
snprintf(szQuery, sizeof(szQuery), "DELETE FROM guild_comment%s WHERE guild_id=%u", GetTablePostfix(), p->dwGuild);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
ForwardPacket(HEADER_DG_GUILD_DISBAND, p, sizeof(TPacketGuild));
|
||||
ForwardPacket(DG::GUILD_DISBAND, p, sizeof(TPacketGuild));
|
||||
}
|
||||
|
||||
const char* __GetWarType(int n)
|
||||
@@ -195,7 +195,7 @@ void CClientManager::GuildWar(CPeer* peer, TPacketGuildWar* p)
|
||||
break;
|
||||
}
|
||||
|
||||
ForwardPacket(HEADER_DG_GUILD_WAR, p, sizeof(TPacketGuildWar));
|
||||
ForwardPacket(DG::GUILD_WAR, p, sizeof(TPacketGuildWar));
|
||||
}
|
||||
|
||||
void CClientManager::GuildWarScore(CPeer* peer, TPacketGuildWarScore * p)
|
||||
@@ -226,7 +226,7 @@ void CClientManager::SendGuildSkillUsable(DWORD guild_id, DWORD dwSkillVnum, boo
|
||||
p.dwSkillVnum = dwSkillVnum;
|
||||
p.bUsable = bUsable;
|
||||
|
||||
ForwardPacket(HEADER_DG_GUILD_SKILL_USABLE_CHANGE, &p, sizeof(TPacketGuildSkillUsableChange));
|
||||
ForwardPacket(DG::GUILD_SKILL_USABLE_CHANGE, &p, sizeof(TPacketGuildSkillUsableChange));
|
||||
}
|
||||
|
||||
void CClientManager::GuildChangeMaster(TPacketChangeGuildMaster* p)
|
||||
@@ -238,7 +238,7 @@ void CClientManager::GuildChangeMaster(TPacketChangeGuildMaster* p)
|
||||
packet.idFrom = 0;
|
||||
packet.idTo = 0;
|
||||
|
||||
ForwardPacket(HEADER_DG_ACK_CHANGE_GUILD_MASTER, &packet, sizeof(packet));
|
||||
ForwardPacket(DG::ACK_CHANGE_GUILD_MASTER, &packet, sizeof(packet));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// vim:ts=4 sw=4
|
||||
// vim:ts=4 sw=4
|
||||
#include "stdafx.h"
|
||||
#include "ClientManager.h"
|
||||
|
||||
@@ -10,7 +10,7 @@ void CClientManager::UpdateHorseName(TPacketUpdateHorseName* data, CPeer* peer)
|
||||
|
||||
auto pmsg_insert = CDBManager::instance().DirectQuery(szQuery);
|
||||
|
||||
ForwardPacket(HEADER_DG_UPDATE_HORSE_NAME, data, sizeof(TPacketUpdateHorseName), 0, peer);
|
||||
ForwardPacket(DG::UPDATE_HORSE_NAME, data, sizeof(TPacketUpdateHorseName), 0, peer);
|
||||
}
|
||||
|
||||
void CClientManager::AckHorseName(DWORD dwPID, CPeer* peer)
|
||||
@@ -34,7 +34,7 @@ void CClientManager::AckHorseName(DWORD dwPID, CPeer* peer)
|
||||
strlcpy(packet.szHorseName, row[0], sizeof(packet.szHorseName));
|
||||
}
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_ACK_HORSE_NAME, 0, sizeof(TPacketUpdateHorseName));
|
||||
peer->EncodeHeader(DG::ACK_HORSE_NAME, 0, sizeof(TPacketUpdateHorseName));
|
||||
peer->Encode(&packet, sizeof(TPacketUpdateHorseName));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "ClientManager.h"
|
||||
@@ -87,7 +87,7 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG
|
||||
if (!pkLoginData)
|
||||
{
|
||||
sys_log(0, "LOGIN_BY_KEY key not exist %s %lu", szLogin, p->dwLoginKey);
|
||||
pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
|
||||
pkPeer->EncodeReturn(DG::LOGIN_NOT_EXIST, dwHandle);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG
|
||||
sys_log(0, "LOGIN_BY_KEY already login %s %lu", r.login, p->dwLoginKey);
|
||||
TPacketDGLoginAlready ptog;
|
||||
strlcpy(ptog.szLogin, r.login, sizeof(ptog.szLogin));
|
||||
pkPeer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, dwHandle, sizeof(TPacketDGLoginAlready));
|
||||
pkPeer->EncodeHeader(DG::LOGIN_ALREADY, dwHandle, sizeof(TPacketDGLoginAlready));
|
||||
pkPeer->Encode(&ptog, sizeof(TPacketDGLoginAlready));
|
||||
return;
|
||||
}
|
||||
@@ -106,7 +106,7 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG
|
||||
if (strcasecmp(r.login, szLogin))
|
||||
{
|
||||
sys_log(0, "LOGIN_BY_KEY login differ %s %lu input %s", r.login, p->dwLoginKey, szLogin);
|
||||
pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
|
||||
pkPeer->EncodeReturn(DG::LOGIN_NOT_EXIST, dwHandle);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ void CClientManager::RESULT_LOGIN_BY_KEY(CPeer * peer, SQLMsg * msg)
|
||||
|
||||
if (msg->uiSQLErrno != 0)
|
||||
{
|
||||
peer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, info->dwHandle);
|
||||
peer->EncodeReturn(DG::LOGIN_NOT_EXIST, info->dwHandle);
|
||||
delete info;
|
||||
return;
|
||||
}
|
||||
@@ -345,7 +345,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
if (msg->Get()->uiNumRows == 0)
|
||||
{
|
||||
sys_log(0, "RESULT_LOGIN: no account");
|
||||
peer->EncodeHeader(HEADER_DG_LOGIN_NOT_EXIST, info->dwHandle, 0);
|
||||
peer->EncodeHeader(DG::LOGIN_NOT_EXIST, info->dwHandle, 0);
|
||||
delete info;
|
||||
return;
|
||||
}
|
||||
@@ -355,7 +355,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
if (!info->pAccountTable)
|
||||
{
|
||||
sys_log(0, "RESULT_LOGIN: no account : WRONG_PASSWD");
|
||||
peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle);
|
||||
peer->EncodeReturn(DG::LOGIN_WRONG_PASSWD, info->dwHandle);
|
||||
delete info;
|
||||
}
|
||||
else
|
||||
@@ -385,7 +385,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
{
|
||||
if (!info->pAccountTable) // 이럴리는 없겠지만;;
|
||||
{
|
||||
peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle);
|
||||
peer->EncodeReturn(DG::LOGIN_WRONG_PASSWD, info->dwHandle);
|
||||
delete info;
|
||||
return;
|
||||
}
|
||||
@@ -398,7 +398,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
TPacketDGLoginAlready p;
|
||||
strlcpy(p.szLogin, info->pAccountTable->login, sizeof(p.szLogin));
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, info->dwHandle, sizeof(TPacketDGLoginAlready));
|
||||
peer->EncodeHeader(DG::LOGIN_ALREADY, info->dwHandle, sizeof(TPacketDGLoginAlready));
|
||||
peer->Encode(&p, sizeof(p));
|
||||
}
|
||||
else
|
||||
@@ -413,7 +413,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
memcpy(&p->GetAccountRef(), info->pAccountTable, sizeof(TAccountTable));
|
||||
|
||||
//END_PREVENT_COPY_ITEM
|
||||
peer->EncodeHeader(HEADER_DG_LOGIN_SUCCESS, info->dwHandle, sizeof(TAccountTable));
|
||||
peer->EncodeHeader(DG::LOGIN_SUCCESS, info->dwHandle, sizeof(TAccountTable));
|
||||
peer->Encode(info->pAccountTable, sizeof(TAccountTable));
|
||||
|
||||
}
|
||||
@@ -480,7 +480,7 @@ void CClientManager::QUERY_CHANGE_NAME(CPeer * peer, DWORD dwHandle, TPacketGDCh
|
||||
{
|
||||
if (!pMsg->Get()->pSQLResult)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -488,13 +488,13 @@ void CClientManager::QUERY_CHANGE_NAME(CPeer * peer, DWORD dwHandle, TPacketGDCh
|
||||
|
||||
if (*row[0] != '0')
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -504,7 +504,7 @@ void CClientManager::QUERY_CHANGE_NAME(CPeer * peer, DWORD dwHandle, TPacketGDCh
|
||||
auto pMsg0 = CDBManager::instance().DirectQuery(queryStr, SQL_PLAYER);
|
||||
|
||||
TPacketDGChangeName pdg;
|
||||
peer->EncodeHeader(HEADER_DG_CHANGE_NAME, dwHandle, sizeof(TPacketDGChangeName));
|
||||
peer->EncodeHeader(DG::CHANGE_NAME, dwHandle, sizeof(TPacketDGChangeName));
|
||||
pdg.pid = p->pid;
|
||||
strlcpy(pdg.name, p->name, sizeof(pdg.name));
|
||||
peer->Encode(&pdg, sizeof(TPacketDGChangeName));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// vim:ts=4 sw=4
|
||||
// vim:ts=4 sw=4
|
||||
#include "stdafx.h"
|
||||
#include "ClientManager.h"
|
||||
#include "Config.h"
|
||||
@@ -12,7 +12,7 @@ void CClientManager::QUERY_PARTY_CREATE(CPeer* peer, TPacketPartyCreate* p)
|
||||
if (pm.find(p->dwLeaderPID) == pm.end())
|
||||
{
|
||||
pm.insert(make_pair(p->dwLeaderPID, TPartyMember()));
|
||||
ForwardPacket(HEADER_DG_PARTY_CREATE, p, sizeof(TPacketPartyCreate), 0, peer);
|
||||
ForwardPacket(DG::PARTY_CREATE, p, sizeof(TPacketPartyCreate), 0, peer);
|
||||
sys_log(0, "PARTY Create [%lu]", p->dwLeaderPID);
|
||||
}
|
||||
else
|
||||
@@ -33,7 +33,7 @@ void CClientManager::QUERY_PARTY_DELETE(CPeer* peer, TPacketPartyDelete* p)
|
||||
}
|
||||
|
||||
pm.erase(it);
|
||||
ForwardPacket(HEADER_DG_PARTY_DELETE, p, sizeof(TPacketPartyDelete), 0, peer);
|
||||
ForwardPacket(DG::PARTY_DELETE, p, sizeof(TPacketPartyDelete), 0, peer);
|
||||
sys_log(0, "PARTY Delete [%lu]", p->dwLeaderPID);
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ void CClientManager::QUERY_PARTY_ADD(CPeer* peer, TPacketPartyAdd* p)
|
||||
if (it->second.find(p->dwPID) == it->second.end())
|
||||
{
|
||||
it->second.insert(std::make_pair(p->dwPID, TPartyInfo()));
|
||||
ForwardPacket(HEADER_DG_PARTY_ADD, p, sizeof(TPacketPartyAdd), 0, peer);
|
||||
ForwardPacket(DG::PARTY_ADD, p, sizeof(TPacketPartyAdd), 0, peer);
|
||||
sys_log(0, "PARTY Add [%lu] to [%lu]", p->dwPID, p->dwLeaderPID);
|
||||
}
|
||||
else
|
||||
@@ -74,7 +74,7 @@ void CClientManager::QUERY_PARTY_REMOVE(CPeer* peer, TPacketPartyRemove* p)
|
||||
if (pit != it->second.end())
|
||||
{
|
||||
it->second.erase(pit);
|
||||
ForwardPacket(HEADER_DG_PARTY_REMOVE, p, sizeof(TPacketPartyRemove), 0, peer);
|
||||
ForwardPacket(DG::PARTY_REMOVE, p, sizeof(TPacketPartyRemove), 0, peer);
|
||||
sys_log(0, "PARTY Remove [%lu] to [%lu]", p->dwPID, p->dwLeaderPID);
|
||||
}
|
||||
else
|
||||
@@ -105,7 +105,7 @@ void CClientManager::QUERY_PARTY_STATE_CHANGE(CPeer* peer, TPacketPartyStateChan
|
||||
else
|
||||
pit->second.bRole = 0;
|
||||
|
||||
ForwardPacket(HEADER_DG_PARTY_STATE_CHANGE, p, sizeof(TPacketPartyStateChange), 0, peer);
|
||||
ForwardPacket(DG::PARTY_STATE_CHANGE, p, sizeof(TPacketPartyStateChange), 0, peer);
|
||||
sys_log(0, "PARTY StateChange [%lu] at [%lu] from %d %d",p->dwPID, p->dwLeaderPID, p->bRole, p->bFlag);
|
||||
}
|
||||
|
||||
@@ -130,6 +130,6 @@ void CClientManager::QUERY_PARTY_SET_MEMBER_LEVEL(CPeer* peer, TPacketPartySetMe
|
||||
|
||||
pit->second.bLevel = p->bLevel;
|
||||
|
||||
ForwardPacket(HEADER_DG_PARTY_SET_MEMBER_LEVEL, p, sizeof(TPacketPartySetMemberLevel));
|
||||
ForwardPacket(DG::PARTY_SET_MEMBER_LEVEL, p, sizeof(TPacketPartySetMemberLevel));
|
||||
sys_log(0, "PARTY SetMemberLevel pid [%lu] level %d",p->dwPID, p->bLevel);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "ClientManager.h"
|
||||
@@ -237,7 +237,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
if (!pkLD || pkLD->IsPlay())
|
||||
{
|
||||
sys_log(0, "PLAYER_LOAD_ERROR: LoginData %p IsPlay %d", pkLD, pkLD ? pkLD->IsPlay() : 0);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_LOAD_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
pkLD->SetPlay(true);
|
||||
thecore_memcpy(pTab->aiPremiumTimes, pkLD->GetPremiumPtr(), sizeof(pTab->aiPremiumTimes));
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_SUCCESS, dwHandle, sizeof(TPlayerTable));
|
||||
peer->EncodeHeader(DG::PLAYER_LOAD_SUCCESS, dwHandle, sizeof(TPlayerTable));
|
||||
peer->Encode(pTab, sizeof(TPlayerTable));
|
||||
|
||||
if (packet->player_id != pkLD->GetLastPlayerID())
|
||||
@@ -256,7 +256,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
|
||||
pkLD->SetLastPlayerID( packet->player_id );
|
||||
|
||||
peer->EncodeHeader( HEADER_DG_NEED_LOGIN_LOG, dwHandle, sizeof(TPacketNeedLoginLogInfo) );
|
||||
peer->EncodeHeader( DG::NEED_LOGIN_LOG, dwHandle, sizeof(TPacketNeedLoginLogInfo) );
|
||||
peer->Encode( &logInfo, sizeof(TPacketNeedLoginLogInfo) );
|
||||
}
|
||||
|
||||
@@ -295,7 +295,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
if (g_test_server)
|
||||
sys_log(0, "ITEM_CACHE: HIT! %s count: %u", pTab->name, dwCount);
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_ITEM_LOAD, dwHandle, sizeof(DWORD) + sizeof(TPlayerItem) * dwCount);
|
||||
peer->EncodeHeader(DG::ITEM_LOAD, dwHandle, sizeof(DWORD) + sizeof(TPlayerItem) * dwCount);
|
||||
peer->EncodeDWORD(dwCount);
|
||||
|
||||
if (dwCount)
|
||||
@@ -425,7 +425,7 @@ void CClientManager::ItemAward(CPeer * peer,char* login)
|
||||
strcpy(giftData.login, pItemAward->szLogin); //로그인 아이디 복사
|
||||
strcpy(giftData.command, command); //명령어 복사
|
||||
giftData.vnum = pItemAward->dwVnum; //아이템 vnum도 복사
|
||||
ForwardPacket(HEADER_DG_ITEMAWARD_INFORMER, &giftData, sizeof(TPacketItemAwardInfromer));
|
||||
ForwardPacket(DG::ITEMAWARD_INFORMER, &giftData, sizeof(TPacketItemAwardInfromer));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -512,12 +512,7 @@ bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab)
|
||||
str_to_number(pkTab->skill_group, row[col++]);
|
||||
str_to_number(pkTab->lAlignment, row[col++]);
|
||||
|
||||
if (row[col])
|
||||
{
|
||||
strlcpy(pkTab->szMobile, row[col], sizeof(pkTab->szMobile));
|
||||
}
|
||||
|
||||
col++;
|
||||
col++; // skip mobile (removed feature)
|
||||
|
||||
str_to_number(pkTab->horse.bLevel, row[col++]);
|
||||
str_to_number(pkTab->horse.bRiding, row[col++]);
|
||||
@@ -608,7 +603,7 @@ void CClientManager::RESULT_COMPOSITE_PLAYER(CPeer * peer, SQLMsg * pMsg, DWORD
|
||||
TPacketAffectElement pAffElem{};
|
||||
DWORD dwCount = 0;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_AFFECT_LOAD, info->dwHandle, sizeof(DWORD) + sizeof(DWORD) + sizeof(TPacketAffectElement) * dwCount);
|
||||
peer->EncodeHeader(DG::AFFECT_LOAD, info->dwHandle, sizeof(DWORD) + sizeof(DWORD) + sizeof(TPacketAffectElement) * dwCount);
|
||||
peer->Encode(&info->player_id, sizeof(DWORD));
|
||||
peer->Encode(&dwCount, sizeof(DWORD));
|
||||
peer->Encode(&pAffElem, sizeof(TPacketAffectElement) * dwCount);
|
||||
@@ -661,7 +656,7 @@ void CClientManager::RESULT_PLAYER_LOAD(CPeer * peer, MYSQL_RES * pRes, ClientHa
|
||||
|
||||
if (!CreatePlayerTableFromRes(pRes, &tab))
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_FAILED, pkInfo->dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_LOAD_FAILED, pkInfo->dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -670,14 +665,14 @@ void CClientManager::RESULT_PLAYER_LOAD(CPeer * peer, MYSQL_RES * pRes, ClientHa
|
||||
if (!pkLD || pkLD->IsPlay())
|
||||
{
|
||||
sys_log(0, "PLAYER_LOAD_ERROR: LoginData %p IsPlay %d", pkLD, pkLD ? pkLD->IsPlay() : 0);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_FAILED, pkInfo->dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_LOAD_FAILED, pkInfo->dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
pkLD->SetPlay(true);
|
||||
thecore_memcpy(tab.aiPremiumTimes, pkLD->GetPremiumPtr(), sizeof(tab.aiPremiumTimes));
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_SUCCESS, pkInfo->dwHandle, sizeof(TPlayerTable));
|
||||
peer->EncodeHeader(DG::PLAYER_LOAD_SUCCESS, pkInfo->dwHandle, sizeof(TPlayerTable));
|
||||
peer->Encode(&tab, sizeof(TPlayerTable));
|
||||
|
||||
if (tab.id != pkLD->GetLastPlayerID())
|
||||
@@ -687,7 +682,7 @@ void CClientManager::RESULT_PLAYER_LOAD(CPeer * peer, MYSQL_RES * pRes, ClientHa
|
||||
|
||||
pkLD->SetLastPlayerID( tab.id );
|
||||
|
||||
peer->EncodeHeader( HEADER_DG_NEED_LOGIN_LOG, pkInfo->dwHandle, sizeof(TPacketNeedLoginLogInfo) );
|
||||
peer->EncodeHeader( DG::NEED_LOGIN_LOG, pkInfo->dwHandle, sizeof(TPacketNeedLoginLogInfo) );
|
||||
peer->Encode( &logInfo, sizeof(TPacketNeedLoginLogInfo) );
|
||||
}
|
||||
}
|
||||
@@ -699,7 +694,7 @@ void CClientManager::RESULT_ITEM_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwHa
|
||||
CreateItemTableFromRes(pRes, &s_items, dwPID);
|
||||
DWORD dwCount = s_items.size();
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_ITEM_LOAD, dwHandle, sizeof(DWORD) + sizeof(TPlayerItem) * dwCount);
|
||||
peer->EncodeHeader(DG::ITEM_LOAD, dwHandle, sizeof(DWORD) + sizeof(TPlayerItem) * dwCount);
|
||||
peer->EncodeDWORD(dwCount);
|
||||
|
||||
//CacheSet을 만든다
|
||||
@@ -752,7 +747,7 @@ void CClientManager::RESULT_AFFECT_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dw
|
||||
|
||||
DWORD dwCount = s_elements.size();
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_AFFECT_LOAD, dwHandle, sizeof(DWORD) + sizeof(DWORD) + sizeof(TPacketAffectElement) * dwCount);
|
||||
peer->EncodeHeader(DG::AFFECT_LOAD, dwHandle, sizeof(DWORD) + sizeof(DWORD) + sizeof(TPacketAffectElement) * dwCount);
|
||||
peer->Encode(&dwPID, sizeof(DWORD));
|
||||
peer->Encode(&dwCount, sizeof(DWORD));
|
||||
peer->Encode(&s_elements[0], sizeof(TPacketAffectElement) * dwCount);
|
||||
@@ -765,7 +760,7 @@ void CClientManager::RESULT_QUEST_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwH
|
||||
if ((iNumRows = mysql_num_rows(pRes)) == 0)
|
||||
{
|
||||
DWORD dwCount = 0;
|
||||
peer->EncodeHeader(HEADER_DG_QUEST_LOAD, dwHandle, sizeof(DWORD));
|
||||
peer->EncodeHeader(DG::QUEST_LOAD, dwHandle, sizeof(DWORD));
|
||||
peer->Encode(&dwCount, sizeof(DWORD));
|
||||
return;
|
||||
}
|
||||
@@ -791,7 +786,7 @@ void CClientManager::RESULT_QUEST_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwH
|
||||
|
||||
DWORD dwCount = s_table.size();
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_QUEST_LOAD, dwHandle, sizeof(DWORD) + sizeof(TQuestTable) * dwCount);
|
||||
peer->EncodeHeader(DG::QUEST_LOAD, dwHandle, sizeof(DWORD) + sizeof(TQuestTable) * dwCount);
|
||||
peer->Encode(&dwCount, sizeof(DWORD));
|
||||
peer->Encode(&s_table[0], sizeof(TQuestTable) * dwCount);
|
||||
}
|
||||
@@ -828,7 +823,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
|
||||
if (curtime - it->second < 30)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -842,7 +837,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
{
|
||||
if (!pMsg0->Get()->pSQLResult)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -851,14 +846,14 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
DWORD dwPID = 0; str_to_number(dwPID, row[0]);
|
||||
if (row[0] && dwPID > 0)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
sys_log(0, "ALREADY EXIST AccountChrIdx %d ID %d", packet->account_index, dwPID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -876,7 +871,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
{
|
||||
if (!pMsg1->Get()->pSQLResult)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -885,13 +880,13 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
if (*row[0] != '0')
|
||||
{
|
||||
sys_log(0, "ALREADY EXIST name %s, row[0] %s query %s", packet->player_table.name, row[0], queryStr);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -934,7 +929,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
|
||||
if (pMsg2->Get()->uiAffectedRows <= 0)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
sys_log(0, "ALREADY EXIST3 query: %s AffectedRows %lu", queryStr, pMsg2->Get()->uiAffectedRows);
|
||||
return;
|
||||
}
|
||||
@@ -952,7 +947,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
snprintf(queryStr, sizeof(queryStr), "DELETE FROM player%s WHERE id=%d", GetTablePostfix(), player_id);
|
||||
CDBManager::instance().DirectQuery(queryStr);
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -974,7 +969,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
pack.player.x = packet->player_table.x;
|
||||
pack.player.y = packet->player_table.y;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_SUCCESS, dwHandle, sizeof(TPacketDGCreateSuccess));
|
||||
peer->EncodeHeader(DG::PLAYER_CREATE_SUCCESS, dwHandle, sizeof(TPacketDGCreateSuccess));
|
||||
peer->Encode(&pack, sizeof(TPacketDGCreateSuccess));
|
||||
|
||||
sys_log(0, "7 name %s job %d", pack.player.szName, pack.player.byJob);
|
||||
@@ -994,7 +989,7 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD
|
||||
|
||||
if (!ld)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeBYTE(packet->account_index);
|
||||
return;
|
||||
}
|
||||
@@ -1009,7 +1004,7 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD
|
||||
if (strlen(r.social_id) < 7 || strncmp(packet->private_code, r.social_id + strlen(r.social_id) - 7, 7))
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED len(%d)", strlen(r.social_id));
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeBYTE(packet->account_index);
|
||||
return;
|
||||
}
|
||||
@@ -1022,7 +1017,7 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD
|
||||
if (pTab->level >= m_iPlayerDeleteLevelLimit)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d", pTab->level, m_iPlayerDeleteLevelLimit);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeBYTE(packet->account_index);
|
||||
return;
|
||||
}
|
||||
@@ -1030,7 +1025,7 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD
|
||||
if (pTab->level < m_iPlayerDeleteLevelLimitLower)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED LEVEL %u < DELETE LIMIT %d", pTab->level, m_iPlayerDeleteLevelLimitLower);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeBYTE(packet->account_index);
|
||||
return;
|
||||
}
|
||||
@@ -1073,7 +1068,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
if (deletedLevelLimit >= m_iPlayerDeleteLevelLimit && !IsChinaEventServer())
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d", deletedLevelLimit, m_iPlayerDeleteLevelLimit);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
return;
|
||||
}
|
||||
@@ -1081,7 +1076,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
if (deletedLevelLimit < m_iPlayerDeleteLevelLimitLower)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED LEVEL %u < DELETE LIMIT %d", deletedLevelLimit, m_iPlayerDeleteLevelLimitLower);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
return;
|
||||
}
|
||||
@@ -1096,7 +1091,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player%s_deleted", dwPID, GetTablePostfix());
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
return;
|
||||
}
|
||||
@@ -1147,7 +1142,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
if (pMsg->Get()->uiAffectedRows == 0 || pMsg->Get()->uiAffectedRows == (uint32_t)-1)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAIL WHEN UPDATE account table");
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
return;
|
||||
}
|
||||
@@ -1175,14 +1170,14 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
snprintf(queryStr, sizeof(queryStr), "DELETE FROM messenger_list%s WHERE account='%s' OR companion='%s'", GetTablePostfix(), szName, szName);
|
||||
CDBManager::instance().AsyncQuery(queryStr);
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_SUCCESS, pi->dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_SUCCESS, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 삭제 실패
|
||||
sys_log(0, "PLAYER_DELETE FAIL NO ROW");
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeHeader(DG::PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
}
|
||||
}
|
||||
@@ -1240,7 +1235,7 @@ void CClientManager::QUERY_HIGHSCORE_REGISTER(CPeer* peer, TPacketGDHighscore *
|
||||
char szQuery[128];
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT value FROM highscore%s WHERE board='%s' AND pid = %u", GetTablePostfix(), data->szBoard, data->dwPID);
|
||||
|
||||
sys_log(0, "HEADER_GD_HIGHSCORE_REGISTER: PID %u", data->dwPID);
|
||||
sys_log(0, "GD::HIGHSCORE_REGISTER: PID %u", data->dwPID);
|
||||
|
||||
ClientHandleInfo * pi = new ClientHandleInfo(0);
|
||||
strlcpy(pi->login, data->szBoard, sizeof(pi->login));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "GuildManager.h"
|
||||
#include "Main.h"
|
||||
#include "ClientManager.h"
|
||||
@@ -70,7 +70,7 @@ namespace
|
||||
if (peer->GetChannel() == 0)
|
||||
return;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_GUILD_WAR, 0, sizeof(TPacketGuildWar));
|
||||
peer->EncodeHeader(DG::GUILD_WAR, 0, sizeof(TPacketGuildWar));
|
||||
peer->Encode(&p, sizeof(TPacketGuildWar));
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace
|
||||
if (peer->GetChannel() == 0)
|
||||
return;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_GUILD_WAR_SCORE, 0, sizeof(pck));
|
||||
peer->EncodeHeader(DG::GUILD_WAR_SCORE, 0, sizeof(pck));
|
||||
peer->Encode(&pck, sizeof(pck));
|
||||
}
|
||||
|
||||
@@ -306,7 +306,7 @@ void CGuildManager::Update()
|
||||
p.dwGuildFrom = ws.GID[0];
|
||||
p.dwGuildTo = ws.GID[1];
|
||||
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_WAR, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::GUILD_WAR, &p, sizeof(p));
|
||||
sys_log(0, "GuildWar: GUILD sending start of wait start war %d %d", ws.GID[0], ws.GID[1]);
|
||||
}
|
||||
}
|
||||
@@ -754,7 +754,7 @@ void CGuildManager::ChangeLadderPoint(DWORD GID, int change)
|
||||
p.lDraw = r.draw;
|
||||
p.lLoss = r.loss;
|
||||
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_LADDER, &p, sizeof(TPacketGuildLadder));
|
||||
CClientManager::instance().ForwardPacket(DG::GUILD_LADDER, &p, sizeof(TPacketGuildLadder));
|
||||
}
|
||||
|
||||
void CGuildManager::UseSkill(DWORD GID, DWORD dwSkillVnum, DWORD dwCooltime)
|
||||
@@ -772,7 +772,7 @@ void CGuildManager::MoneyChange(DWORD dwGuild, DWORD dwGold)
|
||||
TPacketDGGuildMoneyChange p;
|
||||
p.dwGuild = dwGuild;
|
||||
p.iTotalGold = dwGold;
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_MONEY_CHANGE, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::GUILD_MONEY_CHANGE, &p, sizeof(p));
|
||||
|
||||
char buf[1024];
|
||||
snprintf(buf, sizeof(buf), "UPDATE guild%s SET gold=%u WHERE id = %u", GetTablePostfix(), dwGold, dwGuild);
|
||||
@@ -818,7 +818,7 @@ void CGuildManager::WithdrawMoney(CPeer* peer, DWORD dwGuild, INT iGold)
|
||||
p.dwGuild = dwGuild;
|
||||
p.iChangeGold = iGold;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_GUILD_WITHDRAW_MONEY_GIVE, 0, sizeof(TPacketDGGuildMoneyWithdraw));
|
||||
peer->EncodeHeader(DG::GUILD_WITHDRAW_MONEY_GIVE, 0, sizeof(TPacketDGGuildMoneyWithdraw));
|
||||
peer->Encode(&p, sizeof(TPacketDGGuildMoneyWithdraw));
|
||||
}
|
||||
}
|
||||
@@ -1077,7 +1077,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
|
||||
|
||||
m_map_kWarReserve.insert(std::make_pair(t.dwID, new CGuildWarReserve(t)));
|
||||
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_WAR_RESERVE_ADD, &t, sizeof(TGuildWarReserve));
|
||||
CClientManager::instance().ForwardPacket(DG::GUILD_WAR_RESERVE_ADD, &t, sizeof(TGuildWarReserve));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1109,7 +1109,7 @@ void CGuildManager::ProcessReserveWar()
|
||||
snprintf(szQuery, sizeof(szQuery), "UPDATE guild_war_reservation SET started=1 WHERE id=%u", r.dwID);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_WAR_RESERVE_DEL, &r.dwID, sizeof(DWORD));
|
||||
CClientManager::instance().ForwardPacket(DG::GUILD_WAR_RESERVE_DEL, &r.dwID, sizeof(DWORD));
|
||||
|
||||
r.bStarted = true;
|
||||
|
||||
@@ -1125,7 +1125,7 @@ void CGuildManager::ProcessReserveWar()
|
||||
pck.lWarPrice = r.lWarPrice;
|
||||
pck.lInitialScore = r.lInitialScore;
|
||||
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_WAR, &pck, sizeof(TPacketGuildWar));
|
||||
CClientManager::instance().ForwardPacket(DG::GUILD_WAR, &pck, sizeof(TPacketGuildWar));
|
||||
//m_map_kWarReserve.erase(it2);
|
||||
}
|
||||
else
|
||||
@@ -1244,7 +1244,7 @@ void CGuildWarReserve::OnSetup(CPeer * peer)
|
||||
|
||||
FSendPeerWar(m_data.bType, GUILD_WAR_RESERVE, m_data.dwGuildFrom, m_data.dwGuildTo) (peer);
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_GUILD_WAR_RESERVE_ADD, 0, sizeof(TGuildWarReserve));
|
||||
peer->EncodeHeader(DG::GUILD_WAR_RESERVE_ADD, 0, sizeof(TGuildWarReserve));
|
||||
peer->Encode(&m_data, sizeof(TGuildWarReserve));
|
||||
|
||||
TPacketGDGuildWarBet pckBet;
|
||||
@@ -1258,7 +1258,7 @@ void CGuildWarReserve::OnSetup(CPeer * peer)
|
||||
pckBet.dwGuild = it->second.first;
|
||||
pckBet.dwGold = it->second.second;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_GUILD_WAR_BET, 0, sizeof(TPacketGDGuildWarBet));
|
||||
peer->EncodeHeader(DG::GUILD_WAR_BET, 0, sizeof(TPacketGDGuildWarBet));
|
||||
peer->Encode(&pckBet, sizeof(TPacketGDGuildWarBet));
|
||||
|
||||
++it;
|
||||
@@ -1304,7 +1304,7 @@ bool CGuildWarReserve::Bet(const char * pszLogin, DWORD dwGold, DWORD dwGuild)
|
||||
else
|
||||
m_data.dwBetTo += dwGold;
|
||||
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_WAR_RESERVE_ADD, &m_data, sizeof(TGuildWarReserve));
|
||||
CClientManager::instance().ForwardPacket(DG::GUILD_WAR_RESERVE_ADD, &m_data, sizeof(TGuildWarReserve));
|
||||
|
||||
snprintf(szQuery, sizeof(szQuery), "UPDATE guild_war_reservation SET bet_from=%u,bet_to=%u WHERE id=%u",
|
||||
m_data.dwBetFrom, m_data.dwBetTo, m_data.dwID);
|
||||
@@ -1320,7 +1320,7 @@ bool CGuildWarReserve::Bet(const char * pszLogin, DWORD dwGold, DWORD dwGuild)
|
||||
pckBet.dwGuild = dwGuild;
|
||||
pckBet.dwGold = dwGold;
|
||||
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_WAR_BET, &pckBet, sizeof(TPacketGDGuildWarBet));
|
||||
CClientManager::instance().ForwardPacket(DG::GUILD_WAR_BET, &pckBet, sizeof(TPacketGDGuildWarBet));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "QID.h"
|
||||
#include "DBManager.h"
|
||||
#include "ItemAwardManager.h"
|
||||
@@ -67,7 +67,7 @@ void ItemAwardManager::Load(SQLMsg * pMsg)
|
||||
strcpy(giftData.login, kData->szLogin); //로그인 아이디 복사
|
||||
strcpy(giftData.command, command); //명령어 복사
|
||||
giftData.vnum = kData->dwVnum; //아이템 vnum도 복사
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_ITEMAWARD_INFORMER,&giftData,sizeof(TPacketItemAwardInfromer));
|
||||
CClientManager::instance().ForwardPacket(DG::ITEMAWARD_INFORMER,&giftData,sizeof(TPacketItemAwardInfromer));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#include "PrivManager.h"
|
||||
#include "MoneyLog.h"
|
||||
#include "Marriage.h"
|
||||
#include "Monarch.h"
|
||||
#include "ItemIDRangeManager.h"
|
||||
#include <signal.h>
|
||||
#undef OS_FREEBSD
|
||||
@@ -77,7 +76,6 @@ int main()
|
||||
CMoneyLog MoneyLog;
|
||||
ItemAwardManager ItemAwardManager;
|
||||
marriage::CManager MarriageManager;
|
||||
CMonarch Monarch;
|
||||
CItemIDRangeManager ItemIDRangeManager;
|
||||
|
||||
if (!Start())
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "Marriage.h"
|
||||
#include "Main.h"
|
||||
#include "DBManager.h"
|
||||
@@ -123,7 +123,7 @@ namespace marriage
|
||||
p.tMarryTime = now;
|
||||
strlcpy(p.szName1, szName1, sizeof(p.szName1));
|
||||
strlcpy(p.szName2, szName2, sizeof(p.szName2));
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_MARRIAGE_ADD, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::MARRIAGE_ADD, &p, sizeof(p));
|
||||
}
|
||||
|
||||
void CManager::Update(DWORD dwPID1, DWORD dwPID2, INT iLovePoint, BYTE byMarried)
|
||||
@@ -159,7 +159,7 @@ namespace marriage
|
||||
p.dwPID2 = dwPID2;
|
||||
p.iLovePoint = pMarriage->love_point;
|
||||
p.byMarried = pMarriage->is_married;
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_MARRIAGE_UPDATE, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::MARRIAGE_UPDATE, &p, sizeof(p));
|
||||
}
|
||||
|
||||
void CManager::Remove(DWORD dwPID1, DWORD dwPID2)
|
||||
@@ -205,7 +205,7 @@ namespace marriage
|
||||
TPacketMarriageRemove p;
|
||||
p.dwPID1 = dwPID1;
|
||||
p.dwPID2 = dwPID2;
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_MARRIAGE_REMOVE, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::MARRIAGE_REMOVE, &p, sizeof(p));
|
||||
|
||||
delete pMarriage;
|
||||
}
|
||||
@@ -248,7 +248,7 @@ namespace marriage
|
||||
p.dwPID2 = dwPID2;
|
||||
p.iLovePoint = pMarriage->love_point;
|
||||
p.byMarried = pMarriage->is_married;
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_MARRIAGE_UPDATE, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::MARRIAGE_UPDATE, &p, sizeof(p));
|
||||
}
|
||||
|
||||
void CManager::OnSetup(CPeer* peer)
|
||||
@@ -265,7 +265,7 @@ namespace marriage
|
||||
p.tMarryTime = pMarriage->time;
|
||||
strlcpy(p.szName1, pMarriage->name1.c_str(), sizeof(p.szName1));
|
||||
strlcpy(p.szName2, pMarriage->name2.c_str(), sizeof(p.szName2));
|
||||
peer->EncodeHeader(HEADER_DG_MARRIAGE_ADD, 0, sizeof(p));
|
||||
peer->EncodeHeader(DG::MARRIAGE_ADD, 0, sizeof(p));
|
||||
peer->Encode(&p, sizeof(p));
|
||||
}
|
||||
|
||||
@@ -275,7 +275,7 @@ namespace marriage
|
||||
p.dwPID2 = pMarriage->pid2;
|
||||
p.iLovePoint = pMarriage->love_point;
|
||||
p.byMarried = pMarriage->is_married;
|
||||
peer->EncodeHeader(HEADER_DG_MARRIAGE_UPDATE, 0, sizeof(p));
|
||||
peer->EncodeHeader(DG::MARRIAGE_UPDATE, 0, sizeof(p));
|
||||
peer->Encode(&p, sizeof(p));
|
||||
}
|
||||
}
|
||||
@@ -290,14 +290,14 @@ namespace marriage
|
||||
p.dwPID2 = t.dwPID2;
|
||||
p.dwMapIndex = t.dwMapIndex;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_WEDDING_READY, 0, sizeof(p));
|
||||
peer->EncodeHeader(DG::WEDDING_READY, 0, sizeof(p));
|
||||
peer->Encode(&p, sizeof(p));
|
||||
|
||||
TPacketWeddingStart p2;
|
||||
p2.dwPID1 = t.dwPID1;
|
||||
p2.dwPID2 = t.dwPID2;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_WEDDING_START, 0, sizeof(p2));
|
||||
peer->EncodeHeader(DG::WEDDING_START, 0, sizeof(p2));
|
||||
peer->Encode(&p2, sizeof(p2));
|
||||
}
|
||||
}
|
||||
@@ -322,7 +322,7 @@ namespace marriage
|
||||
TPacketWeddingEnd p;
|
||||
p.dwPID1 = w.dwPID1;
|
||||
p.dwPID2 = w.dwPID2;
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_WEDDING_END, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::WEDDING_END, &p, sizeof(p));
|
||||
m_mapRunningWedding.erase(it);
|
||||
}
|
||||
|
||||
@@ -347,7 +347,7 @@ namespace marriage
|
||||
TPacketWeddingEnd p;
|
||||
p.dwPID1 = w.dwPID1;
|
||||
p.dwPID2 = w.dwPID2;
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_WEDDING_END, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::WEDDING_END, &p, sizeof(p));
|
||||
|
||||
itertype(m_MarriageByPID) it_marriage = m_MarriageByPID.find(w.dwPID1);
|
||||
|
||||
@@ -371,7 +371,7 @@ namespace marriage
|
||||
TPacketWeddingStart p;
|
||||
p.dwPID1 = w.dwPID1;
|
||||
p.dwPID2 = w.dwPID2;
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_WEDDING_START, &p, sizeof(p));
|
||||
CClientManager::instance().ForwardPacket(DG::WEDDING_START, &p, sizeof(p));
|
||||
|
||||
w.dwTime += WEDDING_LENGTH;
|
||||
m_pqWeddingEnd.push(TWeddingInfo(w.dwTime, w.dwPID1, w.dwPID2));
|
||||
|
||||
@@ -1,298 +0,0 @@
|
||||
#include "Monarch.h"
|
||||
#include "common/utils.h"
|
||||
#include "Main.h"
|
||||
#include "ClientManager.h"
|
||||
|
||||
extern int g_test_server;
|
||||
|
||||
CMonarch::CMonarch()
|
||||
{
|
||||
memset(&m_MonarchInfo, 0, sizeof(MonarchInfo));
|
||||
}
|
||||
|
||||
CMonarch::~CMonarch()
|
||||
{
|
||||
}
|
||||
|
||||
bool CMonarch::VoteMonarch(DWORD pid, DWORD selectdpid)
|
||||
{
|
||||
MAP_MONARCHELECTION::iterator it = m_map_MonarchElection.find(pid);
|
||||
|
||||
if (it == m_map_MonarchElection.end())
|
||||
{
|
||||
MonarchElectionInfo * p = new MonarchElectionInfo;
|
||||
p->pid = pid;
|
||||
p->selectedpid= selectdpid;
|
||||
m_map_MonarchElection.insert(MAP_MONARCHELECTION::value_type(pid, p));
|
||||
|
||||
char szQuery[256];
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"INSERT INTO monarch_election(pid, selectedpid, electiondata) VALUES(%d, %d, now())", pid, selectdpid);
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CMonarch::ElectMonarch()
|
||||
{
|
||||
int size = GetVecMonarchCandidacy().size();
|
||||
|
||||
int * s = new int[size];
|
||||
|
||||
itertype(m_map_MonarchElection) it = m_map_MonarchElection.begin();
|
||||
|
||||
int idx = 0;
|
||||
|
||||
for (; it != m_map_MonarchElection.end(); ++it)
|
||||
{
|
||||
if ((idx = GetCandidacyIndex(it->second->pid)) < 0)
|
||||
continue;
|
||||
|
||||
++s[idx];
|
||||
|
||||
if (g_test_server)
|
||||
sys_log (0, "[MONARCH_VOTE] pid(%d) come to vote candidacy pid(%d)", it->second->pid, m_vec_MonarchCandidacy[idx].pid);
|
||||
}
|
||||
|
||||
delete [] s;
|
||||
}
|
||||
|
||||
bool CMonarch::IsCandidacy(DWORD pid)
|
||||
{
|
||||
VEC_MONARCHCANDIDACY::iterator it = m_vec_MonarchCandidacy.begin();
|
||||
|
||||
for (; it != m_vec_MonarchCandidacy.end(); ++it)
|
||||
{
|
||||
if (it->pid == pid)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::AddCandidacy(DWORD pid, const char * name)
|
||||
{
|
||||
if (IsCandidacy(pid) == false)
|
||||
return false;
|
||||
|
||||
MonarchCandidacy info;
|
||||
|
||||
info.pid = pid;
|
||||
strlcpy(info.name, name, sizeof(info.name));
|
||||
m_vec_MonarchCandidacy.push_back(info);
|
||||
|
||||
char szQuery[256];
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"INSERT INTO monarch_candidacy(pid, date) VALUES(%d, now())", pid);
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::DelCandidacy(const char * name)
|
||||
{
|
||||
itertype(m_vec_MonarchCandidacy) it = m_vec_MonarchCandidacy.begin();
|
||||
for (; it != m_vec_MonarchCandidacy.end(); ++it)
|
||||
{
|
||||
if (0 == strncmp(it->name, name, sizeof(it->name)))
|
||||
{
|
||||
char szQuery[256];
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"DELETE FROM monarch_candidacy WHERE pid=%d ", it->pid);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
m_vec_MonarchCandidacy.erase (it);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
bool CMonarch::IsMonarch(int Empire, DWORD pid)
|
||||
{
|
||||
if (m_MonarchInfo.pid[Empire] != pid)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::AddMoney(int Empire, int64_t Money)
|
||||
{
|
||||
if (m_MonarchInfo.money[Empire] + Money > 2000000000)
|
||||
return true;
|
||||
|
||||
m_MonarchInfo.money[Empire] += Money;
|
||||
|
||||
int64_t Money64 = m_MonarchInfo.money[Empire];
|
||||
|
||||
char szQuery[1024];
|
||||
snprintf(szQuery, sizeof(szQuery), "UPDATE monarch set money=%lld where empire=%d", static_cast<long long>(Money64), Empire);
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::DecMoney(int Empire, int64_t Money)
|
||||
{
|
||||
if (m_MonarchInfo.money[Empire] - Money < 0)
|
||||
return false;
|
||||
m_MonarchInfo.money[Empire] -= Money;
|
||||
|
||||
int64_t Money64 = m_MonarchInfo.money[Empire];
|
||||
|
||||
char szQuery[1024];
|
||||
snprintf(szQuery, sizeof(szQuery), "UPDATE monarch set money=%lld where empire=%d", static_cast<long long>(Money64), Empire);
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::TakeMoney(int Empire, DWORD pid, int64_t Money)
|
||||
{
|
||||
if (IsMonarch(Empire, pid) == false)
|
||||
return false;
|
||||
|
||||
if (m_MonarchInfo.money[Empire] < Money)
|
||||
return false;
|
||||
|
||||
m_MonarchInfo.money[Empire] -= Money;
|
||||
|
||||
char szQuery[1024];
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"UPDATE monarch set money=%lld where empire=%d", static_cast<long long>(m_MonarchInfo.money[Empire]), Empire);
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "[MONARCH] Take money empire(%d) money(%lld)", Empire, static_cast<long long>(m_MonarchInfo.money[Empire]));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::LoadMonarch()
|
||||
{
|
||||
MonarchInfo * p = &m_MonarchInfo;
|
||||
char szQuery[256];
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT empire, pid, name, money, windate FROM monarch a, player%s b where a.pid=b.id", GetTablePostfix());
|
||||
auto pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER);
|
||||
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
MYSQL_ROW row;
|
||||
for (int n = 0; (row = mysql_fetch_row(pMsg->Get()->pSQLResult)) != NULL; ++n)
|
||||
{
|
||||
int idx = 0;
|
||||
int Empire = 0; str_to_number(Empire, row[idx++]);
|
||||
|
||||
str_to_number(p->pid[Empire], row[idx++]);
|
||||
strlcpy(p->name[Empire], row[idx++], sizeof(p->name[Empire]));
|
||||
|
||||
str_to_number(p->money[Empire], row[idx++]);
|
||||
strlcpy(p->date[Empire], row[idx++], sizeof(p->date[Empire]));
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "[LOAD_MONARCH] Empire %d pid %d money %lld windate %s", Empire, p->pid[Empire], static_cast<long long>(p->money[Empire]), p->date[Empire]);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::SetMonarch(const char * name)
|
||||
{
|
||||
MonarchInfo * p = &m_MonarchInfo;
|
||||
char szQuery[256];
|
||||
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT empire, pid, name FROM player a where a.name = '%s'", name);
|
||||
auto pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER);
|
||||
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
MYSQL_ROW row;
|
||||
int Empire = 0;
|
||||
for (int n = 0; (row = mysql_fetch_row(pMsg->Get()->pSQLResult)) != NULL; ++n)
|
||||
{
|
||||
int idx = 0;
|
||||
str_to_number(Empire, row[idx++]);
|
||||
|
||||
str_to_number(p->pid[Empire], row[idx++]);
|
||||
strlcpy(p->name[Empire], row[idx++], sizeof(p->name[Empire]));
|
||||
p->money[Empire] = atoll(row[idx++]);
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "[Set_MONARCH] Empire %d pid %d money %lld windate %s", Empire, p->pid[Empire], static_cast<long long>(p->money[Empire]), p->date[Empire]);
|
||||
}
|
||||
|
||||
//db¿¡ ÀÔ·Â
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"REPLACE INTO monarch (empire, name, windate, money) VALUES(%d, %d, now(), %lld)", Empire, p->pid[Empire], static_cast<long long>(p->money[Empire]));
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery, SQL_PLAYER);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::DelMonarch(int Empire)
|
||||
{
|
||||
char szQuery[256];
|
||||
|
||||
snprintf(szQuery, sizeof(szQuery), "DELETE from monarch where empire=%d", Empire);
|
||||
auto pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER);
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
memset(m_MonarchInfo.name[Empire], 0, sizeof(m_MonarchInfo.name[Empire]));
|
||||
m_MonarchInfo.money[Empire] = 0;
|
||||
m_MonarchInfo.pid[Empire] = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMonarch::DelMonarch(const char * name)
|
||||
{
|
||||
for (int n = 1; n < 4; ++n)
|
||||
{
|
||||
if (0 == strncmp(m_MonarchInfo.name[n], name, sizeof(m_MonarchInfo.name[n])))
|
||||
{
|
||||
char szQuery[256];
|
||||
|
||||
int Empire = n;
|
||||
snprintf(szQuery, sizeof(szQuery), "DELETE from monarch where name=%d", Empire);
|
||||
auto pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER);
|
||||
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
sys_err(" DirectQuery failed(%s)", szQuery);
|
||||
return false;
|
||||
}
|
||||
|
||||
memset(m_MonarchInfo.name[Empire], 0, 32);
|
||||
m_MonarchInfo.money[Empire] = 0;
|
||||
m_MonarchInfo.pid[Empire] = 0;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int CMonarch::GetCandidacyIndex(DWORD pid)
|
||||
{
|
||||
itertype(m_vec_MonarchCandidacy) it = m_vec_MonarchCandidacy.begin();
|
||||
|
||||
for (int n = 0; it != m_vec_MonarchCandidacy.end(); ++it, ++n)
|
||||
{
|
||||
if (it->pid == pid)
|
||||
return n;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
// vim: ts=4 sw=4
|
||||
#ifndef METIN2_MONARCH_H
|
||||
#define METIN2_MONARCH_H
|
||||
|
||||
#include "libthecore/stdafx.h"
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include "common/singleton.h"
|
||||
#include "common/tables.h"
|
||||
|
||||
class CMonarch : public singleton<CMonarch>
|
||||
{
|
||||
public:
|
||||
typedef std::map<DWORD, MonarchElectionInfo*> MAP_MONARCHELECTION;
|
||||
typedef std::vector<MonarchCandidacy> VEC_MONARCHCANDIDACY;
|
||||
|
||||
CMonarch();
|
||||
virtual ~CMonarch();
|
||||
|
||||
bool VoteMonarch(DWORD pid, DWORD selectedpid);
|
||||
void ElectMonarch();
|
||||
|
||||
bool IsCandidacy(DWORD pid);
|
||||
bool AddCandidacy(DWORD pid, const char * name);
|
||||
bool DelCandidacy(const char * name);
|
||||
|
||||
bool LoadMonarch();
|
||||
bool SetMonarch(const char * name);
|
||||
bool DelMonarch(int Empire);
|
||||
bool DelMonarch(const char * name);
|
||||
|
||||
bool IsMonarch(int Empire, DWORD pid);
|
||||
bool AddMoney(int Empire, int64_t Money);
|
||||
bool DecMoney(int Empire, int64_t Money);
|
||||
bool TakeMoney(int Empire, DWORD pid, int64_t Money);
|
||||
|
||||
TMonarchInfo* GetMonarch()
|
||||
{
|
||||
return &m_MonarchInfo;
|
||||
}
|
||||
|
||||
VEC_MONARCHCANDIDACY& GetVecMonarchCandidacy()
|
||||
{
|
||||
return m_vec_MonarchCandidacy;
|
||||
}
|
||||
|
||||
size_t MonarchCandidacySize()
|
||||
{
|
||||
return m_vec_MonarchCandidacy.size();
|
||||
}
|
||||
|
||||
private:
|
||||
int GetCandidacyIndex(DWORD pid);
|
||||
|
||||
MAP_MONARCHELECTION m_map_MonarchElection;
|
||||
VEC_MONARCHCANDIDACY m_vec_MonarchCandidacy;
|
||||
TMonarchInfo m_MonarchInfo;
|
||||
|
||||
MonarchElectionInfo* GetMonarchElection(DWORD pid)
|
||||
{
|
||||
MAP_MONARCHELECTION::iterator it = m_map_MonarchElection.find(pid);
|
||||
|
||||
if (it != m_map_MonarchElection.end())
|
||||
return it->second;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "MoneyLog.h"
|
||||
#include "ClientManager.h"
|
||||
#include "Peer.h"
|
||||
@@ -25,7 +25,7 @@ void CMoneyLog::Save()
|
||||
p.type = bType;
|
||||
p.vnum = it->first;
|
||||
p.gold = it->second;
|
||||
peer->EncodeHeader(HEADER_DG_MONEY_LOG, 0, sizeof(p));
|
||||
peer->EncodeHeader(DG::MONEY_LOG, 0, sizeof(p));
|
||||
peer->Encode(&p, sizeof(p));
|
||||
}
|
||||
m_MoneyLogContainer[bType].clear();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "Peer.h"
|
||||
#include "ItemIDRangeManager.h"
|
||||
|
||||
@@ -67,15 +67,18 @@ void CPeer::SetUserCount(DWORD dwCount)
|
||||
m_dwUserCount = dwCount;
|
||||
}
|
||||
|
||||
bool CPeer::PeekPacket(int & iBytesProceed, BYTE & header, DWORD & dwHandle, DWORD & dwLength, const char ** data)
|
||||
bool CPeer::PeekPacket(int & iBytesProceed, uint16_t & wHeader, DWORD & dwHandle, DWORD & dwLength, const char ** data)
|
||||
{
|
||||
if (GetRecvLength() < iBytesProceed + 9)
|
||||
static constexpr int FRAME_SIZE = sizeof(HEADER); // 10: header(2) + handle(4) + size(4)
|
||||
|
||||
if (GetRecvLength() < iBytesProceed + FRAME_SIZE)
|
||||
return false;
|
||||
|
||||
const char * buf = (const char *) GetRecvBuffer();
|
||||
buf += iBytesProceed;
|
||||
|
||||
header = *(buf++);
|
||||
wHeader = *((uint16_t *) buf);
|
||||
buf += sizeof(uint16_t);
|
||||
|
||||
dwHandle = *((DWORD *) buf);
|
||||
buf += sizeof(DWORD);
|
||||
@@ -83,35 +86,35 @@ bool CPeer::PeekPacket(int & iBytesProceed, BYTE & header, DWORD & dwHandle, DWO
|
||||
dwLength = *((DWORD *) buf);
|
||||
buf += sizeof(DWORD);
|
||||
|
||||
//sys_log(0, "%d header %d handle %u length %u", GetRecvLength(), header, dwHandle, dwLength);
|
||||
if (iBytesProceed + dwLength + 9 > (DWORD) GetRecvLength())
|
||||
//sys_log(0, "%d header %d handle %u length %u", GetRecvLength(), wHeader, dwHandle, dwLength);
|
||||
if (iBytesProceed + dwLength + FRAME_SIZE > (DWORD) GetRecvLength())
|
||||
{
|
||||
sys_log(0, "PeekPacket: not enough buffer size: len %u, recv %d",
|
||||
9+dwLength, GetRecvLength()-iBytesProceed);
|
||||
sys_log(0, "PeekPacket: not enough buffer size: len %u, recv %d",
|
||||
FRAME_SIZE+dwLength, GetRecvLength()-iBytesProceed);
|
||||
return false;
|
||||
}
|
||||
|
||||
*data = buf;
|
||||
iBytesProceed += dwLength + 9;
|
||||
iBytesProceed += dwLength + FRAME_SIZE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void CPeer::EncodeHeader(BYTE header, DWORD dwHandle, DWORD dwSize)
|
||||
void CPeer::EncodeHeader(uint16_t wHeader, DWORD dwHandle, DWORD dwSize)
|
||||
{
|
||||
HEADER h;
|
||||
|
||||
sys_log(1, "EncodeHeader %u handle %u size %u", header, dwHandle, dwSize);
|
||||
sys_log(1, "EncodeHeader %u handle %u size %u", wHeader, dwHandle, dwSize);
|
||||
|
||||
h.bHeader = header;
|
||||
h.wHeader = wHeader;
|
||||
h.dwHandle = dwHandle;
|
||||
h.dwSize = dwSize;
|
||||
|
||||
Encode(&h, sizeof(HEADER));
|
||||
}
|
||||
|
||||
void CPeer::EncodeReturn(BYTE header, DWORD dwHandle)
|
||||
void CPeer::EncodeReturn(uint16_t wHeader, DWORD dwHandle)
|
||||
{
|
||||
EncodeHeader(header, dwHandle, 0);
|
||||
EncodeHeader(wHeader, dwHandle, 0);
|
||||
}
|
||||
|
||||
int CPeer::Send()
|
||||
@@ -136,7 +139,7 @@ void CPeer::SendSpareItemIDRange()
|
||||
{
|
||||
if (m_itemSpareRange.dwMin == 0 || m_itemSpareRange.dwMax == 0 || m_itemSpareRange.dwUsableItemIDMin == 0)
|
||||
{
|
||||
EncodeHeader(HEADER_DG_ACK_SPARE_ITEM_ID_RANGE, 0, sizeof(TItemIDRangeTable));
|
||||
EncodeHeader(DG::ACK_SPARE_ITEM_ID_RANGE, 0, sizeof(TItemIDRangeTable));
|
||||
Encode(&m_itemSpareRange, sizeof(TItemIDRangeTable));
|
||||
}
|
||||
else
|
||||
@@ -149,7 +152,7 @@ void CPeer::SendSpareItemIDRange()
|
||||
m_itemSpareRange.dwMin = m_itemSpareRange.dwMax = m_itemSpareRange.dwUsableItemIDMin = 0;
|
||||
}
|
||||
|
||||
EncodeHeader(HEADER_DG_ACK_SPARE_ITEM_ID_RANGE, 0, sizeof(TItemIDRangeTable));
|
||||
EncodeHeader(DG::ACK_SPARE_ITEM_ID_RANGE, 0, sizeof(TItemIDRangeTable));
|
||||
Encode(&m_itemSpareRange, sizeof(TItemIDRangeTable));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ class CPeer : public CPeerBase
|
||||
public:
|
||||
#pragma pack(1)
|
||||
typedef struct _header
|
||||
{
|
||||
BYTE bHeader;
|
||||
{
|
||||
uint16_t wHeader;
|
||||
DWORD dwHandle;
|
||||
DWORD dwSize;
|
||||
} HEADER;
|
||||
@@ -29,9 +29,9 @@ class CPeer : public CPeerBase
|
||||
CPeer();
|
||||
virtual ~CPeer();
|
||||
|
||||
void EncodeHeader(BYTE header, DWORD dwHandle, DWORD dwSize);
|
||||
bool PeekPacket(int & iBytesProceed, BYTE & header, DWORD & dwHandle, DWORD & dwLength, const char ** data);
|
||||
void EncodeReturn(BYTE header, DWORD dwHandle);
|
||||
void EncodeHeader(uint16_t wHeader, DWORD dwHandle, DWORD dwSize);
|
||||
bool PeekPacket(int & iBytesProceed, uint16_t & wHeader, DWORD & dwHandle, DWORD & dwLength, const char ** data);
|
||||
void EncodeReturn(uint16_t wHeader, DWORD dwHandle);
|
||||
|
||||
void ProcessInput();
|
||||
int Send();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "PeerBase.h"
|
||||
|
||||
CPeerBase::CPeerBase() : m_fd(INVALID_SOCKET), m_BytesRemain(0), m_outBuffer(NULL), m_inBuffer(NULL)
|
||||
CPeerBase::CPeerBase() : m_fd(INVALID_SOCKET), m_BytesRemain(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -24,18 +24,8 @@ void CPeerBase::Disconnect()
|
||||
void CPeerBase::Destroy()
|
||||
{
|
||||
Disconnect();
|
||||
|
||||
if (m_outBuffer)
|
||||
{
|
||||
buffer_delete(m_outBuffer);
|
||||
m_outBuffer = NULL;
|
||||
}
|
||||
|
||||
if (m_inBuffer)
|
||||
{
|
||||
buffer_delete(m_inBuffer);
|
||||
m_inBuffer = NULL;
|
||||
}
|
||||
m_outBuffer.Clear();
|
||||
m_inBuffer.Clear();
|
||||
}
|
||||
|
||||
bool CPeerBase::Accept(socket_t fd_accept)
|
||||
@@ -53,14 +43,8 @@ bool CPeerBase::Accept(socket_t fd_accept)
|
||||
socket_rcvbuf(m_fd, 233016);
|
||||
|
||||
strlcpy(m_host, inet_ntoa(peer.sin_addr), sizeof(m_host));
|
||||
m_outBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE);
|
||||
m_inBuffer = buffer_new(MAX_INPUT_LEN);
|
||||
|
||||
if (!m_outBuffer || !m_inBuffer)
|
||||
{
|
||||
Destroy();
|
||||
return false;
|
||||
}
|
||||
m_outBuffer.Reserve(DEFAULT_PACKET_BUFFER_SIZE);
|
||||
m_inBuffer.Reserve(MAX_INPUT_LEN);
|
||||
|
||||
fdwatch_add_fd(m_fdWatcher, m_fd, this, FDW_READ, false);
|
||||
|
||||
@@ -76,13 +60,7 @@ bool CPeerBase::Connect(const char* host, WORD port)
|
||||
if ((m_fd = socket_connect(host, port)) == INVALID_SOCKET)
|
||||
return false;
|
||||
|
||||
m_outBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE);
|
||||
|
||||
if (!m_outBuffer)
|
||||
{
|
||||
Destroy();
|
||||
return false;
|
||||
}
|
||||
m_outBuffer.Reserve(DEFAULT_PACKET_BUFFER_SIZE);
|
||||
|
||||
fdwatch_add_fd(m_fdWatcher, m_fd, this, FDW_READ, false);
|
||||
|
||||
@@ -97,63 +75,33 @@ void CPeerBase::Close()
|
||||
|
||||
void CPeerBase::EncodeBYTE(uint8_t b)
|
||||
{
|
||||
if (!m_outBuffer)
|
||||
{
|
||||
sys_err("Not ready to write");
|
||||
return;
|
||||
}
|
||||
|
||||
buffer_write(m_outBuffer, &b, sizeof(uint8_t));
|
||||
m_outBuffer.Write(&b, sizeof(uint8_t));
|
||||
fdwatch_add_fd(m_fdWatcher, m_fd, this, FDW_WRITE, true);
|
||||
}
|
||||
|
||||
void CPeerBase::EncodeWORD(uint16_t w)
|
||||
{
|
||||
if (!m_outBuffer)
|
||||
{
|
||||
sys_err("Not ready to write");
|
||||
return;
|
||||
}
|
||||
|
||||
buffer_write(m_outBuffer, &w, sizeof(uint16_t));
|
||||
m_outBuffer.Write(&w, sizeof(uint16_t));
|
||||
fdwatch_add_fd(m_fdWatcher, m_fd, this, FDW_WRITE, true);
|
||||
}
|
||||
|
||||
void CPeerBase::EncodeDWORD(uint32_t dw)
|
||||
{
|
||||
if (!m_outBuffer)
|
||||
{
|
||||
sys_err("Not ready to write");
|
||||
return;
|
||||
}
|
||||
|
||||
buffer_write(m_outBuffer, &dw, sizeof(uint32_t));
|
||||
m_outBuffer.Write(&dw, sizeof(uint32_t));
|
||||
fdwatch_add_fd(m_fdWatcher, m_fd, this, FDW_WRITE, true);
|
||||
}
|
||||
|
||||
void CPeerBase::Encode(const void* data, uint32_t size)
|
||||
{
|
||||
if (!m_outBuffer)
|
||||
{
|
||||
sys_err("Not ready to write");
|
||||
return;
|
||||
}
|
||||
|
||||
buffer_write(m_outBuffer, data, size);
|
||||
m_outBuffer.Write(data, size);
|
||||
fdwatch_add_fd(m_fdWatcher, m_fd, this, FDW_WRITE, true);
|
||||
}
|
||||
|
||||
int CPeerBase::Recv()
|
||||
{
|
||||
if (!m_inBuffer)
|
||||
{
|
||||
sys_err("input buffer nil");
|
||||
return -1;
|
||||
}
|
||||
|
||||
buffer_adjust_size(m_inBuffer, MAX_INPUT_LEN >> 2);
|
||||
int bytes_to_read = buffer_has_space(m_inBuffer);
|
||||
ssize_t bytes_read = socket_read(m_fd, (char *) buffer_write_peek(m_inBuffer), bytes_to_read);
|
||||
m_inBuffer.EnsureWritable(MAX_INPUT_LEN >> 2);
|
||||
int bytes_to_read = static_cast<int>(m_inBuffer.WritableBytes());
|
||||
ssize_t bytes_read = socket_read(m_fd, (char *) m_inBuffer.WritePtr(), bytes_to_read);
|
||||
|
||||
if (bytes_read < 0)
|
||||
{
|
||||
@@ -163,15 +111,15 @@ int CPeerBase::Recv()
|
||||
else if (bytes_read == 0)
|
||||
return 0;
|
||||
|
||||
buffer_write_proceed(m_inBuffer, bytes_read);
|
||||
m_BytesRemain = buffer_size(m_inBuffer);
|
||||
m_inBuffer.CommitWrite(bytes_read);
|
||||
m_BytesRemain = static_cast<int>(m_inBuffer.ReadableBytes());
|
||||
return 1;
|
||||
}
|
||||
|
||||
void CPeerBase::RecvEnd(int proceed_bytes)
|
||||
{
|
||||
buffer_read_proceed(m_inBuffer, proceed_bytes);
|
||||
m_BytesRemain = buffer_size(m_inBuffer);
|
||||
m_inBuffer.Discard(proceed_bytes);
|
||||
m_BytesRemain = static_cast<int>(m_inBuffer.ReadableBytes());
|
||||
}
|
||||
|
||||
int CPeerBase::GetRecvLength()
|
||||
@@ -181,32 +129,32 @@ int CPeerBase::GetRecvLength()
|
||||
|
||||
const void * CPeerBase::GetRecvBuffer()
|
||||
{
|
||||
return buffer_read_peek(m_inBuffer);
|
||||
return m_inBuffer.ReadPtr();
|
||||
}
|
||||
|
||||
int CPeerBase::GetSendLength()
|
||||
{
|
||||
return buffer_size(m_outBuffer);
|
||||
return static_cast<int>(m_outBuffer.ReadableBytes());
|
||||
}
|
||||
|
||||
int CPeerBase::Send()
|
||||
{
|
||||
if (buffer_size(m_outBuffer) <= 0)
|
||||
if (m_outBuffer.ReadableBytes() <= 0)
|
||||
return 0;
|
||||
|
||||
int iBufferLeft = fdwatch_get_buffer_size(m_fdWatcher, m_fd);
|
||||
int iBytesToWrite = MIN(iBufferLeft, buffer_size(m_outBuffer));
|
||||
int iBytesToWrite = MIN(iBufferLeft, static_cast<int>(m_outBuffer.ReadableBytes()));
|
||||
|
||||
if (iBytesToWrite == 0)
|
||||
return 0;
|
||||
|
||||
int result = socket_write(m_fd, (const char *) buffer_read_peek(m_outBuffer), iBytesToWrite);
|
||||
int result = socket_write(m_fd, (const char *) m_outBuffer.ReadPtr(), iBytesToWrite);
|
||||
|
||||
if (result == 0)
|
||||
{
|
||||
buffer_read_proceed(m_outBuffer, iBytesToWrite);
|
||||
m_outBuffer.Discard(iBytesToWrite);
|
||||
|
||||
if (buffer_size(m_outBuffer) != 0)
|
||||
if (m_outBuffer.ReadableBytes() != 0)
|
||||
fdwatch_add_fd(m_fdWatcher, m_fd, this, FDW_WRITE, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
// vim: ts=8 sw=4
|
||||
#ifndef __INC_PEERBASE_H__
|
||||
#define __INC_PEERBASE_H__
|
||||
#pragma once
|
||||
|
||||
#include "NetBase.h"
|
||||
#include "libthecore/ring_buffer.h"
|
||||
|
||||
class CPeerBase : public CNetBase
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
{
|
||||
MAX_HOST_LENGTH = 30,
|
||||
MAX_INPUT_LEN = 1024 * 1024 * 2,
|
||||
DEFAULT_PACKET_BUFFER_SIZE = 1024 * 1024 * 2
|
||||
@@ -54,8 +53,6 @@ class CPeerBase : public CNetBase
|
||||
|
||||
private:
|
||||
int m_BytesRemain;
|
||||
LPBUFFER m_outBuffer;
|
||||
LPBUFFER m_inBuffer;
|
||||
RingBuffer m_outBuffer;
|
||||
RingBuffer m_inBuffer;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "PrivManager.h"
|
||||
#include "ClientManager.h"
|
||||
|
||||
@@ -194,7 +194,7 @@ struct FSendChangeGuildPriv
|
||||
|
||||
void operator() (CPeer* peer)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_CHANGE_GUILD_PRIV, 0, sizeof(TPacketDGChangeGuildPriv));
|
||||
peer->EncodeHeader(DG::CHANGE_GUILD_PRIV, 0, sizeof(TPacketDGChangeGuildPriv));
|
||||
peer->Encode(&p, sizeof(TPacketDGChangeGuildPriv));
|
||||
p.bLog = 0;
|
||||
}
|
||||
@@ -217,7 +217,7 @@ struct FSendChangeEmpirePriv
|
||||
|
||||
void operator ()(CPeer* peer)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_CHANGE_EMPIRE_PRIV, 0, sizeof(TPacketDGChangeEmpirePriv));
|
||||
peer->EncodeHeader(DG::CHANGE_EMPIRE_PRIV, 0, sizeof(TPacketDGChangeEmpirePriv));
|
||||
peer->Encode(&p, sizeof(TPacketDGChangeEmpirePriv));
|
||||
p.bLog = 0;
|
||||
}
|
||||
@@ -236,7 +236,7 @@ struct FSendChangeCharPriv
|
||||
}
|
||||
void operator()(CPeer* peer)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_CHANGE_CHARACTER_PRIV, 0, sizeof(TPacketDGChangeCharacterPriv));
|
||||
peer->EncodeHeader(DG::CHANGE_CHARACTER_PRIV, 0, sizeof(TPacketDGChangeCharacterPriv));
|
||||
peer->Encode(&p, sizeof(TPacketDGChangeCharacterPriv));
|
||||
p.bLog = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user