diff options
author | Gluzskiy Alexandr <sss123next@list.ru> | 2010-11-22 04:34:42 +0200 |
---|---|---|
committer | Gluzskiy Alexandr <sss123next@list.ru> | 2010-11-22 04:34:42 +0200 |
commit | ba3095b937bd051ca1438a837245d21db300a0d6 (patch) | |
tree | 886b316e24f52e60314d6fb1d4b63ea741f0506e /core/basic-services.cpp | |
parent | baba7489c48a759bdf6479e718a28f1339aaac54 (diff) |
core services
Diffstat (limited to 'core/basic-services.cpp')
-rw-r--r-- | core/basic-services.cpp | 75 |
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); } |