Skip to content

Commit

Permalink
commit
Browse files Browse the repository at this point in the history
  • Loading branch information
ylmbtm committed Nov 16, 2021
1 parent 7bc7426 commit fa7f6f4
Show file tree
Hide file tree
Showing 27 changed files with 978 additions and 876 deletions.
260 changes: 135 additions & 125 deletions Server/Src/DBServer/DBWriterManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,172 +3,182 @@

CDBWriterManager::CDBWriterManager()
{
m_Stop = FALSE;
m_nCurErrorCount = 0;
m_dwSaveTime = 30;
m_Stop = FALSE;
m_nErrorCount = 0;
m_nSaveTime = 30;
}

CDBWriterManager::~CDBWriterManager()
{
m_Stop = FALSE;
m_nCurErrorCount = 0;
m_dwSaveTime = 30;
m_Stop = FALSE;
m_nErrorCount = 0;
m_nSaveTime = 30;
}

BOOL CDBWriterManager::Init()
{
m_dwSharePageSize = CConfigFile::GetInstancePtr()->GetIntValue("share_page_size");
if (m_dwSharePageSize <= 1)
{
m_dwSharePageSize = 1024;
}
m_dwSaveTime = CConfigFile::GetInstancePtr()->GetIntValue("db_save_time");
if (m_dwSaveTime <= 0)
{
m_dwSaveTime = 30;
}

INT32 nAreaID = CConfigFile::GetInstancePtr()->GetIntValue("areaid");
ERROR_RETURN_FALSE(nAreaID > 0);

m_vtDataWriters.assign(ESD_END, NULL);
m_vtDataWriters[ESD_ROLE] = new DataWriter<RoleDataObject>(ESD_ROLE, 1024);
m_vtDataWriters[ESD_GLOBAL] = new DataWriter<GlobalDataObject>(ESD_GLOBAL, 1024);
m_vtDataWriters[ESD_BAG] = new DataWriter<BagDataObject>(ESD_BAG, 1024);
m_vtDataWriters[ESD_COPY] = new DataWriter<CopyDataObject>(ESD_COPY, 1024);
m_vtDataWriters[ESD_CHAPTER] = new DataWriter<ChapterDataObject>(ESD_CHAPTER, 1024);
m_vtDataWriters[ESD_EQUIP] = new DataWriter<EquipDataObject>(ESD_EQUIP, 1024);
m_vtDataWriters[ESD_GEM] = new DataWriter<GemDataObject>(ESD_GEM, 1024);
m_vtDataWriters[ESD_PET] = new DataWriter<PetDataObject>(ESD_PET, 1024);
m_vtDataWriters[ESD_PARTNER] = new DataWriter<PartnerDataObject>(ESD_PARTNER, 1024);
m_vtDataWriters[ESD_GUILD] = new DataWriter<GuildDataObject>(ESD_GUILD, 1024);
m_vtDataWriters[ESD_GUILD_MEMBER] = new DataWriter<MemberDataObject>(ESD_GUILD_MEMBER, 1024);
m_vtDataWriters[ESD_TASK] = new DataWriter<TaskDataObject>(ESD_TASK, 1024);
m_vtDataWriters[ESD_MOUNT] = new DataWriter<MountDataObject>(ESD_MOUNT, 1024);
m_vtDataWriters[ESD_MAIL] = new DataWriter<MailDataObject>(ESD_MAIL, 1024);
m_vtDataWriters[ESD_OFFDATA] = new DataWriter<OffDataObject>(ESD_OFFDATA, 1024);
m_vtDataWriters[ESD_GROUP_MAIL] = new DataWriter<GroupMailDataObject>(ESD_GROUP_MAIL, 1024);
m_vtDataWriters[ESD_ACTIVITY] = new DataWriter<ActivityDataObject>(ESD_ACTIVITY, 1024);
m_vtDataWriters[ESD_COUNTER] = new DataWriter<CounterDataObject>(ESD_COUNTER, 1024);
m_vtDataWriters[ESD_FRIEND] = new DataWriter<FriendDataObject>(ESD_FRIEND, 1024);
m_vtDataWriters[ESD_SKILL] = new DataWriter<SkillDataObject>(ESD_SKILL, 1024);
m_vtDataWriters[ESD_PAYMENT] = new DataWriter<PayDataObject>(ESD_PAYMENT, 1024);
m_vtDataWriters[ESD_SEAL_ROLE] = new DataWriter<SealDataObject>(ESD_SEAL_ROLE, 1024);

for (int i = ESD_BEGIN + 1; i < ESD_END; i++)
{
if (m_vtDataWriters[i] == NULL)
{
CLog::GetInstancePtr()->LogError("CDBWriterManager::Init Error: ModuleID:[%d] Is NULL!", i);
return FALSE;
}
}

std::string strHost = CConfigFile::GetInstancePtr()->GetStringValue("mysql_game_svr_ip");
INT32 nPort = CConfigFile::GetInstancePtr()->GetIntValue("mysql_game_svr_port");
std::string strUser = CConfigFile::GetInstancePtr()->GetStringValue("mysql_game_svr_user");
std::string strPwd = CConfigFile::GetInstancePtr()->GetStringValue("mysql_game_svr_pwd");
std::string strDb = CConfigFile::GetInstancePtr()->GetStringValue("mysql_game_svr_db_name");
m_DBConnection.SetConnectParam(strHost.c_str(), strUser.c_str(), strPwd.c_str(), strDb.c_str(), nPort);

m_pWorkThread = new std::thread(&CDBWriterManager::DBWriteThread, this);

return TRUE;
m_nSharePageSize = CConfigFile::GetInstancePtr()->GetIntValue("share_page_size");
if (m_nSharePageSize <= 1)
{
m_nSharePageSize = 1024;
}

m_nSaveTime = CConfigFile::GetInstancePtr()->GetIntValue("db_save_time");
if (m_nSaveTime <= 0)
{
m_nSaveTime = 30;
}

INT32 nAreaID = CConfigFile::GetInstancePtr()->GetIntValue("areaid");
ERROR_RETURN_FALSE(nAreaID > 0);

m_vtDataWriters.assign(ESD_END, NULL);
m_vtDataWriters[ESD_ROLE] = new DataWriter<RoleDataObject>(ESD_ROLE, m_nSharePageSize);
m_vtDataWriters[ESD_GLOBAL] = new DataWriter<GlobalDataObject>(ESD_GLOBAL, m_nSharePageSize);
m_vtDataWriters[ESD_BAG] = new DataWriter<BagDataObject>(ESD_BAG, m_nSharePageSize);
m_vtDataWriters[ESD_COPY] = new DataWriter<CopyDataObject>(ESD_COPY, m_nSharePageSize);
m_vtDataWriters[ESD_CHAPTER] = new DataWriter<ChapterDataObject>(ESD_CHAPTER, m_nSharePageSize);
m_vtDataWriters[ESD_EQUIP] = new DataWriter<EquipDataObject>(ESD_EQUIP, m_nSharePageSize);
m_vtDataWriters[ESD_GEM] = new DataWriter<GemDataObject>(ESD_GEM, m_nSharePageSize);
m_vtDataWriters[ESD_PET] = new DataWriter<PetDataObject>(ESD_PET, m_nSharePageSize);
m_vtDataWriters[ESD_PARTNER] = new DataWriter<PartnerDataObject>(ESD_PARTNER, m_nSharePageSize);
m_vtDataWriters[ESD_GUILD] = new DataWriter<GuildDataObject>(ESD_GUILD, m_nSharePageSize);
m_vtDataWriters[ESD_GUILD_MEMBER] = new DataWriter<MemberDataObject>(ESD_GUILD_MEMBER, m_nSharePageSize);
m_vtDataWriters[ESD_TASK] = new DataWriter<TaskDataObject>(ESD_TASK, m_nSharePageSize);
m_vtDataWriters[ESD_MOUNT] = new DataWriter<MountDataObject>(ESD_MOUNT, m_nSharePageSize);
m_vtDataWriters[ESD_MAIL] = new DataWriter<MailDataObject>(ESD_MAIL, m_nSharePageSize);
m_vtDataWriters[ESD_OFFDATA] = new DataWriter<OffDataObject>(ESD_OFFDATA, m_nSharePageSize);
m_vtDataWriters[ESD_GROUP_MAIL] = new DataWriter<GroupMailDataObject>(ESD_GROUP_MAIL, m_nSharePageSize);
m_vtDataWriters[ESD_ACTIVITY] = new DataWriter<ActivityDataObject>(ESD_ACTIVITY, m_nSharePageSize);
m_vtDataWriters[ESD_COUNTER] = new DataWriter<CounterDataObject>(ESD_COUNTER, m_nSharePageSize);
m_vtDataWriters[ESD_FRIEND] = new DataWriter<FriendDataObject>(ESD_FRIEND, m_nSharePageSize);
m_vtDataWriters[ESD_SKILL] = new DataWriter<SkillDataObject>(ESD_SKILL, m_nSharePageSize);
m_vtDataWriters[ESD_PAYMENT] = new DataWriter<PayDataObject>(ESD_PAYMENT, m_nSharePageSize);
m_vtDataWriters[ESD_SEAL_ROLE] = new DataWriter<SealDataObject>(ESD_SEAL_ROLE, m_nSharePageSize);

for (int i = ESD_BEGIN + 1; i < ESD_END; i++)
{
if (m_vtDataWriters[i] == NULL)
{
CLog::GetInstancePtr()->LogError("CDBWriterManager::Init Error: ModuleID:[%d] Is NULL!", i);
return FALSE;
}
}

std::string strHost = CConfigFile::GetInstancePtr()->GetStringValue("mysql_game_svr_ip");
INT32 nPort = CConfigFile::GetInstancePtr()->GetIntValue("mysql_game_svr_port");
std::string strUser = CConfigFile::GetInstancePtr()->GetStringValue("mysql_game_svr_user");
std::string strPwd = CConfigFile::GetInstancePtr()->GetStringValue("mysql_game_svr_pwd");
std::string strDb = CConfigFile::GetInstancePtr()->GetStringValue("mysql_game_svr_db_name");

m_DBConnection.SetConnectParam(strHost.c_str(), strUser.c_str(), strPwd.c_str(), strDb.c_str(), nPort);

m_pWorkThread = new std::thread(&CDBWriterManager::DBWriteThread, this);

return TRUE;
}

BOOL CDBWriterManager::Uninit()
{
m_Stop = TRUE;
m_Stop = TRUE;

if (m_pWorkThread != NULL)
{
m_pWorkThread->join();
if (m_pWorkThread != NULL)
{
m_pWorkThread->join();

delete m_pWorkThread;
delete m_pWorkThread;

m_pWorkThread = NULL;
}
m_pWorkThread = NULL;
}

for (int i = ESD_BEGIN + 1; i < ESD_END; i++)
{
ERROR_TO_CONTINUE(m_vtDataWriters[i] != NULL);

return TRUE;
delete m_vtDataWriters[i];

m_vtDataWriters[i] = NULL;
}

m_vtDataWriters.clear();

return TRUE;
}

BOOL CDBWriterManager::WriteDataToDB()
{
BOOL bHasWrite = FALSE;
INT32 nErrorCount = 0;
for (int i = ESD_BEGIN + 1; i < ESD_END; i++)
{
ERROR_TO_CONTINUE(m_vtDataWriters[i] != NULL);
BOOL bHasWrite = FALSE;
INT32 nErrorCount = 0;
for (int i = ESD_BEGIN + 1; i < ESD_END; i++)
{
ERROR_TO_CONTINUE(m_vtDataWriters[i] != NULL);

if (m_vtDataWriters[i]->SaveModifyToDB(&m_DBConnection))
{
bHasWrite = TRUE;
}
if (m_vtDataWriters[i]->SaveModifyToDB(&m_DBConnection))
{
bHasWrite = TRUE;
}

nErrorCount += m_vtDataWriters[i]->GetErrorCount();
}
nErrorCount += m_vtDataWriters[i]->GetErrorCount();
}

m_nCurErrorCount = nErrorCount;
m_nErrorCount = nErrorCount;

return bHasWrite;
return bHasWrite;
}

BOOL CDBWriterManager::IsStop()
{
return m_Stop;
return m_Stop;
}

BOOL CDBWriterManager::Update()
{
static INT32 nLastErrorCount = 0;
static INT32 nLastErrorCount = 0;

if (nLastErrorCount == m_nCurErrorCount)
{
return TRUE;
}
if (nLastErrorCount == m_nErrorCount)
{
return TRUE;
}

nLastErrorCount = m_nCurErrorCount;
nLastErrorCount = m_nErrorCount;

//Msg_DbErrorCountNty Nty;
//Msg_DbErrorCountNty Nty;

//Nty.set_errorcount(m_nCurErrorCount);
//Nty.set_errorcount(m_nCurErrorCount);

//ServiceBase::GetInstancePtr()->SendMsgProtoBuf(CGameService::GetInstancePtr()->GetLogicConnID(), MSG_DB_WRITE_ERROR_NTY, 0, 0, Nty);
//ServiceBase::GetInstancePtr()->SendMsgProtoBuf(CGameService::GetInstancePtr()->GetLogicConnID(), MSG_DB_WRITE_ERROR_NTY, 0, 0, Nty);

return TRUE;
return TRUE;
}

void CDBWriterManager::DBWriteThread()
{
if (!m_DBConnection.Init())
{
return ;
}

while (TRUE)
{
if (!m_DBConnection.Ping())
{
if (!m_DBConnection.Reconnect())
{
CommonFunc::Sleep(1000);
continue;
}
}

BOOL bHasWrite = WriteDataToDB();
if (!bHasWrite && IsStop())
{
break;
}

CommonFunc::Sleep(60000); //休息10秒
}

m_DBConnection.Uninit();

return ;
if (!m_DBConnection.Init())
{
return ;
}

while (TRUE)
{
if (!m_DBConnection.Ping())
{
if (!m_DBConnection.Reconnect())
{
CommonFunc::Sleep(1000);
continue;
}
}

BOOL bHasWrite = WriteDataToDB();
if (!bHasWrite && IsStop())
{
break;
}

CommonFunc::Sleep(60000); //休息10秒
}

m_DBConnection.Uninit();

return ;
}
32 changes: 16 additions & 16 deletions Server/Src/DBServer/DBWriterManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,30 +25,30 @@ class CDBWriterManager
{

public:
CDBWriterManager();
~CDBWriterManager();
CDBWriterManager();
~CDBWriterManager();

public:
BOOL Init();
BOOL Init();

BOOL Uninit();
BOOL Uninit();

BOOL WriteDataToDB();
BOOL WriteDataToDB();

BOOL IsStop();
BOOL IsStop();

BOOL Update();
BOOL Update();

void DBWriteThread();
void DBWriteThread();
public:
std::vector<DataWriterBase*> m_vtDataWriters;

BOOL m_Stop;
std::thread* m_pWorkThread;
CDBConnection m_DBConnection;
UINT32 m_nCurErrorCount;
UINT32 m_dwSaveTime;
UINT32 m_dwSharePageSize;
std::vector<DataWriterBase*> m_vtDataWriters;

BOOL m_Stop;
std::thread* m_pWorkThread;
CDBConnection m_DBConnection;
INT32 m_nErrorCount;
INT32 m_nSaveTime;
INT32 m_nSharePageSize;
};

#endif //_DB_WRITER_MANAGER_H_
Loading

0 comments on commit fa7f6f4

Please sign in to comment.