summaryrefslogtreecommitdiff
path: root/core/basic-services.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss123next@list.ru>2010-11-22 04:34:42 +0200
committerGluzskiy Alexandr <sss123next@list.ru>2010-11-22 04:34:42 +0200
commitba3095b937bd051ca1438a837245d21db300a0d6 (patch)
tree886b316e24f52e60314d6fb1d4b63ea741f0506e /core/basic-services.cpp
parentbaba7489c48a759bdf6479e718a28f1339aaac54 (diff)
core services
Diffstat (limited to 'core/basic-services.cpp')
-rw-r--r--core/basic-services.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/core/basic-services.cpp b/core/basic-services.cpp
index 536a718..2cfcecb 100644
--- a/core/basic-services.cpp
+++ b/core/basic-services.cpp
@@ -22,8 +22,83 @@ void *get_version(void*)
return (void*)ec_version;
}
+void *get_service_list(void*)
+{
+ extern std::list<service*> services;
+ if(!services.empty())
+ {
+ extern boost::mutex service_list_mutex;
+ std::string svclist;
+ service_list_mutex.lock();
+ std::list<service*>::iterator end = services.end();
+ for(std::list<service*>::iterator i = services.begin(); i != end; ++i)
+ {
+ svclist.append((*i)->getName());
+ svclist.append("\n");
+ }
+ service_list_mutex.unlock();
+ svclist.erase((std::string::size_type)svclist.length(), 1);
+ char *str = new char [svclist.length()+1];
+ ACE_OS::strcpy(str, svclist.c_str());
+ return str;
+ }
+ return 0;
+}
+
+void *get_plugin_list(void*)
+{
+ extern std::list<plugin*> plugins;
+ if(!plugins.empty())
+ {
+ extern boost::mutex plugin_list_mutex;
+ plugin_list_mutex.lock();
+ pluglist *plugs = new pluglist;
+ int count = 0;
+ std::list<plugin*>::iterator end = plugins.end();
+ for(std::list<plugin*>::iterator i = plugins.begin(); i != end; ++i, ++count)
+ {
+// plugs->plugins[count] = new PLUGININFO*;
+ plugs->plugins[count] = (PLUGININFO*)(*i)->get_plugininfo();
+ }
+ plugin_list_mutex.unlock();
+ plugs->count = count;
+ return plugs;
+ }
+ return 0;
+}
+
+void *halt_request(void*)
+{
+ extern bool halt_requested;
+ extern void terminate();
+ halt_requested = true;
+ terminate();
+ return 0;
+}
+
+void *toutf16(void* utf8)
+{
+ return wcsdup(toUTF16((char*)utf8).c_str());
+}
+void *wchartoutf8(void* utf8)
+{
+ return ACE_OS::strdup(toUTF8((wchar_t*)utf8).c_str());
+}
+
+void *chartoutf8(void* utf8)
+{
+ return ACE_OS::strdup(toUTF8((char*)utf8).c_str());
+}
+
void register_core_services()
{
CreateServiceFunction("EC/GetVersionInt", (SERVICE)get_version);
+ CreateServiceFunction("EC/GetServiceList", (SERVICE)get_service_list);
+ CreateServiceFunction("EC/RequestHalt", (SERVICE)halt_request);
+ CreateServiceFunction("EC/GetPluginList", (SERVICE)get_plugin_list);
+
+ CreateServiceFunction("EC/toUtf16", (SERVICE)toutf16);
+ CreateServiceFunction("EC/WCHARtoUtf8", (SERVICE)wchartoutf8);
+ CreateServiceFunction("EC/CHARtoUtf8", (SERVICE)chartoutf8);
}