115 lines
3.6 KiB
C++
115 lines
3.6 KiB
C++
#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;
|
||
}
|