Files
mir_server/server/LogicServer/config/NSNNoticeProvider.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

115 lines
3.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
#include "NSNNoticeProvider.h"
//CBufferAllocator* CNSNNoticeProvider::m_pAllocator = NULL;
CNSNNoticeProvider::CNSNNoticeProvider() :Inherited()
{
//m_pAllocator = new CBufferAllocator();
}
CNSNNoticeProvider::~CNSNNoticeProvider()
{
//delete m_pAllocator;
//m_pAllocator = NULL;
}
bool CNSNNoticeProvider::LoadAll(LPCTSTR sFilePath)
{
bool Result = false;
CMemoryStream ms;
CCustomLuaPreProcessor pp;
LPCTSTR sText;
try
{
//从文件加载配置脚本
if ( ms.loadFromFile(sFilePath) <= 0 )
showErrorFormat(_T("unable to load from %s"), sFilePath);
//对配置脚本进行预处理
GetLogicServer()->GetVSPDefine().RegisteToPreprocessor(pp);
sText = pp.parse((LPCTSTR)ms.getMemory(), sFilePath);
//设置脚本内容
if ( !setScript(sText) )
showError(_T("syntax error on notice config"));
Result = ReadAllNotices();
}
catch (RefString &s)
{
OutputMsg(rmError, _T("load NSNNotice config error: %s"), s.rawStr());
FILE* fp = fopen("scripterror.txt", "wb");
if (fp)
{
fputs(sText, fp);
fclose(fp);
}
}
catch (...)
{
OutputMsg(rmError, _T("unexpected error on load NSNnotice config"));
}
//销毁脚本虚拟机
setScript(NULL);
return Result;
}
bool CNSNNoticeProvider::ReadAllNotices()
{
bool bDef_false = false;
int nDefInt_1 = 1;
int nDefInt_0 = 0;
int nDefInt_f1 = -1;
int nOpenServerDay = GetLogicServer()->GetDaysSinceOpenServer();
CMiniDateTime now_time = CMiniDateTime::now();
//if ( openGlobalTable("NSNNoticeConfig") )
if ( openGlobalTable("NSNoticeConfig") )
{
//const INT_PTR nCount = lua_objlen(m_pLua, -1) + 1;
m_Notices.clear();
char buff[50];
//if (nCount > 0)
//{
if (enumTableFirst())
{
do
{
int nId = getFieldInt("Noticeid");
if (m_Notices.find(nId) != m_Notices.end()) return false;
NSNNOTICE& notice = m_Notices[nId];
notice.nId = nId;
notice.nAfterSrvDay = getFieldInt("starttime", &nDefInt_0); // 开服N天后开
notice.nInterval = getFieldInt("noticeInterval", &nDefInt_0); // 公告播放间隔
notice.boIsTrundle = getFieldInt("trundle", &nDefInt_0); // 走马灯
notice.boIsChat = getFieldInt("chatting", &nDefInt_0); // 聊天框信息
//notice.nTimeType = getFieldInt("TimeType"); // 时间类型
notice.nNextTime = 0;
// 开服前N天开如果过了这个时间永远不开则删掉
notice.nBeforeSrvDay = getFieldInt("stoptime",&nDefInt_0);
if (notice.nBeforeSrvDay && nOpenServerDay > notice.nBeforeSrvDay)
{
auto it = m_Notices.find(nId);
m_Notices.erase(it);
continue;
}
// 公告内容
char * pContent = (char *)getFieldString("content");
strncpy(notice.sContent, pContent, sizeof(notice.sContent));
//UpdateOpenTime(m_pLua, notice);
} while (enumTableNext());
}
//}
closeTable();//ActivitiesConf
}
else return false;
return true;
}