WIP: rewrite the network stack to use libevent

This commit is contained in:
2022-03-09 21:30:51 +02:00
parent d2f43a8620
commit 64596d344c
43 changed files with 415 additions and 2149 deletions

View File

@ -2047,7 +2047,7 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu
}
else
{
// <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> <20>ǰ<EFBFBD> <20><> <20><EFBFBD><EFBFA9><EFBFBD>ҋ<EFBFBD>
// <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> <20>ǰ<EFBFBD> <20><> <20><EFBFBD><EFBFA9><EFBFBD><EFBFBD>??
PointChange(POINT_SP, -GetSP());
dam -= iSP * 100 / MAX(GetPoint(POINT_MANASHIELD), 1);
}
@ -3132,7 +3132,7 @@ class CFuncShoot
break;
}
m_bSucceed = TRUE;
m_bSucceed = true;
}
};

View File

@ -2282,7 +2282,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
{
PointChange(POINT_HP, item->GetValue(0) * (100 + GetPoint(POINT_POTION_BONUS)) / 100);
EffectPacket(SE_HPUP_RED);
used = TRUE;
used = true;
}
}
@ -2292,7 +2292,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
{
PointChange(POINT_SP, item->GetValue(1) * (100 + GetPoint(POINT_POTION_BONUS)) / 100);
EffectPacket(SE_SPUP_BLUE);
used = TRUE;
used = true;
}
}
@ -2302,7 +2302,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
{
PointChange(POINT_HP, item->GetValue(3) * GetMaxHP() / 100);
EffectPacket(SE_HPUP_RED);
used = TRUE;
used = true;
}
}
@ -2312,7 +2312,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
{
PointChange(POINT_SP, item->GetValue(4) * GetMaxSP() / 100);
EffectPacket(SE_SPUP_BLUE);
used = TRUE;
used = true;
}
}
@ -4133,7 +4133,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
{
PointChange(POINT_HP, item->GetValue(0) * (100 + GetPoint(POINT_POTION_BONUS)) / 100);
EffectPacket(SE_HPUP_RED);
used = TRUE;
used = true;
}
}
@ -4143,7 +4143,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
{
PointChange(POINT_SP, item->GetValue(1) * (100 + GetPoint(POINT_POTION_BONUS)) / 100);
EffectPacket(SE_SPUP_BLUE);
used = TRUE;
used = true;
}
}
@ -4153,7 +4153,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
{
PointChange(POINT_HP, item->GetValue(3) * GetMaxHP() / 100);
EffectPacket(SE_HPUP_RED);
used = TRUE;
used = true;
}
}
@ -4163,7 +4163,7 @@ bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)
{
PointChange(POINT_SP, item->GetValue(4) * GetMaxSP() / 100);
EffectPacket(SE_SPUP_BLUE);
used = TRUE;
used = true;
}
}

View File

@ -61,7 +61,6 @@ void DESC::Initialize()
memset( &m_accountTable, 0, sizeof(m_accountTable) );
memset( &m_SockAddr, 0, sizeof(m_SockAddr) );
memset( &m_UDPSockAddr, 0, sizeof(m_UDPSockAddr) );
m_pLogFile = NULL;
@ -582,19 +581,6 @@ void DESC::BindAccountTable(TAccountTable * pAccountTable)
DESC_MANAGER::instance().ConnectAccount(m_accountTable.login, this);
}
void DESC::UDPGrant(const struct sockaddr_in & c_rSockAddr)
{
m_UDPSockAddr = c_rSockAddr;
TPacketGCBindUDP pack;
pack.header = HEADER_GC_BINDUDP;
pack.addr = m_UDPSockAddr.sin_addr.s_addr;
pack.port = m_UDPSockAddr.sin_port;
Packet(&pack, sizeof(TPacketGCBindUDP));
}
void DESC::Log(const char * format, ...)
{
if (!m_pLogFile)

View File

@ -111,9 +111,6 @@ class DESC
const struct sockaddr_in & GetAddr() { return m_SockAddr; }
void UDPGrant(const struct sockaddr_in & c_rSockAddr);
const struct sockaddr_in & GetUDPAddr() { return m_UDPSockAddr; }
void Log(const char * format, ...);
// <20>ڵ彦<DAB5><E5BDA6>ũ (<28>ð<EFBFBD> <20><><EFBFBD><EFBFBD>ȭ)
@ -222,7 +219,6 @@ class DESC
TAccountTable m_accountTable;
struct sockaddr_in m_SockAddr;
struct sockaddr_in m_UDPSockAddr;
FILE * m_pLogFile;
std::string m_stRelayName;

View File

@ -41,7 +41,7 @@ int IsValidIP(struct valid_ip* ip_table, const char *host)
snprintf(ip_addr, sizeof(ip_addr), "%s.%d", (ip_table + i)->ip, (ip_table + i)->network + j);
if (!strcmp(ip_addr, host))
return TRUE;
return true;
if (!j)
break;
@ -49,7 +49,7 @@ int IsValidIP(struct valid_ip* ip_table, const char *host)
while (j--);
}
return FALSE;
return false;
}
DESC_MANAGER::DESC_MANAGER() : m_bDestroyed(false)

View File

@ -38,8 +38,8 @@ LPEVENT event_create_ex(TEVENTFUNC func, event_info_data* info, long when)
new_event->func = func;
new_event->info = info;
new_event->q_el = cxx_q.Enqueue(new_event, when, thecore_heart->pulse);
new_event->is_processing = FALSE;
new_event->is_force_to_end = FALSE;
new_event->is_processing = false;
new_event->is_force_to_end = false;
return (new_event);
}
@ -60,10 +60,10 @@ void event_cancel(LPEVENT * ppevent)
if (event->is_processing)
{
event->is_force_to_end = TRUE;
event->is_force_to_end = true;
if (event->q_el)
event->q_el->bCancel = TRUE;
event->q_el->bCancel = true;
*ppevent = NULL;
return;
@ -82,7 +82,7 @@ void event_cancel(LPEVENT * ppevent)
return;
}
event->q_el->bCancel = TRUE;
event->q_el->bCancel = true;
*ppevent = NULL;
}
@ -92,7 +92,7 @@ void event_reset_time(LPEVENT event, long when)
if (!event->is_processing)
{
if (event->q_el)
event->q_el->bCancel = TRUE;
event->q_el->bCancel = true;
event->q_el = cxx_q.Enqueue(event, when, thecore_heart->pulse);
}
@ -127,7 +127,7 @@ int event_process(int pulse)
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 0 <20>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> event <20><> <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20>޸<EFBFBD><DEB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʵ<EFBFBD><CAB5><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
*/
the_event->is_processing = TRUE;
the_event->is_processing = true;
if (!the_event->info)
{
@ -146,7 +146,7 @@ int event_process(int pulse)
else
{
the_event->q_el = cxx_q.Enqueue(the_event, new_time, pulse);
the_event->is_processing = FALSE;
the_event->is_processing = false;
}
}

View File

@ -39,7 +39,7 @@ TQueueElement * CEventQueue::Enqueue(LPEVENT pvData, int duration, int pulse)
pElem->pvData = pvData;
pElem->iStartTime = pulse;
pElem->iKey = duration + pulse;
pElem->bCancel = FALSE;
pElem->bCancel = false;
m_pq_queue.push(pElem);
return pElem;

View File

@ -116,7 +116,7 @@ template <typename T>
bool CGroupNode::GetValue(size_t i, const std::string & c_rstrColKey, T& tValue) const
{
if (i > m_map_rows.size())
return FALSE;
return false;
TMapRow::const_iterator row_it = m_map_rows.begin();
std::advance(row_it, i);
@ -124,13 +124,13 @@ bool CGroupNode::GetValue(size_t i, const std::string & c_rstrColKey, T& tValue)
itertype(m_map_columnNameToIndex) col_idx_it = m_map_columnNameToIndex.find(c_rstrColKey);
if (m_map_columnNameToIndex.end() == col_idx_it)
{
return FALSE;
return false;
}
int index = col_idx_it->second;
if (row_it->second.GetSize() <= index)
{
return FALSE;
return false;
}
return row_it->second.GetValue(index, tValue);
@ -142,18 +142,18 @@ bool CGroupNode::GetValue(const std::string & c_rstrRowKey, const std::string &
TMapRow::const_iterator row_it = m_map_rows.find(c_rstrRowKey);
if (m_map_rows.end() == row_it)
{
return FALSE;
return false;
}
itertype(m_map_columnNameToIndex) col_idx_it = m_map_columnNameToIndex.find(c_rstrColKey);
if (m_map_columnNameToIndex.end() == col_idx_it)
{
return FALSE;
return false;
}
int index = col_idx_it->second;
if (row_it->second.GetSize() <= index)
{
return FALSE;
return false;
}
return row_it->second.GetValue(index, tValue);
@ -165,12 +165,12 @@ bool CGroupNode::GetValue(const std::string & c_rstrRowKey, int index, T& tValue
TMapRow::const_iterator row_it = m_map_rows.find(c_rstrRowKey);
if (m_map_rows.end() == row_it)
{
return FALSE;
return false;
}
if (row_it->second.GetSize() <= index)
{
return FALSE;
return false;
}
return row_it->second.GetValue(index, tValue);
}

View File

@ -11,7 +11,6 @@ enum
INPROC_MAIN,
INPROC_DEAD,
INPROC_DB,
INPROC_UDP,
INPROC_P2P,
INPROC_AUTH,
INPROC_TEEN,
@ -297,27 +296,6 @@ protected:
DWORD m_dwHandle;
};
class CInputUDP : public CInputProcessor
{
public:
CInputUDP();
virtual bool Process(LPDESC d, const void * c_pvOrig, int iBytes, int & r_iBytesProceed);
virtual BYTE GetType() { return INPROC_UDP; }
void SetSockAddr(struct sockaddr_in & rSockAddr) { m_SockAddr = rSockAddr; };
protected:
virtual int Analyze(LPDESC d, BYTE bHeader, const char * c_pData);
protected:
void Handshake(LPDESC lpDesc, const char * c_pData);
void StateChecker(const char * c_pData);
protected:
struct sockaddr_in m_SockAddr;
CPacketInfoUDP m_packetInfoUDP;
};
class CInputP2P : public CInputProcessor
{
public:

View File

@ -1,194 +0,0 @@
#include "stdafx.h"
#include "constants.h"
#include "config.h"
#include "input.h"
#include "desc.h"
#include "desc_manager.h"
#include "item_manager.h"
#include "char_manager.h"
#include "protocol.h"
extern socket_t udp_socket;
#define HEADER_CG_STATE_CHECKER 1
#pragma pack(1)
typedef unsigned long ServerStateChecker_Key;
typedef unsigned long ServerStateChecker_Index;
typedef unsigned char ServerStateChecker_State;
struct ServerStateChecker_RequestPacket
{
BYTE header;
ServerStateChecker_Key key;
ServerStateChecker_Index index;
};
struct ServerStateChecker_ResponsePacket
{
BYTE header;
ServerStateChecker_Key key;
ServerStateChecker_Index index;
ServerStateChecker_State state;
};
#pragma pack()
///---------------------------------------------------------
CPacketInfoUDP::CPacketInfoUDP()
{
Set(1, sizeof(ServerStateChecker_RequestPacket), "ServerStateRequest", false);
}
CPacketInfoUDP::~CPacketInfoUDP()
{
Log("udp_packet_info.txt");
}
CInputUDP::CInputUDP()
{
memset( &m_SockAddr, 0, sizeof(m_SockAddr) );
BindPacketInfo(&m_packetInfoUDP);
}
void CInputUDP::Handshake(LPDESC pDesc, const char * c_pData)
{
TPacketCGHandshake * pInfo = (TPacketCGHandshake *) c_pData;
if (pDesc->GetHandshake() == pInfo->dwHandshake)
{
sys_log(0, "UDP: Grant %s:%d", inet_ntoa(m_SockAddr.sin_addr), m_SockAddr.sin_port);
pDesc->UDPGrant(m_SockAddr);
return;
}
else
sys_log(0, "UDP: Handshake differs %s", pDesc->GetHostName());
}
void CInputUDP::StateChecker(const char * c_pData)
{
// NOTE : TCP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲٸ鼭 <20><><EFBFBD><EFBFBD> X
/*
struct ServerStateChecker_RequestPacket * p = (struct ServerStateChecker_RequestPacket *) c_pData;
ServerStateChecker_ResponsePacket rp;
int iTotal;
int * paiEmpireUserCount;
int iLocal;
DESC_MANAGER::instance().GetUserCount(iTotal, &paiEmpireUserCount, iLocal);
rp.header = 1;
rp.key = p->key;
rp.index = p->index;
if (g_bNoMoreClient)
rp.state = 0;
else
rp.state = iTotal > g_iFullUserCount ? 3 : iTotal > g_iBusyUserCount ? 2 : 1;
if (sendto(udp_socket, (const char*)&rp, sizeof(rp), 0, (const struct sockaddr *) &m_SockAddr, sizeof(m_SockAddr)) < 0)
{
sys_err("cannot sendto datagram socket : %s, %d", inet_ntoa(m_SockAddr.sin_addr), inet_ntoa(m_SockAddr.sin_addr));
return;
}
*/
}
int CInputUDP::Analyze(LPDESC pDesc, BYTE bHeader, const char * c_pData)
{
switch (bHeader)
{
/*
case HEADER_CG_HANDSHAKE:
Handshake(pDesc, c_pData);
break;
case HEADER_CG_STATE_CHECKER:
StateChecker(c_pData);
break;
*/
default:
sys_err("unknown UDP header %u", bHeader);
break;
}
return 0;
}
bool CInputUDP::Process(LPDESC pDesc, const void * c_pvOrig, int iBytes, int & r_iBytesProceed)
{
/*
const char * c_pData = static_cast<const char *> (c_pvOrig);
BYTE bLastHeader = 0;
int iLastPacketLen = 0;
int iPacketLen;
if (!m_pPacketInfo)
{
sys_err("No packet info has been binded to");
return true;
}
for (m_iBufferLeft = iBytes; m_iBufferLeft > 0;)
{
if (m_iBufferLeft < 5)
return true;
BYTE bHeader = (BYTE) *(c_pData);
const char * c_pszName;
if (!m_pPacketInfo->Get(bHeader, &iPacketLen, &c_pszName))
{
sys_err("UNKNOWN HEADER: %d, LAST HEADER: %d(%d), REMAIN BYTES: %d",
bHeader, bLastHeader, iLastPacketLen, m_iBufferLeft);
//printdata((BYTE *) c_pvOrig, iBytes);
return true;
}
//DWORD dwHandshake = *(DWORD *) (c_pData + 1);
//pDesc = DESC_MANAGER::instance().FindByHandshake(dwHandshake);
//if (!pDesc)
//{
//sys_err("No desc by handshake %u", dwHandshake);
//return true;
//}
//if (m_SockAddr.sin_addr.s_addr != pDesc->GetAddr().sin_addr.s_addr)
//{
//sys_err("Hostname Mismatch! %s != %s", inet_ntoa(m_SockAddr.sin_addr), pDesc->GetHostName());
//return true;
//}
if (m_iBufferLeft < iPacketLen)
return true;
int iExtraPacketSize = Analyze(pDesc, bHeader, c_pData);
if (iExtraPacketSize < 0)
return true;
iPacketLen += iExtraPacketSize;
c_pData += iPacketLen;
m_iBufferLeft -= iPacketLen;
r_iBytesProceed += iPacketLen;
iLastPacketLen = iPacketLen;
bLastHeader = bHeader;
//if (GetType() != pDesc->GetInputProcessor()->GetType())
//return false;
}
*/
return true;
}

View File

@ -418,7 +418,7 @@ static void __LocaleService_Init_JAPAN()
g_setQuestObjectDir.insert("locale/japan/quest/object");
g_stLocaleFilename = "locale/japan/sjis_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_sjis;
is_twobyte = is_twobyte_sjis;
@ -436,7 +436,7 @@ static void __LocaleService_Init_English()
g_setQuestObjectDir.insert("locale/english/quest/object");
g_stLocaleFilename = "locale/english/eng_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
}
@ -451,7 +451,7 @@ static void __LocaleService_Init_HongKong()
g_setQuestObjectDir.insert("locale/hongkong/quest/object");
g_stLocaleFilename = "locale/hongkong/big5_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_big5;
is_twobyte = is_twobyte_big5;
@ -468,7 +468,7 @@ static void __LocaleService_Init_NewCIBN()
g_setQuestObjectDir.insert("locale/newcibn/quest/object");
g_stLocaleFilename = "locale/newcibn/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_gb2312;
is_twobyte = is_twobyte_gb2312;
@ -486,7 +486,7 @@ static void __LocaleService_Init_Germany()
g_setQuestObjectDir.insert("locale/germany/quest/object");
g_stLocaleFilename = "locale/germany/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -503,7 +503,7 @@ static void __LocaleService_Init_Korea()
g_setQuestObjectDir.clear();
g_setQuestObjectDir.insert("locale/korea/quest/object");
g_iUseLocale = TRUE;
g_iUseLocale = true;
exp_table = exp_table_euckr;
}
@ -518,7 +518,7 @@ static void __LocaleService_Init_France()
g_setQuestObjectDir.insert("locale/france/quest/object");
g_stLocaleFilename = "locale/france/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -536,7 +536,7 @@ static void __LocaleService_Init_Italy()
g_setQuestObjectDir.insert("locale/italy/quest/object");
g_stLocaleFilename = "locale/italy/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -554,7 +554,7 @@ static void __LocaleService_Init_spain()
g_setQuestObjectDir.insert("locale/spain/quest/object");
g_stLocaleFilename = "locale/spain/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -572,7 +572,7 @@ static void __LocaleService_Init_greek()
g_setQuestObjectDir.insert("locale/greek/quest/object");
g_stLocaleFilename = "locale/greek/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -590,7 +590,7 @@ static void __LocaleService_Init_UK()
g_setQuestObjectDir.insert("locale/uk/quest/object");
g_stLocaleFilename = "locale/uk/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -608,7 +608,7 @@ static void __LocaleService_Init_Turkey()
g_setQuestObjectDir.insert("locale/turkey/quest/object");
g_stLocaleFilename = "locale/turkey/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -626,7 +626,7 @@ static void __LocaleService_Init_Poland()
g_setQuestObjectDir.insert("locale/poland/quest/object");
g_stLocaleFilename = "locale/poland/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -644,7 +644,7 @@ static void __LocaleService_Init_Portugal()
g_setQuestObjectDir.insert("locale/portugal/quest/object");
g_stLocaleFilename = "locale/portugal/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -664,7 +664,7 @@ static void __LocaleService_Init_Canada()
check_name = check_name_alphabet;
g_iUseLocale = TRUE;
g_iUseLocale = true;
}
static void __LocaleService_Init_Brazil()
@ -680,7 +680,7 @@ static void __LocaleService_Init_Brazil()
check_name = check_name_alphabet;
g_iUseLocale = TRUE;
g_iUseLocale = true;
}
static void __LocaleService_Init_YMIR()
@ -710,7 +710,7 @@ static void __LocaleService_Init_Russia()
g_setQuestObjectDir.insert("locale/russia/quest/object");
g_stLocaleFilename = "locale/russia/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -728,7 +728,7 @@ static void __LocaleService_Init_Denmark()
g_setQuestObjectDir.insert("locale/denmark/quest/object");
g_stLocaleFilename = "locale/denmark/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -746,7 +746,7 @@ static void __LocaleService_Init_Bulgaria()
g_setQuestObjectDir.insert("locale/bulgaria/quest/object");
g_stLocaleFilename = "locale/bulgaria/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -764,7 +764,7 @@ static void __LocaleService_Init_Croatia()
g_setQuestObjectDir.insert("locale/croatia/quest/object");
g_stLocaleFilename = "locale/croatia/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -782,7 +782,7 @@ static void __LocaleService_Init_Mexico()
g_setQuestObjectDir.insert("locale/mexico/quest/object");
g_stLocaleFilename = "locale/mexico/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -800,7 +800,7 @@ static void __LocaleService_Init_Arabia()
g_setQuestObjectDir.insert("locale/arabia/quest/object");
g_stLocaleFilename = "locale/arabia/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -818,7 +818,7 @@ static void __LocaleService_Init_Czech()
g_setQuestObjectDir.insert("locale/czech/quest/object");
g_stLocaleFilename = "locale/czech/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -836,7 +836,7 @@ static void __LocaleService_Init_Hungary()
g_setQuestObjectDir.insert("locale/hungary/quest/object");
g_stLocaleFilename = "locale/hungary/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -854,7 +854,7 @@ static void __LocaleService_Init_Romania()
g_setQuestObjectDir.insert("locale/romania/quest/object");
g_stLocaleFilename = "locale/romania/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -872,7 +872,7 @@ static void __LocaleService_Init_Netherlands()
g_setQuestObjectDir.insert("locale/netherlands/quest/object");
g_stLocaleFilename = "locale/netherlands/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
@ -892,7 +892,7 @@ static void __LocaleService_Init_Singapore()
check_name = check_name_alphabet;
g_iUseLocale = TRUE;
g_iUseLocale = true;
//exp_table = exp_table_newcibn; 2013 09 11 CYH europe <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>.
}
@ -909,7 +909,7 @@ static void __LocaleService_Init_Vietnam()
check_name = check_name_alphabet;
g_iUseLocale = TRUE;
g_iUseLocale = true;
exp_table = exp_table_newcibn;
}
@ -927,7 +927,7 @@ static void __LocaleService_Init_Thailand()
check_name = check_name_alphabet;
g_iUseLocale = TRUE;
g_iUseLocale = true;
}
static void __LocaleService_Init_USA()
@ -941,7 +941,7 @@ static void __LocaleService_Init_USA()
g_setQuestObjectDir.insert("locale/usa/quest/object");
g_stLocaleFilename = "locale/usa/locale_string.txt";
g_iUseLocale = TRUE;
g_iUseLocale = true;
check_name = check_name_alphabet;
}
@ -959,7 +959,7 @@ static void __LocaleService_Init_WE_Korea()
g_setQuestObjectDir.clear();
g_setQuestObjectDir.insert(g_stQuestDir + "/object");
g_iUseLocale = TRUE;
g_iUseLocale = true;
PK_PROTECT_LEVEL = 15;
}
@ -978,7 +978,7 @@ static void __LocaleService_Init_Taiwan()
check_name = check_name_big5;
is_twobyte = is_twobyte_big5;
g_iUseLocale = TRUE;
g_iUseLocale = true;
PK_PROTECT_LEVEL = 15;
}

View File

@ -96,7 +96,6 @@ int total_bytes_written = 0;
BYTE g_bLogLevel = 0;
socket_t tcp_socket = 0;
socket_t udp_socket = 0;
socket_t p2p_socket = 0;
LPFDWATCH main_fdw = NULL;
@ -617,15 +616,6 @@ int start(int argc, char **argv)
return 0;
}
#ifndef __UDP_BLOCK__
if ((udp_socket = socket_udp_bind(g_szPublicIP, mother_port)) == INVALID_SOCKET)
{
perror("socket_udp_bind: udp_socket");
return 0;
}
#endif
// if internal ip exists, p2p socket uses internal ip, if not use public ip
//if ((p2p_socket = socket_tcp_bind(*g_szInternalIP ? g_szInternalIP : g_szPublicIP, p2p_port)) == INVALID_SOCKET)
if ((p2p_socket = socket_tcp_bind(g_szPublicIP, p2p_port)) == INVALID_SOCKET)
@ -635,9 +625,6 @@ int start(int argc, char **argv)
}
fdwatch_add_fd(main_fdw, tcp_socket, NULL, FDW_READ, false);
#ifndef __UDP_BLOCK__
fdwatch_add_fd(main_fdw, udp_socket, NULL, FDW_READ, false);
#endif
fdwatch_add_fd(main_fdw, p2p_socket, NULL, FDW_READ, false);
db_clientdesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, db_addr, db_port, PHASE_DBCLIENT, true);
@ -691,9 +678,6 @@ void destroy()
sys_log(0, "<shutdown> Closing sockets...");
socket_close(tcp_socket);
#ifndef __UDP_BLOCK__
socket_close(udp_socket);
#endif
socket_close(p2p_socket);
sys_log(0, "<shutdown> fdwatch_delete()...");
@ -815,28 +799,6 @@ int io_loop(LPFDWATCH fdw)
DESC_MANAGER::instance().AcceptP2PDesc(fdw, p2p_socket);
fdwatch_clear_event(fdw, p2p_socket, event_idx);
}
/*
else if (FDW_READ == fdwatch_check_event(fdw, udp_socket, event_idx))
{
char buf[256];
struct sockaddr_in cliaddr;
socklen_t socklen = sizeof(cliaddr);
int iBytesRead;
if ((iBytesRead = socket_udp_read(udp_socket, buf, 256, (struct sockaddr *) &cliaddr, &socklen)) > 0)
{
static CInputUDP s_inputUDP;
s_inputUDP.SetSockAddr(cliaddr);
int iBytesProceed;
s_inputUDP.Process(NULL, buf, iBytesRead, iBytesProceed);
}
fdwatch_clear_event(fdw, udp_socket, event_idx);
}
*/
continue;
}

View File

@ -113,7 +113,6 @@ enum
HEADER_GC_KEY_AGREEMENT = 0xfb, // _IMPROVED_PACKET_ENCRYPTION_
HEADER_GC_TIME_SYNC = 0xfc,
HEADER_GC_PHASE = 0xfd,
HEADER_GC_BINDUDP = 0xfe,
HEADER_GC_HANDSHAKE = 0xff,
HEADER_GC_CHARACTER_ADD = 1,
@ -854,13 +853,6 @@ typedef struct packet_phase
BYTE phase;
} TPacketGCPhase;
typedef struct packet_bindudp
{
BYTE header;
DWORD addr;
WORD port;
} TPacketGCBindUDP;
enum
{
LOGIN_FAILURE_ALREADY = 1,

View File

@ -53,12 +53,4 @@ class CPacketInfoGG : public CPacketInfo
virtual ~CPacketInfoGG();
};
/// Implemented in input_udp.cpp
class CPacketInfoUDP : public CPacketInfo
{
public:
CPacketInfoUDP();
virtual ~CPacketInfoUDP();
};
#endif

View File

@ -243,18 +243,18 @@ namespace quest
if (!npc || npc->IsPC())
{
lua_pushboolean(L, TRUE);
lua_pushboolean(L, true);
return 1;
}
if (npc->GetQuestNPCID() == 0 || npc->GetQuestNPCID() == ch->GetPlayerID())
{
npc->SetQuestNPCID(ch->GetPlayerID());
lua_pushboolean(L, TRUE);
lua_pushboolean(L, true);
}
else
{
lua_pushboolean(L, FALSE);
lua_pushboolean(L, true);
}
return 1;

View File

@ -168,7 +168,7 @@ BOOL CTextFileLoader::SetChildNode(const char * c_szKey)
if (!m_pcurNode)
{
assert(!"Node to access has not set!");
return FALSE;
return false;
}
for (DWORD i = 0; i < m_pcurNode->ChildNodeVector.size(); ++i)
@ -177,11 +177,11 @@ BOOL CTextFileLoader::SetChildNode(const char * c_szKey)
if (0 == pGroupNode->strGroupName.compare(c_szKey))
{
m_pcurNode = pGroupNode;
return TRUE;
return true;
}
}
return FALSE;
return false;
}
BOOL CTextFileLoader::SetChildNode(const std::string & c_rstrKeyHead, DWORD dwIndex)
@ -196,18 +196,18 @@ BOOL CTextFileLoader::SetChildNode(DWORD dwIndex)
if (!m_pcurNode)
{
assert(!"Node to access has not set!");
return FALSE;
return false;
}
if (dwIndex >= m_pcurNode->ChildNodeVector.size())
{
assert(!"Node index to set is too large to access!");
return FALSE;
return false;
}
m_pcurNode = m_pcurNode->ChildNodeVector[dwIndex];
return TRUE;
return true;
}
BOOL CTextFileLoader::SetParentNode()
@ -215,30 +215,30 @@ BOOL CTextFileLoader::SetParentNode()
if (!m_pcurNode)
{
assert(!"Node to access has not set!");
return FALSE;
return false;
}
if (NULL == m_pcurNode->pParentNode)
{
assert(!"Current group node is already top!");
return FALSE;
return false;
}
m_pcurNode = m_pcurNode->pParentNode;
return TRUE;
return true;
}
BOOL CTextFileLoader::GetCurrentNodeName(std::string * pstrName)
{
if (!m_pcurNode)
return FALSE;
return false;
if (NULL == m_pcurNode->pParentNode)
return FALSE;
return false;
*pstrName = m_pcurNode->strGroupName;
return TRUE;
return true;
}
BOOL CTextFileLoader::IsToken(const std::string & c_rstrKey)
@ -246,7 +246,7 @@ BOOL CTextFileLoader::IsToken(const std::string & c_rstrKey)
if (!m_pcurNode)
{
assert(!"Node to access has not set!");
return FALSE;
return false;
}
return m_pcurNode->LocalTokenVectorMap.end() != m_pcurNode->LocalTokenVectorMap.find(c_rstrKey);
@ -257,95 +257,95 @@ BOOL CTextFileLoader::GetTokenVector(const std::string & c_rstrKey, TTokenVector
if (!m_pcurNode)
{
assert(!"Node to access has not set!");
return FALSE;
return false;
}
TTokenVectorMap::iterator it = m_pcurNode->LocalTokenVectorMap.find(c_rstrKey);
if (m_pcurNode->LocalTokenVectorMap.end() == it)
{
sys_log(2, " CTextFileLoader::GetTokenVector - Failed to find the key %s [%s :: %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
*ppTokenVector = &it->second;
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenBoolean(const std::string & c_rstrKey, BOOL * pData)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->empty())
{
sys_log(2, " CTextFileLoader::GetTokenBoolean - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
BOOL out = 0;
str_to_number(out, pTokenVector->at(0).c_str());
*pData = out;
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenByte(const std::string & c_rstrKey, BYTE * pData)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->empty())
{
sys_log(2, " CTextFileLoader::GetTokenByte - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
BYTE out = 0;
str_to_number(out, pTokenVector->at(0).c_str());
*pData = out;
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenWord(const std::string & c_rstrKey, WORD * pData)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->empty())
{
sys_log(2, " CTextFileLoader::GetTokenWord - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
WORD out = 0;
str_to_number(out, pTokenVector->at(0).c_str());
*pData = out;
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenInteger(const std::string & c_rstrKey, int * pData)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->empty())
{
sys_log(2, " CTextFileLoader::GetTokenInteger - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
int out = 0;
str_to_number(out, pTokenVector->at(0).c_str());
*pData = out;
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenDoubleWord(const std::string & c_rstrKey, DWORD * pData)
@ -357,66 +357,66 @@ BOOL CTextFileLoader::GetTokenFloat(const std::string & c_rstrKey, float * pData
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->empty())
{
sys_log(2, " CTextFileLoader::GetTokenFloat - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
*pData = atof(pTokenVector->at(0).c_str());
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenVector2(const std::string & c_rstrKey, D3DXVECTOR2 * pVector2)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->size() != 2)
{
sys_log(2, " CTextFileLoader::GetTokenVector2 - This key should have 2 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
pVector2->x = atof(pTokenVector->at(0).c_str());
pVector2->y = atof(pTokenVector->at(1).c_str());
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenVector3(const std::string & c_rstrKey, D3DXVECTOR3 * pVector3)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->size() != 3)
{
sys_log(2, " CTextFileLoader::GetTokenVector3 - This key should have 3 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
pVector3->x = atof(pTokenVector->at(0).c_str());
pVector3->y = atof(pTokenVector->at(1).c_str());
pVector3->z = atof(pTokenVector->at(2).c_str());
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenVector4(const std::string & c_rstrKey, D3DXVECTOR4 * pVector4)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->size() != 4)
{
sys_log(2, " CTextFileLoader::GetTokenVector3 - This key should have 3 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
pVector4->x = atof(pTokenVector->at(0).c_str());
@ -424,7 +424,7 @@ BOOL CTextFileLoader::GetTokenVector4(const std::string & c_rstrKey, D3DXVECTOR4
pVector4->z = atof(pTokenVector->at(2).c_str());
pVector4->w = atof(pTokenVector->at(3).c_str());
return TRUE;
return true;
}
@ -437,49 +437,49 @@ BOOL CTextFileLoader::GetTokenQuaternion(const std::string & c_rstrKey, D3DXQUAT
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->size() != 4)
{
sys_log(2, " CTextFileLoader::GetTokenVector3 - This key should have 3 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
pQ->x = atof(pTokenVector->at(0).c_str());
pQ->y = atof(pTokenVector->at(1).c_str());
pQ->z = atof(pTokenVector->at(2).c_str());
pQ->w = atof(pTokenVector->at(3).c_str());
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenDirection(const std::string & c_rstrKey, D3DVECTOR * pVector)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->size() != 3)
{
sys_log(2, " CTextFileLoader::GetTokenDirection - This key should have 3 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
pVector->x = atof(pTokenVector->at(0).c_str());
pVector->y = atof(pTokenVector->at(1).c_str());
pVector->z = atof(pTokenVector->at(2).c_str());
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenColor(const std::string & c_rstrKey, D3DXCOLOR * pColor)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->size() != 4)
{
sys_log(2, " CTextFileLoader::GetTokenColor - This key should have 4 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
pColor->r = atof(pTokenVector->at(0).c_str());
@ -487,19 +487,19 @@ BOOL CTextFileLoader::GetTokenColor(const std::string & c_rstrKey, D3DXCOLOR * p
pColor->b = atof(pTokenVector->at(2).c_str());
pColor->a = atof(pTokenVector->at(3).c_str());
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenColor(const std::string & c_rstrKey, D3DCOLORVALUE * pColor)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->size() != 4)
{
sys_log(2, " CTextFileLoader::GetTokenColor - This key should have 4 values %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
pColor->r = atof(pTokenVector->at(0).c_str());
@ -507,23 +507,23 @@ BOOL CTextFileLoader::GetTokenColor(const std::string & c_rstrKey, D3DCOLORVALUE
pColor->b = atof(pTokenVector->at(2).c_str());
pColor->a = atof(pTokenVector->at(3).c_str());
return TRUE;
return true;
}
BOOL CTextFileLoader::GetTokenString(const std::string & c_rstrKey, std::string * pString)
{
TTokenVector * pTokenVector;
if (!GetTokenVector(c_rstrKey, &pTokenVector))
return FALSE;
return false;
if (pTokenVector->empty())
{
sys_log(2, " CTextFileLoader::GetTokenString - Failed to find the value %s [%s : %s]", m_strFileName.c_str(), m_pcurNode->strGroupName.c_str(), c_rstrKey.c_str());
return FALSE;
return false;
}
*pString = pTokenVector->at(0);
return TRUE;
return true;
}

View File

@ -70,7 +70,7 @@ void skip_spaces(const char **string)
const char *one_argument(const char *argument, char *first_arg, size_t first_size)
{
char mark = FALSE;
bool mark = false;
size_t first_len = 0;
if (!argument || 0 == first_size)