add scriptengine.*

This commit is contained in:
aozhiwei 2018-08-18 11:08:30 +08:00
parent d2215a7422
commit 58ef5f9e7d
2 changed files with 114 additions and 0 deletions

84
cpp/scriptengine.cc Normal file
View File

@ -0,0 +1,84 @@
#include <a8/a8.h>
#include <a8/pyengine.h>
#include <a8/udplog.h>
#include "scriptengine.h"
void ScriptEngine::Init()
{
engine_ = new a8::PyEngine();
engine_->work_path = "pyscript/";
engine_->Init();
if (!engine_->IsInitialized()) {
abort();
}
}
void ScriptEngine::UnInit()
{
engine_->UnInit();
delete engine_;
engine_ = nullptr;
}
void ScriptEngine::Update()
{
}
bool ScriptEngine::LoadModule(const std::string& module_name)
{
bool ret = engine_->LoadModule(module_name.c_str());
if (!ret) {
a8::UdpLog::Instance()->Warning("load python module %s error %s\n",
{
module_name,
engine_->GetLastError()
});
assert(false);
}
return ret;
}
bool ScriptEngine::LoadString(const std::string& str)
{
bool ret = engine_->ExecString(str.c_str());
if (!ret) {
a8::UdpLog::Instance()->Warning("load python string %s error %s",
{
str,
engine_->GetLastError()
});
assert(false);
}
return ret;
}
std::tuple<bool, a8::XValue> ScriptEngine::CallGlobalFunc(const char* func_name,
std::initializer_list<a8::XValue> args)
{
auto ret = engine_->CallGlobalFunc(func_name, args);
if (!std::get<0>(ret)) {
a8::UdpLog::Instance()->Warning("call global function %s error %s",
{
func_name,
engine_->GetLastError()
});
}
return ret;
}
std::tuple<bool, a8::XValue> ScriptEngine::CallModuleFunc(const char* module_name,
const char* func_name,
std::initializer_list<a8::XValue> args)
{
auto ret = engine_->CallModuleFunc(module_name, func_name, args);
if (!std::get<0>(ret)) {
a8::UdpLog::Instance()->Warning("call module function [%s] %s error %s",
{
module_name,
func_name,
engine_->GetLastError()
});
}
return ret;
}

30
cpp/scriptengine.h Normal file
View File

@ -0,0 +1,30 @@
#pragma once
namespace a8
{
class PyEngine;
};
class ScriptEngine : public a8::Singleton<ScriptEngine>
{
private:
ScriptEngine() {};
friend class a8::Singleton<ScriptEngine>;
public:
void Init();
void UnInit();
void Update();
bool LoadModule(const std::string& module_name);
bool LoadString(const std::string& str);
std::tuple<bool, a8::XValue> CallGlobalFunc(const char* func_name,
std::initializer_list<a8::XValue> args);
std::tuple<bool, a8::XValue> CallModuleFunc(const char* module_name,
const char* func_name,
std::initializer_list<a8::XValue> args);
private:
a8::PyEngine *engine_ = nullptr;
};