summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-08-22 16:22:21 +0200
committerfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-08-22 16:22:21 +0200
commit7c84349990f21f783f4b24c113fb372a3c00164b (patch)
tree41cb29e214b98fc5b9c105bdf722a5c236c2318e
parentFixed cWebPlugin_Lua being not thread safe. And I don't know why, but it still crashes in Lua sometimes o_O (diff)
downloadcuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.gz
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.bz2
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.lz
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.xz
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.tar.zst
cuberite-7c84349990f21f783f4b24c113fb372a3c00164b.zip
-rw-r--r--MCServer/Plugins/Core/main.lua14
-rw-r--r--VC2008/MCServer.vcproj8
-rw-r--r--source/AllToLua.pkg1
-rw-r--r--source/Bindings.cpp198
-rw-r--r--source/Bindings.h2
-rw-r--r--source/ManualBindings.cpp27
-rw-r--r--source/cPlugin.h4
-rw-r--r--source/cPluginManager.cpp6
-rw-r--r--source/cPluginManager.h2
-rw-r--r--source/cPlugin_NewLua.cpp94
-rw-r--r--source/cPlugin_NewLua.h15
-rw-r--r--source/cWebAdmin.cpp42
-rw-r--r--source/cWebAdmin.h2
-rw-r--r--source/cWebPlugin.cpp87
-rw-r--r--source/cWebPlugin.h24
-rw-r--r--source/cWebPlugin_Lua.cpp186
-rw-r--r--source/cWebPlugin_Lua.h29
17 files changed, 366 insertions, 375 deletions
diff --git a/MCServer/Plugins/Core/main.lua b/MCServer/Plugins/Core/main.lua
index 9aed80ab1..c813f19f7 100644
--- a/MCServer/Plugins/Core/main.lua
+++ b/MCServer/Plugins/Core/main.lua
@@ -135,14 +135,12 @@ function Initialize( Plugin )
end
end
- local WebPlugin = Plugin:CreateWebPlugin()
- WebPlugin:SetName( Plugin:GetName() )
- WebPlugin:AddTab( "Server Settings", HandleRequest_ServerSettings )
- WebPlugin:AddTab( "Chat", HandleRequest_Chat )
- WebPlugin:AddTab( "Playerlist", HandleRequest_PlayerList )
- WebPlugin:AddTab( "Whitelist", HandleRequest_WhiteList )
- WebPlugin:AddTab( "Permissions", HandleRequest_Permissions )
- WebPlugin:AddTab( "Manage Plugins", HandleRequest_ManagePlugins )
+ Plugin:AddWebTab( "Server Settings", HandleRequest_ServerSettings )
+ Plugin:AddWebTab( "Chat", HandleRequest_Chat )
+ Plugin:AddWebTab( "Playerlist", HandleRequest_PlayerList )
+ Plugin:AddWebTab( "Whitelist", HandleRequest_WhiteList )
+ Plugin:AddWebTab( "Permissions", HandleRequest_Permissions )
+ Plugin:AddWebTab( "Manage Plugins", HandleRequest_ManagePlugins )
LOG( "Initialized " .. Plugin:GetName() .. " v." .. Plugin:GetVersion() )
return true
diff --git a/VC2008/MCServer.vcproj b/VC2008/MCServer.vcproj
index 9082c8de2..b4d19881b 100644
--- a/VC2008/MCServer.vcproj
+++ b/VC2008/MCServer.vcproj
@@ -1913,14 +1913,6 @@
>
</File>
<File
- RelativePath="..\source\cWebPlugin_Lua.cpp"
- >
- </File>
- <File
- RelativePath="..\source\cWebPlugin_Lua.h"
- >
- </File>
- <File
RelativePath="..\source\LuaFunctions.h"
>
</File>
diff --git a/source/AllToLua.pkg b/source/AllToLua.pkg
index 91935c058..7a81ff919 100644
--- a/source/AllToLua.pkg
+++ b/source/AllToLua.pkg
@@ -32,7 +32,6 @@ $cfile "cInventory.h"
$cfile "cItem.h"
$cfile "cWebAdmin.h"
$cfile "cWebPlugin.h"
-$cfile "cWebPlugin_Lua.h"
$cfile "cPickup.h"
$cfile "cRoot.h"
$cfile "cTCPLink.h"
diff --git a/source/Bindings.cpp b/source/Bindings.cpp
index 9c3a22232..c42c343c0 100644
--- a/source/Bindings.cpp
+++ b/source/Bindings.cpp
@@ -1,6 +1,6 @@
/*
** Lua binding: AllToLua
-** Generated automatically by tolua++-1.0.92 on 08/19/12 21:46:45.
+** Generated automatically by tolua++-1.0.92 on 08/22/12 16:11:06.
*/
#ifndef __cplusplus
@@ -41,7 +41,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S);
#include "cItem.h"
#include "cWebAdmin.h"
#include "cWebPlugin.h"
-#include "cWebPlugin_Lua.h"
#include "cPickup.h"
#include "cRoot.h"
#include "cTCPLink.h"
@@ -180,36 +179,35 @@ static void tolua_reg_types (lua_State* tolua_S)
tolua_usertype(tolua_S,"cRoot");
tolua_usertype(tolua_S,"cLuaItems");
tolua_usertype(tolua_S,"cCraftingGrid");
- tolua_usertype(tolua_S,"cLuaChunk");
tolua_usertype(tolua_S,"cPlugin::CommandStruct");
tolua_usertype(tolua_S,"cPickup");
tolua_usertype(tolua_S,"cItems");
- tolua_usertype(tolua_S,"cGroup");
+ tolua_usertype(tolua_S,"cLuaChunk");
tolua_usertype(tolua_S,"cClientHandle");
- tolua_usertype(tolua_S,"cTracer");
+ tolua_usertype(tolua_S,"cGroup");
tolua_usertype(tolua_S,"cFurnaceRecipe");
- tolua_usertype(tolua_S,"cMCLogger");
+ tolua_usertype(tolua_S,"cTracer");
tolua_usertype(tolua_S,"cChatColor");
- tolua_usertype(tolua_S,"cCuboid");
+ tolua_usertype(tolua_S,"cMCLogger");
tolua_usertype(tolua_S,"cPacket_PickupSpawn");
tolua_usertype(tolua_S,"Lua__cWebPlugin");
tolua_usertype(tolua_S,"Lua__cPawn");
- tolua_usertype(tolua_S,"Vector3i");
+ tolua_usertype(tolua_S,"cCuboid");
tolua_usertype(tolua_S,"cItem");
tolua_usertype(tolua_S,"Vector3f");
tolua_usertype(tolua_S,"cPlugin_Lua");
- tolua_usertype(tolua_S,"cWebPlugin_Lua");
+ tolua_usertype(tolua_S,"cCraftingRecipes");
tolua_usertype(tolua_S,"Lua__cPlugin_NewLua");
+ tolua_usertype(tolua_S,"Vector3i");
tolua_usertype(tolua_S,"cPawn");
- tolua_usertype(tolua_S,"Lua__cTCPLink");
tolua_usertype(tolua_S,"cWebAdmin");
+ tolua_usertype(tolua_S,"Lua__cTCPLink");
tolua_usertype(tolua_S,"cTCPLink");
- tolua_usertype(tolua_S,"cCraftingRecipes");
tolua_usertype(tolua_S,"cGroupManager");
tolua_usertype(tolua_S,"Lua__cPickup");
tolua_usertype(tolua_S,"Lua__cPlugin");
- tolua_usertype(tolua_S,"Lua__cEntity");
tolua_usertype(tolua_S,"cPluginManager");
+ tolua_usertype(tolua_S,"Lua__cEntity");
tolua_usertype(tolua_S,"cLadder");
tolua_usertype(tolua_S,"Lua__cPlayer");
tolua_usertype(tolua_S,"cWebPlugin");
@@ -7189,7 +7187,7 @@ static int tolua_AllToLua_cPluginManager_GetPlugin00(lua_State* tolua_S)
tolua_Error tolua_err;
if (
!tolua_isusertype(tolua_S,1,"const cPluginManager",0,&tolua_err) ||
- !tolua_isstring(tolua_S,2,0,&tolua_err) ||
+ !tolua_iscppstring(tolua_S,2,0,&tolua_err) ||
!tolua_isnoobj(tolua_S,3,&tolua_err)
)
goto tolua_lerror;
@@ -7197,16 +7195,17 @@ static int tolua_AllToLua_cPluginManager_GetPlugin00(lua_State* tolua_S)
#endif
{
const cPluginManager* self = (const cPluginManager*) tolua_tousertype(tolua_S,1,0);
- const char* a_Plugin = ((const char*) tolua_tostring(tolua_S,2,0));
+ const AString a_Plugin = ((const AString) tolua_tocppstring(tolua_S,2,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetPlugin'", NULL);
#endif
{
cPlugin* tolua_ret = (cPlugin*) self->GetPlugin(a_Plugin);
tolua_pushusertype(tolua_S,(void*)tolua_ret,"cPlugin");
+ tolua_pushcppstring(tolua_S,(const char*)a_Plugin);
}
}
- return 1;
+ return 2;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'GetPlugin'.",&tolua_err);
@@ -8376,8 +8375,8 @@ static int tolua_AllToLua_cPlugin_GetName00(lua_State* tolua_S)
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetName'", NULL);
#endif
{
- const char* tolua_ret = (const char*) self->GetName();
- tolua_pushstring(tolua_S,(const char*)tolua_ret);
+ const AString tolua_ret = (const AString) self->GetName();
+ tolua_pushcppstring(tolua_S,(const char*)tolua_ret);
}
}
return 1;
@@ -8397,7 +8396,7 @@ static int tolua_AllToLua_cPlugin_SetName00(lua_State* tolua_S)
tolua_Error tolua_err;
if (
!tolua_isusertype(tolua_S,1,"cPlugin",0,&tolua_err) ||
- !tolua_isstring(tolua_S,2,0,&tolua_err) ||
+ !tolua_iscppstring(tolua_S,2,0,&tolua_err) ||
!tolua_isnoobj(tolua_S,3,&tolua_err)
)
goto tolua_lerror;
@@ -8405,15 +8404,16 @@ static int tolua_AllToLua_cPlugin_SetName00(lua_State* tolua_S)
#endif
{
cPlugin* self = (cPlugin*) tolua_tousertype(tolua_S,1,0);
- const char* a_Name = ((const char*) tolua_tostring(tolua_S,2,0));
+ const AString a_Name = ((const AString) tolua_tocppstring(tolua_S,2,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetName'", NULL);
#endif
{
self->SetName(a_Name);
+ tolua_pushcppstring(tolua_S,(const char*)a_Name);
}
}
- return 0;
+ return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'SetName'.",&tolua_err);
@@ -8906,6 +8906,14 @@ public:
return ( bool ) cPlugin:: OnWeatherChanged(a_World);
};
};
+ void SetName( const AString& a_Name) {
+ if (push_method("SetName", tolua_AllToLua_cPlugin_SetName00)) {
+ tolua_pushcppstring(lua_state, (const char*)a_Name);
+ ToluaBase::dbcall(lua_state, 2, 0);
+ } else {
+ return ( void ) cPlugin:: SetName(a_Name);
+ };
+ };
void cPlugin__OnDisable( void ) {
return ( void )cPlugin::OnDisable();
@@ -8973,6 +8981,9 @@ public:
bool cPlugin__OnWeatherChanged( cWorld* a_World) {
return ( bool )cPlugin::OnWeatherChanged(a_World);
};
+ void cPlugin__SetName( const AString& a_Name) {
+ return ( void )cPlugin::SetName(a_Name);
+ };
Lua__cPlugin( void ): cPlugin(){};
};
@@ -9856,6 +9867,40 @@ static int tolua_AllToLua_Lua__cPlugin_cPlugin__OnWeatherChanged00(lua_State* to
}
#endif //#ifndef TOLUA_DISABLE
+/* method: cPlugin__SetName of class Lua__cPlugin */
+#ifndef TOLUA_DISABLE_tolua_AllToLua_Lua__cPlugin_cPlugin__SetName00
+static int tolua_AllToLua_Lua__cPlugin_cPlugin__SetName00(lua_State* tolua_S)
+{
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isusertype(tolua_S,1,"Lua__cPlugin",0,&tolua_err) ||
+ !tolua_iscppstring(tolua_S,2,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,3,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+ Lua__cPlugin* self = (Lua__cPlugin*) tolua_tousertype(tolua_S,1,0);
+ const AString a_Name = ((const AString) tolua_tocppstring(tolua_S,2,0));
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in function 'cPlugin__SetName'", NULL);
+#endif
+ {
+ self->cPlugin__SetName(a_Name);
+ tolua_pushcppstring(tolua_S,(const char*)a_Name);
+ }
+ }
+ return 1;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'cPlugin__SetName'.",&tolua_err);
+ return 0;
+#endif
+}
+#endif //#ifndef TOLUA_DISABLE
+
/* method: new of class Lua__cPlugin */
#ifndef TOLUA_DISABLE_tolua_AllToLua_Lua__cPlugin_new00
static int tolua_AllToLua_Lua__cPlugin_new00(lua_State* tolua_S)
@@ -10070,8 +10115,8 @@ static int tolua_AllToLua_cPlugin_NewLua_CreateWebPlugin00(lua_State* tolua_S)
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'CreateWebPlugin'", NULL);
#endif
{
- cWebPlugin_Lua* tolua_ret = (cWebPlugin_Lua*) self->CreateWebPlugin(a_LuaState);
- tolua_pushusertype(tolua_S,(void*)tolua_ret,"cWebPlugin_Lua");
+ OBSOLETE cPlugin_NewLua* tolua_ret = (OBSOLETE cPlugin_NewLua*) self->CreateWebPlugin(a_LuaState);
+ tolua_pushusertype(tolua_S,(void*)tolua_ret,"cPlugin_NewLua");
}
}
return 1;
@@ -10083,6 +10128,23 @@ static int tolua_AllToLua_cPlugin_NewLua_CreateWebPlugin00(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
+/* get function: __cWebPlugin__ of class cPlugin_NewLua */
+#ifndef TOLUA_DISABLE_tolua_get_cPlugin_NewLua___cWebPlugin__
+static int tolua_get_cPlugin_NewLua___cWebPlugin__(lua_State* tolua_S)
+{
+ cPlugin_NewLua* self = (cPlugin_NewLua*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable '__cWebPlugin__'",NULL);
+#endif
+#ifdef __cplusplus
+ tolua_pushusertype(tolua_S,(void*)static_cast<cWebPlugin*>(self), "cWebPlugin");
+#else
+ tolua_pushusertype(tolua_S,(void*)((cWebPlugin*)self), "cWebPlugin");
+#endif
+ return 1;
+}
+#endif //#ifndef TOLUA_DISABLE
+
class Lua__cPlugin_NewLua : public cPlugin_NewLua, public ToluaBase {
public:
void OnDisable( void ) {
@@ -10366,6 +10428,14 @@ public:
return ( bool ) cPlugin_NewLua:: OnWeatherChanged(a_World);
};
};
+ void SetName( const AString& a_Name) {
+ if (push_method("SetName", tolua_AllToLua_cPlugin_SetName00)) {
+ tolua_pushcppstring(lua_state, (const char*)a_Name);
+ ToluaBase::dbcall(lua_state, 2, 0);
+ } else {
+ return ( void ) cPlugin_NewLua:: SetName(a_Name);
+ };
+ };
void cPlugin_NewLua__OnDisable( void ) {
return ( void )cPlugin_NewLua::OnDisable();
@@ -10436,6 +10506,9 @@ public:
bool cPlugin_NewLua__OnWeatherChanged( cWorld* a_World) {
return ( bool )cPlugin_NewLua::OnWeatherChanged(a_World);
};
+ void cPlugin_NewLua__SetName( const AString& a_Name) {
+ return ( void )cPlugin_NewLua::SetName(a_Name);
+ };
};
/* method: tolua__set_instance of class Lua__cPlugin_NewLua */
@@ -13460,9 +13533,9 @@ static int tolua_AllToLua_cWebPlugin_GetName00(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
-/* method: HandleRequest of class cWebPlugin */
-#ifndef TOLUA_DISABLE_tolua_AllToLua_cWebPlugin_HandleRequest00
-static int tolua_AllToLua_cWebPlugin_HandleRequest00(lua_State* tolua_S)
+/* method: HandleWebRequest of class cWebPlugin */
+#ifndef TOLUA_DISABLE_tolua_AllToLua_cWebPlugin_HandleWebRequest00
+static int tolua_AllToLua_cWebPlugin_HandleWebRequest00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
@@ -13478,48 +13551,48 @@ static int tolua_AllToLua_cWebPlugin_HandleRequest00(lua_State* tolua_S)
cWebPlugin* self = (cWebPlugin*) tolua_tousertype(tolua_S,1,0);
HTTPRequest* a_Request = ((HTTPRequest*) tolua_tousertype(tolua_S,2,0));
#ifndef TOLUA_RELEASE
- if (!self) tolua_error(tolua_S,"invalid 'self' in function 'HandleRequest'", NULL);
+ if (!self) tolua_error(tolua_S,"invalid 'self' in function 'HandleWebRequest'", NULL);
#endif
{
- std::string tolua_ret = (std::string) self->HandleRequest(a_Request);
+ std::string tolua_ret = (std::string) self->HandleWebRequest(a_Request);
tolua_pushcppstring(tolua_S,(const char*)tolua_ret);
}
}
return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
- tolua_error(tolua_S,"#ferror in function 'HandleRequest'.",&tolua_err);
+ tolua_error(tolua_S,"#ferror in function 'HandleWebRequest'.",&tolua_err);
return 0;
#endif
}
#endif //#ifndef TOLUA_DISABLE
-/* method: Initialize of class cWebPlugin */
-#ifndef TOLUA_DISABLE_tolua_AllToLua_cWebPlugin_Initialize00
-static int tolua_AllToLua_cWebPlugin_Initialize00(lua_State* tolua_S)
+/* method: SafeString of class cWebPlugin */
+#ifndef TOLUA_DISABLE_tolua_AllToLua_cWebPlugin_SafeString00
+static int tolua_AllToLua_cWebPlugin_SafeString00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
if (
- !tolua_isusertype(tolua_S,1,"cWebPlugin",0,&tolua_err) ||
- !tolua_isnoobj(tolua_S,2,&tolua_err)
+ !tolua_isusertable(tolua_S,1,"cWebPlugin",0,&tolua_err) ||
+ !tolua_iscppstring(tolua_S,2,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,3,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
- cWebPlugin* self = (cWebPlugin*) tolua_tousertype(tolua_S,1,0);
-#ifndef TOLUA_RELEASE
- if (!self) tolua_error(tolua_S,"invalid 'self' in function 'Initialize'", NULL);
-#endif
+ const AString a_String = ((const AString) tolua_tocppstring(tolua_S,2,0));
{
- self->Initialize();
+ AString tolua_ret = (AString) cWebPlugin::SafeString(a_String);
+ tolua_pushcppstring(tolua_S,(const char*)tolua_ret);
+ tolua_pushcppstring(tolua_S,(const char*)a_String);
}
}
- return 0;
+ return 2;
#ifndef TOLUA_RELEASE
tolua_lerror:
- tolua_error(tolua_S,"#ferror in function 'Initialize'.",&tolua_err);
+ tolua_error(tolua_S,"#ferror in function 'SafeString'.",&tolua_err);
return 0;
#endif
}
@@ -13527,8 +13600,8 @@ static int tolua_AllToLua_cWebPlugin_Initialize00(lua_State* tolua_S)
class Lua__cWebPlugin : public cWebPlugin, public ToluaBase {
public:
- std::string HandleRequest( HTTPRequest* a_Request) {
- if (push_method("HandleRequest", tolua_AllToLua_cWebPlugin_HandleRequest00)) {
+ std::string HandleWebRequest( HTTPRequest* a_Request) {
+ if (push_method("HandleWebRequest", tolua_AllToLua_cWebPlugin_HandleWebRequest00)) {
tolua_pushusertype(lua_state, (void*)a_Request, "HTTPRequest");
ToluaBase::dbcall(lua_state, 2, 1);
std::string tolua_ret = ( std::string )tolua_tocppstring(lua_state, -1, 0);
@@ -13536,29 +13609,16 @@ public:
return tolua_ret;
} else {
if (lua_state)
- LOG("pure-virtual method cWebPlugin::HandleRequest not implemented.");
+ LOG("pure-virtual method cWebPlugin::HandleWebRequest not implemented.");
else {
- LOG("pure-virtual method cWebPlugin::HandleRequest called with no lua_state. Aborting");
+ LOG("pure-virtual method cWebPlugin::HandleWebRequest called with no lua_state. Aborting");
::abort();
};
return "";
};
};
- void Initialize( void ) {
- if (push_method("Initialize", tolua_AllToLua_cWebPlugin_Initialize00)) {
- ToluaBase::dbcall(lua_state, 1, 0);
- } else {
- if (lua_state)
- LOG("pure-virtual method cWebPlugin::Initialize not implemented.");
- else {
- LOG("pure-virtual method cWebPlugin::Initialize called with no lua_state. Aborting");
- ::abort();
- };
- return ( void )0;
- };
- };
- Lua__cWebPlugin( lua_State* L): cWebPlugin(L){};
+ Lua__cWebPlugin( void ): cWebPlugin(){};
};
/* method: tolua__set_instance of class Lua__cWebPlugin */
@@ -13608,9 +13668,8 @@ static int tolua_AllToLua_Lua__cWebPlugin_new00(lua_State* tolua_S)
else
#endif
{
- lua_State* L = tolua_S;
{
- Lua__cWebPlugin* tolua_ret = (Lua__cWebPlugin*) Mtolua_new((Lua__cWebPlugin)(L));
+ Lua__cWebPlugin* tolua_ret = (Lua__cWebPlugin*) Mtolua_new((Lua__cWebPlugin)());
tolua_pushusertype(tolua_S,(void*)tolua_ret,"Lua__cWebPlugin");
}
}
@@ -13637,9 +13696,8 @@ static int tolua_AllToLua_Lua__cWebPlugin_new00_local(lua_State* tolua_S)
else
#endif
{
- lua_State* L = tolua_S;
{
- Lua__cWebPlugin* tolua_ret = (Lua__cWebPlugin*) Mtolua_new((Lua__cWebPlugin)(L));
+ Lua__cWebPlugin* tolua_ret = (Lua__cWebPlugin*) Mtolua_new((Lua__cWebPlugin)());
tolua_pushusertype(tolua_S,(void*)tolua_ret,"Lua__cWebPlugin");
tolua_register_gc(tolua_S,lua_gettop(tolua_S));
}
@@ -21411,6 +21469,13 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_cclass(tolua_S,"cEntity","cEntity","",NULL);
#endif
tolua_beginmodule(tolua_S,"cEntity");
+ tolua_constant(tolua_S,"ENTITY_STATUS_HURT",cEntity::ENTITY_STATUS_HURT);
+ tolua_constant(tolua_S,"ENTITY_STATUS_DEAD",cEntity::ENTITY_STATUS_DEAD);
+ tolua_constant(tolua_S,"ENTITY_STATUS_WOLF_TAMING",cEntity::ENTITY_STATUS_WOLF_TAMING);
+ tolua_constant(tolua_S,"ENTITY_STATUS_WOLF_TAMED",cEntity::ENTITY_STATUS_WOLF_TAMED);
+ tolua_constant(tolua_S,"ENTITY_STATUS_WOLF_SHAKING",cEntity::ENTITY_STATUS_WOLF_SHAKING);
+ tolua_constant(tolua_S,"ENTITY_STATUS_EATING_ACCEPTED",cEntity::ENTITY_STATUS_EATING_ACCEPTED);
+ tolua_constant(tolua_S,"ENTITY_STATUS_SHEEP_EATING",cEntity::ENTITY_STATUS_SHEEP_EATING);
tolua_function(tolua_S,"delete",tolua_AllToLua_cEntity_delete00);
tolua_function(tolua_S,"Initialize",tolua_AllToLua_cEntity_Initialize00);
tolua_constant(tolua_S,"eEntityType_Entity",cEntity::eEntityType_Entity);
@@ -21651,6 +21716,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_function(tolua_S,"cPlugin__OnUpdatedSign",tolua_AllToLua_Lua__cPlugin_cPlugin__OnUpdatedSign00);
tolua_function(tolua_S,"cPlugin__OnUpdatingSign",tolua_AllToLua_Lua__cPlugin_cPlugin__OnUpdatingSign00);
tolua_function(tolua_S,"cPlugin__OnWeatherChanged",tolua_AllToLua_Lua__cPlugin_cPlugin__OnWeatherChanged00);
+ tolua_function(tolua_S,"cPlugin__SetName",tolua_AllToLua_Lua__cPlugin_cPlugin__SetName00);
tolua_function(tolua_S,"new",tolua_AllToLua_Lua__cPlugin_new00);
tolua_function(tolua_S,"new_local",tolua_AllToLua_Lua__cPlugin_new00_local);
tolua_function(tolua_S,".call",tolua_AllToLua_Lua__cPlugin_new00_local);
@@ -21662,6 +21728,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_function(tolua_S,"Initialize",tolua_AllToLua_cPlugin_NewLua_Initialize00);
tolua_function(tolua_S,"Tick",tolua_AllToLua_cPlugin_NewLua_Tick00);
tolua_function(tolua_S,"CreateWebPlugin",tolua_AllToLua_cPlugin_NewLua_CreateWebPlugin00);
+ tolua_variable(tolua_S,"__cWebPlugin__",tolua_get_cPlugin_NewLua___cWebPlugin__,NULL);
tolua_endmodule(tolua_S);
tolua_cclass(tolua_S,"Lua__cPlugin_NewLua","Lua__cPlugin_NewLua","cPlugin_NewLua",NULL);
tolua_beginmodule(tolua_S,"Lua__cPlugin_NewLua");
@@ -21788,8 +21855,8 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_function(tolua_S,"delete",tolua_AllToLua_cWebPlugin_delete00);
tolua_function(tolua_S,"SetName",tolua_AllToLua_cWebPlugin_SetName00);
tolua_function(tolua_S,"GetName",tolua_AllToLua_cWebPlugin_GetName00);
- tolua_function(tolua_S,"HandleRequest",tolua_AllToLua_cWebPlugin_HandleRequest00);
- tolua_function(tolua_S,"Initialize",tolua_AllToLua_cWebPlugin_Initialize00);
+ tolua_function(tolua_S,"HandleWebRequest",tolua_AllToLua_cWebPlugin_HandleWebRequest00);
+ tolua_function(tolua_S,"SafeString",tolua_AllToLua_cWebPlugin_SafeString00);
tolua_endmodule(tolua_S);
#ifdef __cplusplus
tolua_cclass(tolua_S,"Lua__cWebPlugin","Lua__cWebPlugin","cWebPlugin",tolua_collect_Lua__cWebPlugin);
@@ -21803,9 +21870,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_function(tolua_S,".call",tolua_AllToLua_Lua__cWebPlugin_new00_local);
tolua_function(tolua_S,"delete",tolua_AllToLua_Lua__cWebPlugin_delete00);
tolua_endmodule(tolua_S);
- tolua_cclass(tolua_S,"cWebPlugin_Lua","cWebPlugin_Lua","cWebPlugin",NULL);
- tolua_beginmodule(tolua_S,"cWebPlugin_Lua");
- tolua_endmodule(tolua_S);
#ifdef __cplusplus
tolua_cclass(tolua_S,"cPickup","cPickup","cEntity",tolua_collect_cPickup);
#else
diff --git a/source/Bindings.h b/source/Bindings.h
index 9487a8b7f..fe6bb39a7 100644
--- a/source/Bindings.h
+++ b/source/Bindings.h
@@ -1,6 +1,6 @@
/*
** Lua binding: AllToLua
-** Generated automatically by tolua++-1.0.92 on 08/19/12 21:46:45.
+** Generated automatically by tolua++-1.0.92 on 08/22/12 16:11:06.
*/
/* Exported function */
diff --git a/source/ManualBindings.cpp b/source/ManualBindings.cpp
index 722e71a54..10109c669 100644
--- a/source/ManualBindings.cpp
+++ b/source/ManualBindings.cpp
@@ -7,8 +7,8 @@
#include "cRoot.h"
#include "cWorld.h"
#include "cPlugin.h"
+#include "cPlugin_NewLua.h"
#include "cPluginManager.h"
-#include "cWebPlugin_Lua.h"
#include "cLuaCommandBinder.h"
#include "cPlayer.h"
#include "cWebAdmin.h"
@@ -549,9 +549,9 @@ static int tolua_cPlugin_BindCommand(lua_State* tolua_S)
-static int tolua_cWebPlugin_Lua_AddTab(lua_State* tolua_S)
+static int tolua_cPlugin_NewLua_AddWebTab(lua_State* tolua_S)
{
- cWebPlugin_Lua* self = (cWebPlugin_Lua*) tolua_tousertype(tolua_S,1,0);
+ cPlugin_NewLua* self = (cPlugin_NewLua*) tolua_tousertype(tolua_S,1,0);
tolua_Error tolua_err;
tolua_err.array = 0;
@@ -573,20 +573,20 @@ static int tolua_cWebPlugin_Lua_AddTab(lua_State* tolua_S)
{
tolua_err.type = "function";
}
- tolua_error(tolua_S,"#ferror in function 'AddTab'.",&tolua_err);
+ tolua_error(tolua_S,"#ferror in function 'AddWebTab'.",&tolua_err);
return 0;
}
if( Reference != LUA_REFNIL )
{
- if( !self->AddTab( Title.c_str(), tolua_S, Reference ) )
+ if( !self->AddWebTab( Title.c_str(), tolua_S, Reference ) )
{
luaL_unref( tolua_S, LUA_REGISTRYINDEX, Reference );
}
}
else
{
- LOGERROR("ERROR: cWebPlugin_Lua:AddTab invalid function reference in 2nd argument (Title: \"%s\")", Title.c_str() );
+ LOGERROR("ERROR: cPlugin_NewLua:AddWebTab invalid function reference in 2nd argument (Title: \"%s\")", Title.c_str() );
}
return 0;
@@ -596,6 +596,16 @@ static int tolua_cWebPlugin_Lua_AddTab(lua_State* tolua_S)
+static int tolua_cPlugin_NewLua_AddTab(lua_State* tolua_S)
+{
+ LOGWARN("WARNING: Using deprecated function AddTab()! Use AddWebTab() instead.");
+ return tolua_cPlugin_NewLua_AddWebTab( tolua_S );
+}
+
+
+
+
+
static int tolua_md5(lua_State* tolua_S)
{
std::string SourceString = tolua_tostring(tolua_S, 1, 0);
@@ -709,8 +719,9 @@ void ManualBindings::Bind( lua_State* tolua_S )
tolua_function(tolua_S, "GetResolvedPermissions", tolua_cPlayer_GetResolvedPermissions);
tolua_endmodule(tolua_S);
- tolua_beginmodule(tolua_S, "cWebPlugin_Lua");
- tolua_function(tolua_S, "AddTab", tolua_cWebPlugin_Lua_AddTab);
+ tolua_beginmodule(tolua_S, "cPlugin_NewLua");
+ tolua_function(tolua_S, "AddWebTab", tolua_cPlugin_NewLua_AddWebTab);
+ tolua_function(tolua_S, "AddTab", tolua_cPlugin_NewLua_AddTab);
tolua_endmodule(tolua_S);
tolua_cclass(tolua_S,"HTTPRequest","HTTPRequest","",NULL);
diff --git a/source/cPlugin.h b/source/cPlugin.h
index c3f7c41b6..5c8befdec 100644
--- a/source/cPlugin.h
+++ b/source/cPlugin.h
@@ -70,8 +70,8 @@ public:
virtual bool OnWeatherChanged (cWorld * a_World);
// Accessors
- const char* GetName() const { return m_Name.c_str(); }
- void SetName( const char* a_Name ) { m_Name = a_Name; }
+ const AString & GetName() const { return m_Name; }
+ virtual void SetName( const AString & a_Name ) { m_Name = a_Name; }
int GetVersion() const { return m_Version; }
void SetVersion( int a_Version ) { m_Version = a_Version; }
diff --git a/source/cPluginManager.cpp b/source/cPluginManager.cpp
index ec75a2e11..041180818 100644
--- a/source/cPluginManager.cpp
+++ b/source/cPluginManager.cpp
@@ -623,11 +623,11 @@ bool cPluginManager::CallHookUpdatedSign(cWorld * a_World, int a_BlockX, int a_B
-cPlugin* cPluginManager::GetPlugin( const char* a_Plugin ) const
+cPlugin* cPluginManager::GetPlugin( const AString & a_Plugin ) const
{
for( PluginList::const_iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ++itr )
{
- if (strcmp((*itr)->GetName(), a_Plugin) == 0 )
+ if ((*itr)->GetName().compare(a_Plugin) == 0)
{
return *itr;
}
@@ -657,8 +657,6 @@ void cPluginManager::UnloadPluginsNow()
cPlugin_Lua* LuaPlugin = *m_LuaPlugins.begin();
if( LuaPlugin )
{
- cWebAdmin* WebAdmin = cRoot::Get()->GetWebAdmin();
- if( WebAdmin ) WebAdmin->RemovePlugin( LuaPlugin->GetLuaState() );
delete LuaPlugin;
}
m_LuaPlugins.remove( LuaPlugin );
diff --git a/source/cPluginManager.h b/source/cPluginManager.h
index fbde66935..7be7451a1 100644
--- a/source/cPluginManager.h
+++ b/source/cPluginManager.h
@@ -83,7 +83,7 @@ public: //tolua_export
static cPluginManager * GetPluginManager(); //tolua_export
typedef std::list< cPlugin * > PluginList;
- cPlugin* GetPlugin( const char* a_Plugin ) const; //tolua_export
+ cPlugin * GetPlugin( const AString & a_Plugin ) const; //tolua_export
const PluginList & GetAllPlugins() const; // >> EXPORTED IN MANUALBINDINGS <<
void ReloadPlugins(); //tolua_export
diff --git a/source/cPlugin_NewLua.cpp b/source/cPlugin_NewLua.cpp
index fcea9e475..df197e273 100644
--- a/source/cPlugin_NewLua.cpp
+++ b/source/cPlugin_NewLua.cpp
@@ -4,7 +4,6 @@
#define LUA_USE_POSIX
#include "cPlugin_NewLua.h"
#include "cMCLogger.h"
-#include "cWebPlugin_Lua.h"
#include "LuaItems.h"
extern "C"
@@ -34,6 +33,7 @@ extern bool report_errors(lua_State* lua, int status);
cPlugin_NewLua::cPlugin_NewLua( const char* a_PluginName )
: m_LuaState( 0 )
+ , cWebPlugin()
{
m_Directory = a_PluginName;
}
@@ -45,11 +45,6 @@ cPlugin_NewLua::cPlugin_NewLua( const char* a_PluginName )
cPlugin_NewLua::~cPlugin_NewLua()
{
cCSLock Lock( m_CriticalSection );
- for( WebPluginList::iterator itr = m_WebPlugins.begin(); itr != m_WebPlugins.end(); ++itr )
- {
- delete *itr;
- }
- m_WebPlugins.clear();
if( m_LuaState )
{
@@ -638,22 +633,97 @@ bool cPlugin_NewLua::OnUpdatedSign(
-cWebPlugin_Lua* cPlugin_NewLua::CreateWebPlugin(lua_State* a_LuaState)
+cPlugin_NewLua* cPlugin_NewLua::CreateWebPlugin(lua_State* a_LuaState)
+{
+ LOGWARN("WARNING: Using deprecated function CreateWebPlugin()! A Lua plugin is a WebPlugin by itself now.");
+ return this;
+}
+
+
+
+
+
+AString cPlugin_NewLua::HandleWebRequest( HTTPRequest * a_Request )
+{
+ cCSLock Lock( m_CriticalSection );
+ 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 = GetTabs().begin(); itr != GetTabs().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(m_LuaState) );
+ lua_rawgeti( m_LuaState, LUA_REGISTRYINDEX, Tab->UserData); // same as lua_getref()
+
+ //LOGINFO("2. Stack size: %i", lua_gettop(m_LuaState) );
+ // Push HTTPRequest
+ tolua_pushusertype( m_LuaState, a_Request, "HTTPRequest" );
+ //LOGINFO("Calling bound function! :D");
+ int s = lua_pcall( m_LuaState, 1, 1, 0);
+
+ if ( s != 0 )
+ {
+ std::string err = lua_tostring(m_LuaState, -1);
+ LOGERROR("-- %s", err.c_str() );
+ lua_pop(m_LuaState, 1);
+ LOGINFO("error. Stack size: %i", lua_gettop(m_LuaState) );
+ return err; // Show the error message in the web page, looks cool
+ }
+
+ if( !lua_isstring( m_LuaState, -1 ) )
+ {
+ LOGWARN("WARNING: WebPlugin tab '%s' did not return a string!", Tab->Title.c_str() );
+ lua_pop(m_LuaState, 1); // Pop return value
+ return std::string("WARNING: WebPlugin tab '") + Tab->Title + std::string("' did not return a string!");
+ }
+
+ RetVal += tolua_tostring(m_LuaState, -1, 0);
+ lua_pop(m_LuaState, 1); // Pop return value
+ //LOGINFO("ok. Stack size: %i", lua_gettop(m_LuaState) );
+ }
+
+ return RetVal;
+}
+
+
+
+
+
+bool cPlugin_NewLua::AddWebTab( const AString & a_Title, lua_State * a_LuaState, int a_FunctionReference )
{
cCSLock Lock( m_CriticalSection );
if( a_LuaState != m_LuaState )
{
- LOGERROR("Not allowed to create a WebPlugin from another plugin but your own!");
- return 0;
+ LOGERROR("Only allowed to add a tab to a WebPlugin of your own Plugin!");
+ return false;
}
- cWebPlugin_Lua* WebPlugin = new cWebPlugin_Lua( this );
+ sWebPluginTab* Tab = new sWebPluginTab();
+ Tab->Title = a_Title;
+ Tab->SafeTitle = SafeString( a_Title );
- m_WebPlugins.push_back( WebPlugin );
+ Tab->UserData = a_FunctionReference;
- return WebPlugin;
+ GetTabs().push_back( Tab );
+ return true;
}
+
+
+
// Helper functions
bool cPlugin_NewLua::PushFunction( const char* a_FunctionName, bool a_bLogError /* = true */ )
{
diff --git a/source/cPlugin_NewLua.h b/source/cPlugin_NewLua.h
index 20b74b490..d48c38127 100644
--- a/source/cPlugin_NewLua.h
+++ b/source/cPlugin_NewLua.h
@@ -2,6 +2,7 @@
#pragma once
#include "cPlugin.h"
+#include "cWebPlugin.h"
@@ -14,7 +15,7 @@ class cWebPlugin_Lua;
-class cPlugin_NewLua : public cPlugin //tolua_export
+class cPlugin_NewLua : public cPlugin, public cWebPlugin //tolua_export
{ //tolua_export
public: //tolua_export
cPlugin_NewLua( const char* a_PluginName );
@@ -46,18 +47,22 @@ public: //tolua_export
virtual bool OnUpdatingSign (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4) override;
virtual bool OnWeatherChanged (cWorld * a_World) override;
+ virtual void SetName( const AString & a_Name ) override { cPlugin::SetName(a_Name); cWebPlugin::SetName(a_Name); }
+
+ // cWebPlugin and WebAdmin stuff
+ virtual AString HandleWebRequest( HTTPRequest * a_Request ) override;
+ bool AddWebTab( const AString & a_Title, lua_State * a_LuaState, int a_FunctionReference ); // >> EXPORTED IN MANUALBINDINGS <<
+ OBSOLETE bool AddTab( const AString & a_Title, lua_State * a_LuaState, int a_FunctionReference ); // >> EXPORTED IN MANUALBINDINGS <<
+
lua_State* GetLuaState() { return m_LuaState; }
- cWebPlugin_Lua* CreateWebPlugin(lua_State* a_LuaState); //tolua_export
+ OBSOLETE cPlugin_NewLua * CreateWebPlugin(lua_State* a_LuaState); //tolua_export
cCriticalSection & GetCriticalSection() { return m_CriticalSection; }
private:
bool PushFunction( const char* a_FunctionName, bool a_bLogError = true );
bool CallFunction( int a_NumArgs, int a_NumResults, const char* a_FunctionName ); // a_FunctionName is only used for error messages, nothing else
- typedef std::list< cWebPlugin_Lua* > WebPluginList;
- WebPluginList m_WebPlugins;
-
cCriticalSection m_CriticalSection;
std::string m_Directory;
diff --git a/source/cWebAdmin.cpp b/source/cWebAdmin.cpp
index 9bb8e8e27..e70d60f7f 100644
--- a/source/cWebAdmin.cpp
+++ b/source/cWebAdmin.cpp
@@ -80,13 +80,13 @@ cWebAdmin::~cWebAdmin()
delete m_Event;
}
-void cWebAdmin::AddPlugin( cWebPlugin* a_Plugin )
+void cWebAdmin::AddPlugin( cWebPlugin * a_Plugin )
{
m_Plugins.remove( a_Plugin );
m_Plugins.push_back( a_Plugin );
}
-void cWebAdmin::RemovePlugin( cWebPlugin* a_Plugin )
+void cWebAdmin::RemovePlugin( cWebPlugin * a_Plugin )
{
m_Plugins.remove( a_Plugin );
}
@@ -161,18 +161,10 @@ void cWebAdmin::Request_Handler(webserver::http_request* r)
for (PluginList::iterator itr = WebAdmin->m_Plugins.begin(); itr != WebAdmin->m_Plugins.end(); ++itr)
{
cWebPlugin* WebPlugin = *itr;
- cWebPlugin_Lua* LuaPlugin = dynamic_cast< cWebPlugin_Lua* >( WebPlugin );
- if( LuaPlugin )
+ std::list< std::pair<std::string, std::string> > NameList = WebPlugin->GetTabNames();
+ for( std::list< std::pair<std::string, std::string> >::iterator Names = NameList.begin(); Names != NameList.end(); ++Names )
{
- std::list< std::pair<std::string, std::string> > NameList = LuaPlugin->GetTabNames();
- for( std::list< std::pair<std::string, std::string> >::iterator Names = NameList.begin(); Names != NameList.end(); ++Names )
- {
- Menu += "<li><a href='" + BaseURL + WebPlugin->GetName() + "/" + (*Names).second + "'>" + (*Names).first + "</a></li>";
- }
- }
- else
- {
- Menu += "<li><a href='" + BaseURL + WebPlugin->GetName() + "'>" + WebPlugin->GetName() + "</a></li>";
+ Menu += "<li><a href='" + BaseURL + WebPlugin->GetName().c_str() + "/" + (*Names).second + "'>" + (*Names).first + "</a></li>";
}
}
@@ -201,7 +193,7 @@ void cWebAdmin::Request_Handler(webserver::http_request* r)
{
if( (*itr)->GetName() == Split[1] )
{
- Content = (*itr)->HandleRequest( &Request );
+ Content = (*itr)->HandleWebRequest( &Request );
cWebPlugin* WebPlugin = *itr;
FoundPlugin = WebPlugin->GetName();
cWebPlugin_Lua* LuaPlugin = dynamic_cast< cWebPlugin_Lua* >( WebPlugin );
@@ -229,7 +221,7 @@ void cWebAdmin::Request_Handler(webserver::http_request* r)
for( cPluginManager::PluginList::const_iterator itr = List.begin(); itr != List.end(); ++itr )
{
AString VersionNum;
- AppendPrintf(Content, "<li>%s V.%i</li>", (*itr)->GetName(), (*itr)->GetVersion());
+ AppendPrintf(Content, "<li>%s V.%i</li>", (*itr)->GetName().c_str(), (*itr)->GetVersion());
}
}
Content += "</ul>";
@@ -371,22 +363,4 @@ std::string cWebAdmin::GetTemplate()
f.ReadRestOfFile(retVal);
return retVal;
-}
-
-
-
-
-
-void cWebAdmin::RemovePlugin( lua_State* L )
-{
- for( PluginList::iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); )
- {
- if( (*itr)->GetLuaState() == L )
- {
- PluginList::iterator prev = itr++;
- delete *prev; // deleting a dereferenced iterator also takes it out of the list, so no need for erase()
- }
- else
- ++itr;
- }
-}
+} \ No newline at end of file
diff --git a/source/cWebAdmin.h b/source/cWebAdmin.h
index 9eca47105..8d4837e7a 100644
--- a/source/cWebAdmin.h
+++ b/source/cWebAdmin.h
@@ -43,8 +43,6 @@ public:
PluginList GetPlugins() { return m_Plugins; }
static void Request_Handler(webserver::http_request* r);
-
- void RemovePlugin( lua_State* L );
private:
#ifdef _WIN32
diff --git a/source/cWebPlugin.cpp b/source/cWebPlugin.cpp
index 186662ba8..d0f0c9a9c 100644
--- a/source/cWebPlugin.cpp
+++ b/source/cWebPlugin.cpp
@@ -10,17 +10,100 @@
-cWebPlugin::cWebPlugin( lua_State* L )
+cWebPlugin::cWebPlugin()
{
LOG("cWebPlugin::cWebPlugin()");
- m_LuaState = L;
cWebAdmin* WebAdmin = cRoot::Get()->GetWebAdmin();
if( WebAdmin ) WebAdmin->AddPlugin( this );
}
+
+
+
+
cWebPlugin::~cWebPlugin()
{
LOG("~cWebPlugin::cWebPlugin()");
cWebAdmin* WebAdmin = cRoot::Get()->GetWebAdmin();
if( WebAdmin ) WebAdmin->RemovePlugin( this );
+
+ for( TabList::iterator itr = m_Tabs.begin(); itr != m_Tabs.end(); ++itr )
+ {
+ delete *itr;
+ }
+ m_Tabs.clear();
+}
+
+
+
+
+
+std::list< std::pair<std::string, std::string> > cWebPlugin::GetTabNames()
+{
+ std::list< std::pair< std::string, std::string > > NameList;
+ for( TabList::iterator itr = GetTabs().begin(); itr != GetTabs().end(); ++itr )
+ {
+ std::pair< std::string, std::string > StringPair;
+ StringPair.first = (*itr)->Title;
+ StringPair.second = (*itr)->SafeTitle;
+ NameList.push_back( StringPair );
+ }
+ return NameList;
+}
+
+
+
+
+
+std::pair< std::string, std::string > cWebPlugin::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 = GetTabs().begin(); itr != GetTabs().end(); ++itr )
+ {
+ if( (*itr)->SafeTitle.compare( Split[2] ) == 0 ) // This is the one! Rawr
+ {
+ Tab = *itr;
+ break;
+ }
+ }
+ }
+ else // Otherwise show the first tab
+ {
+ if( GetTabs().size() > 0 )
+ Tab = *GetTabs().begin();
+ }
+
+ if( Tab )
+ {
+ Names.first = Tab->Title;
+ Names.second = Tab->SafeTitle;
+ }
+ }
+
+ return Names;
+}
+
+
+
+
+AString cWebPlugin::SafeString( const AString & 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;
} \ No newline at end of file
diff --git a/source/cWebPlugin.h b/source/cWebPlugin.h
index e6eb00559..c4f08015b 100644
--- a/source/cWebPlugin.h
+++ b/source/cWebPlugin.h
@@ -7,18 +7,32 @@ struct HTTPRequest;
class cWebPlugin
{
public:
- cWebPlugin( lua_State* L );
+ cWebPlugin();
virtual ~cWebPlugin();
void SetName( std::string a_Name ) { m_Name = a_Name; }
std::string GetName() { return m_Name; }
- virtual std::string HandleRequest( HTTPRequest* a_Request ) = 0;
- virtual void Initialize() = 0;
+ virtual std::string HandleWebRequest( HTTPRequest* a_Request ) = 0;
+
+ static AString SafeString( const AString & a_String );
//tolua_end
- lua_State* GetLuaState() { return m_LuaState; }
+ struct sWebPluginTab
+ {
+ std::string Title;
+ std::string SafeTitle;
+
+ int UserData;
+ };
+
+ typedef std::list< sWebPluginTab* > TabList;
+ TabList & GetTabs() { return m_Tabs; }
+
+ std::list< std::pair<std::string, std::string> > GetTabNames();
+ std::pair< std::string, std::string > GetTabNameForRequest( HTTPRequest* a_Request );
+
private:
- lua_State* m_LuaState;
+ TabList m_Tabs;
std::string m_Name;
}; //tolua_export \ No newline at end of file
diff --git a/source/cWebPlugin_Lua.cpp b/source/cWebPlugin_Lua.cpp
deleted file mode 100644
index 7d17378f9..000000000
--- a/source/cWebPlugin_Lua.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-
-#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 )
-{
- cCSLock( m_Plugin->GetCriticalSection() );
- 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<std::string, std::string> > 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
diff --git a/source/cWebPlugin_Lua.h b/source/cWebPlugin_Lua.h
deleted file mode 100644
index a63ddf323..000000000
--- a/source/cWebPlugin_Lua.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#pragma once
-
-#include "cWebPlugin.h"
-
-class cPlugin_NewLua;
-typedef struct lua_State lua_State;
-
-// a WebPlugin class more specialized for Lua
-class cWebPlugin_Lua : public cWebPlugin //tolua_export
-{ //tolua_export
-public: //tolua_export
- cWebPlugin_Lua( cPlugin_NewLua* a_Plugin );
- virtual ~cWebPlugin_Lua();
-
- bool AddTab( const char* a_Title, lua_State * a_LuaState, int a_FunctionReference ); // >> EXPORTED IN MANUALBINDINGS <<
-
- virtual std::string HandleRequest( HTTPRequest* a_Request );
- virtual void Initialize();
-
- std::pair< std::string, std::string > GetTabNameForRequest( HTTPRequest* a_Request );
-
- std::list< std::pair<std::string, std::string> > GetTabNames();
-private:
- cPlugin_NewLua* m_Plugin;
-
- struct sWebPluginTab;
- typedef std::list< sWebPluginTab* > TabList;
- TabList m_Tabs;
-}; //tolua_export \ No newline at end of file