Files
mir_server/sdk/srvlib/include/LuaToBP.h

80 lines
2.9 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
/************************************************************
CBP系统Common Binary Property
LUA配置文件中产生通用二进制属性数据文件
使
************************************************************/
using namespace wylib::container;
class CLuaToBP
: public CCustomLuaConfig
{
public:
typedef CCustomLuaConfig Inherited;
//定义创建lua虚拟机函数类型
typedef lua_State* (*LPCREATELUAFN) ();
public:
/* 将配置文件生成为通用二进制属性描述数据并保存到数据流中
*sTableName
*/
size_t saveToStream(LPCSTR sTableName, wylib::stream::CBaseStream& stream);
/* 将配置文件生成为通用二进制属性描述数据并保存到文件中
*sTableName
*/
size_t saveToFile(LPCSTR sTableName, LPCTSTR sFileName);
/* 添加过滤路径,路径以'.'作为分隔符,支持通配符
*sPath
*/
void addFiltePath(LPCSTR sPath);
/* 添加过滤路径,路径以'.'作为分隔符,支持通配符
*filterList
*/
void addFiltePathList(const CBaseList<LPCSTR> &filterList);
/* 清空过滤路径表 */
void clearFiltePath();
/* 添加匹配器
*sMatching '.'
*/
void addMatcher(LPCSTR sMatching);
/* 添加匹配路径列表,路径以'.'作为分隔符,支持通配符
*matcherList
*/
void addMatcherList(const CBaseList<LPCSTR> &matcherList);
/* 情况匹配器列表 */
void clearMatchers();
public:
CLuaToBP();
//获取创建lua虚拟机函数
LPCREATELUAFN getCreateLuaFn();
//设置创建lua虚拟机函数
void setCreateLuaFn(LPCREATELUAFN lpFn);
protected:
void showError(LPCTSTR sError);
lua_State *createLuaVM();
bool isFiltePath(LPCSTR sPath);
size_t writeBoolean(wylib::stream::CBaseStream& stream, LPCSTR sKeyName);
size_t writeNumber(wylib::stream::CBaseStream& stream, LPCSTR sKeyName);
size_t writeString(wylib::stream::CBaseStream& stream, LPCSTR sKeyName);
size_t writeTable(wylib::stream::CBaseStream& stream, LPCSTR sKeyName);
private:
LPCREATELUAFN m_pCreateLuaFn; //创建lua虚拟机函数提供用于支持外部管理脚本内存
CHAR m_sNamePath[4096]; //当前表的名称路径,使用'.'做路径分隔符
LPSTR m_sNamePtr; //当前表名称路径终止位置
CBaseList<LPCSTR> m_Filters; //过滤器列表
CBaseList<LPCSTR> m_Matchers; //匹配器列表
};