From ba3095b937bd051ca1438a837245d21db300a0d6 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Mon, 22 Nov 2010 04:34:42 +0200 Subject: core services --- core/basic-services.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'core/basic-services.cpp') 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 services; + if(!services.empty()) + { + extern boost::mutex service_list_mutex; + std::string svclist; + service_list_mutex.lock(); + std::list::iterator end = services.end(); + for(std::list::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 plugins; + if(!plugins.empty()) + { + extern boost::mutex plugin_list_mutex; + plugin_list_mutex.lock(); + pluglist *plugs = new pluglist; + int count = 0; + std::list::iterator end = plugins.end(); + for(std::list::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); } -- cgit v1.2.3