From 92c59963f82f81aa3202657e7fdbb2592924ede3 Mon Sep 17 00:00:00 2001 From: "cedeel@gmail.com" Date: Thu, 14 Jun 2012 13:06:06 +0000 Subject: Attempt to bring sanity to newlines across systems. git-svn-id: http://mc-server.googlecode.com/svn/trunk@606 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cWebPlugin_Lua.cpp | 368 +++++++++++++++++++++++----------------------- 1 file changed, 184 insertions(+), 184 deletions(-) (limited to 'source/cWebPlugin_Lua.cpp') diff --git a/source/cWebPlugin_Lua.cpp b/source/cWebPlugin_Lua.cpp index ab397173e..e22c59961 100644 --- a/source/cWebPlugin_Lua.cpp +++ b/source/cWebPlugin_Lua.cpp @@ -1,185 +1,185 @@ - -#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules - -#include "cWebPlugin_Lua.h" -#include "cPlugin_NewLua.h" - -#include "tolua++.h" -#include "cWebAdmin.h" - - - - - -extern bool report_errors(lua_State* lua, int status); - - - - - -static std::string SafeString( const std::string& a_String ) -{ - std::string RetVal; - for( unsigned int i = 0; i < a_String.size(); ++i ) - { - char c = a_String[i]; - if( c == ' ' ) - { - c = '_'; - } - RetVal.push_back( c ); - } - return RetVal; -} - - - - - -struct cWebPlugin_Lua::sWebPluginTab -{ - std::string Title; - std::string SafeTitle; - - int Reference; -}; - -cWebPlugin_Lua::cWebPlugin_Lua( cPlugin_NewLua* a_Plugin ) - : cWebPlugin( a_Plugin->GetLuaState() ) - , m_Plugin( a_Plugin ) -{ - -} - -cWebPlugin_Lua::~cWebPlugin_Lua() -{ - for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr ) - { - delete *itr; - } - m_Tabs.clear(); -} - -bool cWebPlugin_Lua::AddTab( const char* a_Title, lua_State * a_LuaState, int a_FunctionReference ) -{ - if( a_LuaState != m_Plugin->GetLuaState() ) - { - LOGERROR("Only allowed to add a tab to a WebPlugin of your own Plugin!"); - return false; - } - sWebPluginTab* Tab = new sWebPluginTab(); - Tab->Title = a_Title; - Tab->SafeTitle = SafeString( a_Title ); - - Tab->Reference = a_FunctionReference; - - m_Tabs.push_back( Tab ); - return true; -} - -std::string cWebPlugin_Lua::HandleRequest( HTTPRequest* a_Request ) -{ - lua_State* LuaState = m_Plugin->GetLuaState(); - std::string RetVal = ""; - - std::pair< std::string, std::string > TabName = GetTabNameForRequest(a_Request); - std::string SafeTabName = TabName.second; - if( SafeTabName.empty() ) - return ""; - - sWebPluginTab* Tab = 0; - for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr ) - { - if( (*itr)->SafeTitle.compare( SafeTabName ) == 0 ) // This is the one! Rawr - { - Tab = *itr; - break; - } - } - - if( Tab ) - { - //LOGINFO("1. Stack size: %i", lua_gettop(LuaState) ); - lua_rawgeti( LuaState, LUA_REGISTRYINDEX, Tab->Reference); // same as lua_getref() - - //LOGINFO("2. Stack size: %i", lua_gettop(LuaState) ); - // Push HTTPRequest - tolua_pushusertype( LuaState, a_Request, "HTTPRequest" ); - //LOGINFO("Calling bound function! :D"); - int s = lua_pcall( LuaState, 1, 1, 0); - - if ( s != 0 ) - { - std::string err = lua_tostring(LuaState, -1); - LOGERROR("-- %s", err.c_str() ); - lua_pop(LuaState, 1); - LOGINFO("error. Stack size: %i", lua_gettop(LuaState) ); - return err; // Show the error message in the web page, looks cool - } - - if( !lua_isstring( LuaState, -1 ) ) - { - LOGWARN("WARNING: WebPlugin tab '%s' did not return a string!", Tab->Title.c_str() ); - lua_pop(LuaState, 1); // Pop return value - return std::string("WARNING: WebPlugin tab '") + Tab->Title + std::string("' did not return a string!"); - } - - RetVal += tolua_tostring(LuaState, -1, 0); - lua_pop(LuaState, 1); // Pop return value - //LOGINFO("ok. Stack size: %i", lua_gettop(LuaState) ); - } - - return RetVal; -} - -void cWebPlugin_Lua::Initialize() -{ -} - -std::pair< std::string, std::string > cWebPlugin_Lua::GetTabNameForRequest( HTTPRequest* a_Request ) -{ - std::pair< std::string, std::string > Names; - AStringVector Split = StringSplit(a_Request->Path, "/"); - - if( Split.size() > 1 ) - { - sWebPluginTab* Tab = 0; - if( Split.size() > 2 ) // If we got the tab name, show that page - { - for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr ) - { - if( (*itr)->SafeTitle.compare( Split[2] ) == 0 ) // This is the one! Rawr - { - Tab = *itr; - break; - } - } - } - else // Otherwise show the first tab - { - if( m_Tabs.size() > 0 ) - Tab = *m_Tabs.begin(); - } - - if( Tab ) - { - Names.first = Tab->Title; - Names.second = Tab->SafeTitle; - } - } - - return Names; -} - -std::list< std::pair > cWebPlugin_Lua::GetTabNames() -{ - std::list< std::pair< std::string, std::string > > NameList; - for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr ) - { - std::pair< std::string, std::string > StringPair; - StringPair.first = (*itr)->Title; - StringPair.second = (*itr)->SafeTitle; - NameList.push_back( StringPair ); - } - return NameList; + +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + +#include "cWebPlugin_Lua.h" +#include "cPlugin_NewLua.h" + +#include "tolua++.h" +#include "cWebAdmin.h" + + + + + +extern bool report_errors(lua_State* lua, int status); + + + + + +static std::string SafeString( const std::string& a_String ) +{ + std::string RetVal; + for( unsigned int i = 0; i < a_String.size(); ++i ) + { + char c = a_String[i]; + if( c == ' ' ) + { + c = '_'; + } + RetVal.push_back( c ); + } + return RetVal; +} + + + + + +struct cWebPlugin_Lua::sWebPluginTab +{ + std::string Title; + std::string SafeTitle; + + int Reference; +}; + +cWebPlugin_Lua::cWebPlugin_Lua( cPlugin_NewLua* a_Plugin ) + : cWebPlugin( a_Plugin->GetLuaState() ) + , m_Plugin( a_Plugin ) +{ + +} + +cWebPlugin_Lua::~cWebPlugin_Lua() +{ + for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr ) + { + delete *itr; + } + m_Tabs.clear(); +} + +bool cWebPlugin_Lua::AddTab( const char* a_Title, lua_State * a_LuaState, int a_FunctionReference ) +{ + if( a_LuaState != m_Plugin->GetLuaState() ) + { + LOGERROR("Only allowed to add a tab to a WebPlugin of your own Plugin!"); + return false; + } + sWebPluginTab* Tab = new sWebPluginTab(); + Tab->Title = a_Title; + Tab->SafeTitle = SafeString( a_Title ); + + Tab->Reference = a_FunctionReference; + + m_Tabs.push_back( Tab ); + return true; +} + +std::string cWebPlugin_Lua::HandleRequest( HTTPRequest* a_Request ) +{ + lua_State* LuaState = m_Plugin->GetLuaState(); + std::string RetVal = ""; + + std::pair< std::string, std::string > TabName = GetTabNameForRequest(a_Request); + std::string SafeTabName = TabName.second; + if( SafeTabName.empty() ) + return ""; + + sWebPluginTab* Tab = 0; + for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr ) + { + if( (*itr)->SafeTitle.compare( SafeTabName ) == 0 ) // This is the one! Rawr + { + Tab = *itr; + break; + } + } + + if( Tab ) + { + //LOGINFO("1. Stack size: %i", lua_gettop(LuaState) ); + lua_rawgeti( LuaState, LUA_REGISTRYINDEX, Tab->Reference); // same as lua_getref() + + //LOGINFO("2. Stack size: %i", lua_gettop(LuaState) ); + // Push HTTPRequest + tolua_pushusertype( LuaState, a_Request, "HTTPRequest" ); + //LOGINFO("Calling bound function! :D"); + int s = lua_pcall( LuaState, 1, 1, 0); + + if ( s != 0 ) + { + std::string err = lua_tostring(LuaState, -1); + LOGERROR("-- %s", err.c_str() ); + lua_pop(LuaState, 1); + LOGINFO("error. Stack size: %i", lua_gettop(LuaState) ); + return err; // Show the error message in the web page, looks cool + } + + if( !lua_isstring( LuaState, -1 ) ) + { + LOGWARN("WARNING: WebPlugin tab '%s' did not return a string!", Tab->Title.c_str() ); + lua_pop(LuaState, 1); // Pop return value + return std::string("WARNING: WebPlugin tab '") + Tab->Title + std::string("' did not return a string!"); + } + + RetVal += tolua_tostring(LuaState, -1, 0); + lua_pop(LuaState, 1); // Pop return value + //LOGINFO("ok. Stack size: %i", lua_gettop(LuaState) ); + } + + return RetVal; +} + +void cWebPlugin_Lua::Initialize() +{ +} + +std::pair< std::string, std::string > cWebPlugin_Lua::GetTabNameForRequest( HTTPRequest* a_Request ) +{ + std::pair< std::string, std::string > Names; + AStringVector Split = StringSplit(a_Request->Path, "/"); + + if( Split.size() > 1 ) + { + sWebPluginTab* Tab = 0; + if( Split.size() > 2 ) // If we got the tab name, show that page + { + for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr ) + { + if( (*itr)->SafeTitle.compare( Split[2] ) == 0 ) // This is the one! Rawr + { + Tab = *itr; + break; + } + } + } + else // Otherwise show the first tab + { + if( m_Tabs.size() > 0 ) + Tab = *m_Tabs.begin(); + } + + if( Tab ) + { + Names.first = Tab->Title; + Names.second = Tab->SafeTitle; + } + } + + return Names; +} + +std::list< std::pair > cWebPlugin_Lua::GetTabNames() +{ + std::list< std::pair< std::string, std::string > > NameList; + for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr ) + { + std::pair< std::string, std::string > StringPair; + StringPair.first = (*itr)->Title; + StringPair.second = (*itr)->SafeTitle; + NameList.push_back( StringPair ); + } + return NameList; } \ No newline at end of file -- cgit v1.2.3