X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fserver.cpp;h=718a0a2905f62d32fc03ef89d16a07f9509ad460;hb=3e2279821b1f73b7af46b0925090916c4e2f84f6;hp=193f3e72d76a60b417563b07cf36763c7147b848;hpb=12b372f89ce109a4db9d510884fbe7d05af79870;p=xonotic%2Fnetradiant.git diff --git a/radiant/server.cpp b/radiant/server.cpp index 193f3e72..718a0a29 100644 --- a/radiant/server.cpp +++ b/radiant/server.cpp @@ -1,25 +1,26 @@ /* -Copyright (C) 2001-2006, William Joseph. -All Rights Reserved. + Copyright (C) 2001-2006, William Joseph. + All Rights Reserved. -This file is part of GtkRadiant. + This file is part of GtkRadiant. -GtkRadiant is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -GtkRadiant is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ #include "server.h" +#include "globaldefs.h" #include "debugging/debugging.h" #include "warnings.h" @@ -30,250 +31,246 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "modulesystem.h" -class RadiantModuleServer : public ModuleServer -{ - typedef std::pair ModuleType; - typedef std::pair ModuleKey; - typedef std::map Modules_; - Modules_ m_modules; - bool m_error; +class RadiantModuleServer : public ModuleServer { + typedef std::pair ModuleType; + typedef std::pair ModuleKey; + typedef std::map Modules_; + Modules_ m_modules; + bool m_error; public: - RadiantModuleServer() : m_error(false) - { - } - - void setError(bool error) - { - m_error = error; - } - bool getError() const - { - return m_error; - } - - TextOutputStream& getOutputStream() - { - return globalOutputStream(); - } - TextOutputStream& getErrorStream() - { - return globalErrorStream(); - } - DebugMessageHandler& getDebugMessageHandler() - { - return globalDebugMessageHandler(); - } - - void registerModule(const char* type, int version, const char* name, Module& module) - { - ASSERT_NOTNULL(&module); - if(!m_modules.insert(Modules_::value_type(ModuleKey(ModuleType(type, version), name), &module)).second) + RadiantModuleServer() : m_error(false) + { + } + + void setError(bool error) + { + m_error = error; + } + + bool getError() const { - globalErrorStream() << "module already registered: type=" << makeQuoted(type) << " name=" << makeQuoted(name) << "\n"; + return m_error; } - else + + TextOutputStream &getOutputStream() + { + return globalOutputStream(); + } + + TextOutputStream &getErrorStream() + { + return globalErrorStream(); + } + + DebugMessageHandler &getDebugMessageHandler() { - globalOutputStream() << "Module Registered: type=" << makeQuoted(type) << " version=" << makeQuoted(version) << " name=" << makeQuoted(name) << "\n"; + return globalDebugMessageHandler(); } - } - Module* findModule(const char* type, int version, const char* name) const - { - Modules_::const_iterator i = m_modules.find(ModuleKey(ModuleType(type, version), name)); - if(i != m_modules.end()) + void registerModule(const char *type, int version, const char *name, Module &module) { - return (*i).second; + if (!m_modules.insert(Modules_::value_type(ModuleKey(ModuleType(type, version), name), &module)).second) { + globalErrorStream() << "module already registered: type=" << makeQuoted(type) << " name=" + << makeQuoted(name) << "\n"; + } else { + globalOutputStream() << "Module Registered: type=" << makeQuoted(type) << " version=" << makeQuoted(version) + << " name=" << makeQuoted(name) << "\n"; + } } - return 0; - } - void foreachModule(const char* type, int version, Visitor& visitor) - { - for(Modules_::const_iterator i = m_modules.begin(); i != m_modules.end(); ++i) + Module *findModule(const char *type, int version, const char *name) const { - if(string_equal((*i).first.first.first.c_str(), type)) - { - visitor.visit((*i).first.second.c_str(), *(*i).second); - } + Modules_::const_iterator i = m_modules.find(ModuleKey(ModuleType(type, version), name)); + if (i != m_modules.end()) { + return (*i).second; + } + return 0; + } + + void foreachModule(const char *type, int version, const Visitor &visitor) + { + for (Modules_::const_iterator i = m_modules.begin(); i != m_modules.end(); ++i) { + if (string_equal((*i).first.first.first.c_str(), type)) { + visitor.visit((*i).first.second.c_str(), *(*i).second); + } + } } - } }; -#if defined(WIN32) +#if GDEF_OS_WINDOWS #include -#define FORMAT_BUFSIZE 2048 -const char* FormatGetLastError() -{ - static char buf[FORMAT_BUFSIZE]; - FormatMessage( - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - buf, - FORMAT_BUFSIZE, - NULL - ); - return buf; +const int FORMAT_BUFSIZE = 2048; +const char* FormatGetLastError(){ + static char buf[FORMAT_BUFSIZE]; + FormatMessage( + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language + buf, + FORMAT_BUFSIZE, + NULL + ); + return buf; } class DynamicLibrary { - HMODULE m_library; +HMODULE m_library; public: - typedef int (__stdcall* FunctionPointer)(); +typedef int ( __stdcall * FunctionPointer )(); - DynamicLibrary(const char* filename) - { - m_library = LoadLibrary(filename); - if(m_library == 0) - { - globalErrorStream() << "LoadLibrary failed: '" << filename << "'\n"; - globalErrorStream() << "GetLastError: " << FormatGetLastError(); +DynamicLibrary( const char* filename ){ + m_library = LoadLibrary( filename ); + if ( m_library == 0 ) { + globalErrorStream() << "LoadLibrary failed: '" << filename << "'\n"; + globalErrorStream() << "GetLastError: " << FormatGetLastError(); } - } - ~DynamicLibrary() - { - if(!failed()) - { - FreeLibrary(m_library); +} +~DynamicLibrary(){ + if ( !failed() ) { + FreeLibrary( m_library ); } - } - bool failed() - { +} +bool failed(){ return m_library == 0; - } - FunctionPointer findSymbol(const char* symbol) - { - FunctionPointer address = GetProcAddress(m_library, symbol); - if(address == 0) - { - globalErrorStream() << "GetProcAddress failed: '" << symbol << "'\n"; - globalErrorStream() << "GetLastError: " << FormatGetLastError(); +} +FunctionPointer findSymbol( const char* symbol ){ + FunctionPointer address = (FunctionPointer) GetProcAddress( m_library, symbol ); + if ( address == 0 ) { + globalErrorStream() << "GetProcAddress failed: '" << symbol << "'\n"; + globalErrorStream() << "GetLastError: " << FormatGetLastError(); } return address; - } +} }; -#elif defined(__linux__) || defined (__APPLE__) +#elif GDEF_OS_POSIX #include -class DynamicLibrary -{ - void* m_library; +class DynamicLibrary { + void *m_library; public: - typedef int (* FunctionPointer)(); - - DynamicLibrary(const char* filename) - { - m_library = dlopen(filename, RTLD_NOW); - } - ~DynamicLibrary() - { - if(!failed()) - dlclose(m_library); - } - bool failed() - { - return m_library == 0; - } - FunctionPointer findSymbol(const char* symbol) - { - FunctionPointer p = (FunctionPointer)dlsym(m_library, symbol); - if(p == 0) + typedef int ( *FunctionPointer )(); + + DynamicLibrary(const char *filename) { - const char* error = reinterpret_cast(dlerror()); - if(error != 0) - { - globalErrorStream() << error; - } + m_library = dlopen(filename, RTLD_NOW); + } + + ~DynamicLibrary() + { + if (!failed()) { + dlclose(m_library); + } + } + + bool failed() + { + return m_library == 0; + } + + FunctionPointer findSymbol(const char *symbol) + { + FunctionPointer p = (FunctionPointer) dlsym(m_library, symbol); + if (p == 0) { + const char *error = reinterpret_cast( dlerror()); + if (error != 0) { + globalErrorStream() << error; + } + } + return p; } - return p; - } }; +#else +#error "unsupported platform" #endif -class DynamicLibraryModule -{ - typedef void (RADIANT_DLLEXPORT* RegisterModulesFunc)(ModuleServer& server); - DynamicLibrary m_library; - RegisterModulesFunc m_registerModule; +class DynamicLibraryModule { + typedef void ( RADIANT_DLLIMPORT *RegisterModulesFunc )(ModuleServer &server); + + DynamicLibrary m_library; + RegisterModulesFunc m_registerModule; public: - DynamicLibraryModule(const char* filename) - : m_library(filename), m_registerModule(0) - { - if(!m_library.failed()) + DynamicLibraryModule(const char *filename) + : m_library(filename), m_registerModule(0) { - m_registerModule = reinterpret_cast(m_library.findSymbol("Radiant_RegisterModules")); + if (!m_library.failed()) { + m_registerModule = reinterpret_cast( m_library.findSymbol("Radiant_RegisterModules")); +#if 0 + if ( !m_registerModule ) { + m_registerModule = reinterpret_cast( m_library.findSymbol( "Radiant_RegisterModules@4" ) ); + } +#endif + } + } + + bool failed() + { + return m_registerModule == 0; + } + + void registerModules(ModuleServer &server) + { + m_registerModule(server); } - } - bool failed() - { - return m_registerModule == 0; - } - void registerModules(ModuleServer& server) - { - m_registerModule(server); - } }; -class Libraries -{ - typedef std::vector libraries_t; - libraries_t m_libraries; +class Libraries { + typedef std::vector libraries_t; + libraries_t m_libraries; public: - ~Libraries() - { - release(); - } - void registerLibrary(const char* filename, ModuleServer& server) - { - DynamicLibraryModule* library = new DynamicLibraryModule(filename); - - if(library->failed()) + ~Libraries() + { + release(); + } + + void registerLibrary(const char *filename, ModuleServer &server) { - delete library; + DynamicLibraryModule *library = new DynamicLibraryModule(filename); + + if (library->failed()) { + delete library; + } else { + m_libraries.push_back(library); + library->registerModules(server); + } } - else + + void release() { - m_libraries.push_back(library); - library->registerModules(server); + for (libraries_t::iterator i = m_libraries.begin(); i != m_libraries.end(); ++i) { + delete *i; + } } - } - void release() - { - for(libraries_t::iterator i = m_libraries.begin(); i != m_libraries.end(); ++i) + + void clear() { - delete *i; + m_libraries.clear(); } - } - void clear() - { - m_libraries.clear(); - } }; Libraries g_libraries; RadiantModuleServer g_server; -ModuleServer& GlobalModuleServer_get() +ModuleServer &GlobalModuleServer_get() { - return g_server; + return g_server; } -void GlobalModuleServer_loadModule(const char* filename) +void GlobalModuleServer_loadModule(const char *filename) { - g_libraries.registerLibrary(filename, g_server); + g_libraries.registerLibrary(filename, g_server); } void GlobalModuleServer_Initialise()