28 #define DBG_PLG LOG_STREAM(debug, log_plugins)
29 #define LOG_PLG LOG_STREAM(info, log_plugins)
30 #define WRN_PLG LOG_STREAM(warn, log_plugins)
31 #define ERR_PLG LOG_STREAM(err, log_plugins)
38 std::unique_ptr<application_lua_kernel::thread>
thread;
39 std::vector<plugins_manager::event>
queue;
53 add_plugin(
"Null Plugin",
"return function() end");
76 return plugin_manager_status::type::not_created;
78 return plugins_[idx].thread->is_running() ? plugin_manager_status::type::running : plugin_manager_status::type::stopped;
81 throw std::runtime_error(
"index out of bounds");
89 return plugins_[idx].thread->status();
92 throw std::runtime_error(
"index out of bounds");
99 throw std::runtime_error(
"index out of bounds");
104 DBG_PLG <<
"start_plugin[" << idx <<
"]";
107 DBG_PLG <<
"creating thread[" << idx <<
"]";
110 DBG_PLG <<
"finished [" << idx <<
"], status = '" <<
plugins_[idx].thread->status() <<
"'";
112 DBG_PLG <<
"thread already exists, skipping";
116 throw std::runtime_error(
"index out of bounds");
151 for (std::size_t idx = 0; idx <
size(); ++idx)
167 playing_ = std::make_shared<bool> (
true);
168 std::shared_ptr<bool> local =
playing_;
170 for (std::size_t idx = 0; idx <
size(); ++idx)
172 DBG_PLG <<
"play_slice[" << idx <<
"] ...";
180 std::vector<event> input =
plugins_[idx].queue;
181 plugins_[idx].queue = std::vector<event>();
184 std::vector<std::function<bool(
void)>> requests =
185 plugins_[idx].thread->run_script(ctxt, input);
187 DBG_PLG <<
"thread returned " << requests.size() <<
" requests";
189 for (std::size_t j = 0; j < requests.size(); ++j) {
191 if (!requests[j]()) {
197 DBG_PLG <<
"play_slice[" << idx <<
"] finished.";
199 DBG_PLG <<
"thread ["<< idx <<
"] not created";
201 DBG_PLG <<
"thread ["<< idx <<
"] not running";
210 for (std::size_t
i = 0;
i <
size(); ++
i) {
211 if (plugin_manager_status::type::running ==
get_status(
i)) {
A config object defines a single node in a WML file, with access to child nodes.
void notify_event(const std::string &name, const config &data)
std::unique_ptr< application_lua_kernel > kernel_
plugin_manager_status::type get_status(std::size_t idx)
std::string get_name(std::size_t idx)
static plugins_manager * get()
void start_plugin(std::size_t idx)
std::size_t load_plugin(const std::string &name, const std::string &filename)
std::string get_detailed_status(std::size_t idx)
std::shared_ptr< bool > playing_
void play_slice(const plugins_context &)
lua_kernel_base * get_kernel_base()
std::vector< plugin > plugins_
plugins_manager(application_lua_kernel *)
std::size_t add_plugin(const std::string &name, const std::string &prog)
Standard logging facilities (interface).
static plugins_manager * singleton
static lg::log_domain log_plugins("plugins")
std::vector< plugins_manager::event > queue
std::unique_ptr< application_lua_kernel::thread > thread