Introducing StringUtils - the place to be if you are a generic string routine :) No more sprintf()!
git-svn-id: http://mc-server.googlecode.com/svn/trunk@209 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
3364ecc284
commit
bb49f0e021
@ -197,18 +197,6 @@
|
|||||||
RelativePath="..\source\cAuthenticator.h"
|
RelativePath="..\source\cAuthenticator.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cBlockEntity.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cBlockToPickup.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cBlockToPickup.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cChatColor.cpp"
|
RelativePath="..\source\cChatColor.cpp"
|
||||||
>
|
>
|
||||||
@ -277,18 +265,6 @@
|
|||||||
RelativePath="..\source\cCuboid.h"
|
RelativePath="..\source\cCuboid.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cDoors.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cEntity.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cEntity.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cFileFormatUpdater.cpp"
|
RelativePath="..\source\cFileFormatUpdater.cpp"
|
||||||
>
|
>
|
||||||
@ -297,14 +273,6 @@
|
|||||||
RelativePath="..\source\cFileFormatUpdater.h"
|
RelativePath="..\source\cFileFormatUpdater.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cFurnaceEntity.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cFurnaceEntity.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cFurnaceRecipe.cpp"
|
RelativePath="..\source\cFurnaceRecipe.cpp"
|
||||||
>
|
>
|
||||||
@ -353,18 +321,6 @@
|
|||||||
RelativePath="..\source\cInventory.h"
|
RelativePath="..\source\cInventory.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cItem.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cItem.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cLadder.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cLog.cpp"
|
RelativePath="..\source\cLog.cpp"
|
||||||
>
|
>
|
||||||
@ -373,14 +329,6 @@
|
|||||||
RelativePath="..\source\cLog.h"
|
RelativePath="..\source\cLog.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cMakeDir.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cMakeDir.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cMCLogger.cpp"
|
RelativePath="..\source\cMCLogger.cpp"
|
||||||
>
|
>
|
||||||
@ -431,38 +379,6 @@
|
|||||||
RelativePath="..\source\cNoise.inc"
|
RelativePath="..\source\cNoise.inc"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cPawn.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cPawn.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cPickup.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cPickup.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cPiston.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cPiston.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cPlayer.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cPlayer.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cPlugin.cpp"
|
RelativePath="..\source\cPlugin.cpp"
|
||||||
>
|
>
|
||||||
@ -523,14 +439,6 @@
|
|||||||
RelativePath="..\source\cSign.h"
|
RelativePath="..\source\cSign.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cSignEntity.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cSignEntity.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cSimulator.cpp"
|
RelativePath="..\source\cSimulator.cpp"
|
||||||
>
|
>
|
||||||
@ -555,18 +463,6 @@
|
|||||||
RelativePath="..\source\cSocket.h"
|
RelativePath="..\source\cSocket.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cStairs.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cStringMap.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cStringMap.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cTCPLink.cpp"
|
RelativePath="..\source\cTCPLink.cpp"
|
||||||
>
|
>
|
||||||
@ -575,14 +471,6 @@
|
|||||||
RelativePath="..\source\cTCPLink.h"
|
RelativePath="..\source\cTCPLink.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cThread.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\source\cThread.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cTimer.cpp"
|
RelativePath="..\source\cTimer.cpp"
|
||||||
>
|
>
|
||||||
@ -591,10 +479,6 @@
|
|||||||
RelativePath="..\source\cTimer.h"
|
RelativePath="..\source\cTimer.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\source\cTorch.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cTracer.cpp"
|
RelativePath="..\source\cTracer.cpp"
|
||||||
>
|
>
|
||||||
@ -715,6 +599,14 @@
|
|||||||
RelativePath="..\source\ptr_cChunk.h"
|
RelativePath="..\source\ptr_cChunk.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\StringUtils.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\StringUtils.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\Vector3d.cpp"
|
RelativePath="..\source\Vector3d.cpp"
|
||||||
>
|
>
|
||||||
@ -1320,8 +1212,100 @@
|
|||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Items"
|
Name="Entities"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cBlockEntity.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cBlockToPickup.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cBlockToPickup.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cDoors.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cEntity.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cEntity.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cFurnaceEntity.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cFurnaceEntity.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cItem.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cItem.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cLadder.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cPawn.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cPawn.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cPickup.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cPickup.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cPiston.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cPiston.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cPlayer.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cPlayer.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cSignEntity.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cSignEntity.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cStairs.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cTorch.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="UI"
|
Name="UI"
|
||||||
@ -1450,6 +1434,14 @@
|
|||||||
RelativePath="..\source\cFile.h"
|
RelativePath="..\source\cFile.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cMakeDir.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cMakeDir.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cSemaphore.cpp"
|
RelativePath="..\source\cSemaphore.cpp"
|
||||||
>
|
>
|
||||||
@ -1466,6 +1458,14 @@
|
|||||||
RelativePath="..\source\cSleep.h"
|
RelativePath="..\source\cSleep.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cThread.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cThread.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Bindings"
|
Name="Bindings"
|
||||||
@ -1502,6 +1502,14 @@
|
|||||||
RelativePath="..\source\cPlugin_NewLua.h"
|
RelativePath="..\source\cPlugin_NewLua.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cStringMap.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\cStringMap.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\cWebPlugin_Lua.cpp"
|
RelativePath="..\source\cWebPlugin_Lua.cpp"
|
||||||
>
|
>
|
||||||
|
@ -463,6 +463,7 @@
|
|||||||
<ClCompile Include="..\source\packets\cPacket_WindowClose.cpp" />
|
<ClCompile Include="..\source\packets\cPacket_WindowClose.cpp" />
|
||||||
<ClCompile Include="..\source\packets\cPacket_WindowOpen.cpp" />
|
<ClCompile Include="..\source\packets\cPacket_WindowOpen.cpp" />
|
||||||
<ClCompile Include="..\source\SquirrelBindings.cpp" />
|
<ClCompile Include="..\source\SquirrelBindings.cpp" />
|
||||||
|
<ClCompile Include="..\source\StringUtils.cpp" />
|
||||||
<ClCompile Include="..\source\Vector3d.cpp" />
|
<ClCompile Include="..\source\Vector3d.cpp" />
|
||||||
<ClCompile Include="..\source\Vector3f.cpp" />
|
<ClCompile Include="..\source\Vector3f.cpp" />
|
||||||
<ClCompile Include="..\source\Vector3i.cpp" />
|
<ClCompile Include="..\source\Vector3i.cpp" />
|
||||||
@ -632,6 +633,7 @@
|
|||||||
<ClInclude Include="..\source\packets\cPacket_WindowOpen.h" />
|
<ClInclude Include="..\source\packets\cPacket_WindowOpen.h" />
|
||||||
<ClInclude Include="..\source\ptr_cChunk.h" />
|
<ClInclude Include="..\source\ptr_cChunk.h" />
|
||||||
<ClInclude Include="..\source\SquirrelBindings.h" />
|
<ClInclude Include="..\source\SquirrelBindings.h" />
|
||||||
|
<ClInclude Include="..\source\StringUtils.h" />
|
||||||
<ClInclude Include="..\source\Vector3d.h" />
|
<ClInclude Include="..\source\Vector3d.h" />
|
||||||
<ClInclude Include="..\source\Vector3f.h" />
|
<ClInclude Include="..\source\Vector3f.h" />
|
||||||
<ClInclude Include="..\source\Vector3i.h" />
|
<ClInclude Include="..\source\Vector3i.h" />
|
||||||
|
@ -909,6 +909,7 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\source\Globals.cpp" />
|
<ClCompile Include="..\source\Globals.cpp" />
|
||||||
<ClCompile Include="..\source\cFile.cpp" />
|
<ClCompile Include="..\source\cFile.cpp" />
|
||||||
|
<ClCompile Include="..\source\StringUtils.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\source\cServer.h">
|
<ClInclude Include="..\source\cServer.h">
|
||||||
@ -1399,6 +1400,7 @@
|
|||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\source\Globals.h" />
|
<ClInclude Include="..\source\Globals.h" />
|
||||||
<ClInclude Include="..\source\cFile.h" />
|
<ClInclude Include="..\source\cFile.h" />
|
||||||
|
<ClInclude Include="..\source\StringUtils.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\source\AllToLua.pkg">
|
<None Include="..\source\AllToLua.pkg">
|
||||||
|
@ -54,6 +54,7 @@
|
|||||||
|
|
||||||
|
|
||||||
// Common headers:
|
// Common headers:
|
||||||
|
#include "../source/StringUtils.h"
|
||||||
#include "../source/cCriticalSection.h"
|
#include "../source/cCriticalSection.h"
|
||||||
#include "../source/cMCLogger.h"
|
#include "../source/cMCLogger.h"
|
||||||
|
|
||||||
|
@ -49,25 +49,6 @@
|
|||||||
|
|
||||||
webserver::request_func webserver::request_func_=0;
|
webserver::request_func webserver::request_func_=0;
|
||||||
|
|
||||||
static std::vector< std::string > StringSplit(std::string str, std::string delim)
|
|
||||||
{
|
|
||||||
std::vector< std::string > results;
|
|
||||||
size_t cutAt;
|
|
||||||
while( (cutAt = str.find_first_of(delim)) != str.npos )
|
|
||||||
{
|
|
||||||
if(cutAt > 0)
|
|
||||||
{
|
|
||||||
results.push_back(str.substr(0,cutAt));
|
|
||||||
}
|
|
||||||
str = str.substr(cutAt+1);
|
|
||||||
}
|
|
||||||
if(str.length() > 0)
|
|
||||||
{
|
|
||||||
results.push_back(str);
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
static std::string EatLine( std::string& a_String )
|
static std::string EatLine( std::string& a_String )
|
||||||
{
|
{
|
||||||
std::string RetVal = "";
|
std::string RetVal = "";
|
||||||
@ -140,8 +121,7 @@ void ParseMultipartFormData( webserver::http_request& req, Socket* s)
|
|||||||
static const std::string multipart_form_data = "multipart/form-data";
|
static const std::string multipart_form_data = "multipart/form-data";
|
||||||
if(req.content_type_.substr(0, multipart_form_data.size()) == multipart_form_data) // Difficult data... :(
|
if(req.content_type_.substr(0, multipart_form_data.size()) == multipart_form_data) // Difficult data... :(
|
||||||
{
|
{
|
||||||
typedef std::vector< std::string > StringVector;
|
AStringVector ContentTypeData = StringSplit( req.content_type_, "; " );
|
||||||
StringVector ContentTypeData = StringSplit( req.content_type_, "; " );
|
|
||||||
|
|
||||||
std::string boundary;
|
std::string boundary;
|
||||||
// Find boundary
|
// Find boundary
|
||||||
@ -208,7 +188,7 @@ void ParseMultipartFormData( webserver::http_request& req, Socket* s)
|
|||||||
static const std::string disp_filename = "filename=";
|
static const std::string disp_filename = "filename=";
|
||||||
|
|
||||||
// Parse the disposition
|
// Parse the disposition
|
||||||
StringVector DispositionData = StringSplit( f_disposition, "; " );
|
AStringVector DispositionData = StringSplit( f_disposition, "; " );
|
||||||
for( unsigned int i = 0; i < DispositionData.size(); ++i )
|
for( unsigned int i = 0; i < DispositionData.size(); ++i )
|
||||||
{
|
{
|
||||||
if( DispositionData[i].substr(0, disp_name.size()) == disp_name )
|
if( DispositionData[i].substr(0, disp_name.size()) == disp_name )
|
||||||
|
8
makefile
8
makefile
@ -247,7 +247,8 @@ MCServer : \
|
|||||||
build/cFileFormatUpdater.o\
|
build/cFileFormatUpdater.o\
|
||||||
build/cItem.o\
|
build/cItem.o\
|
||||||
build/cPlugin_NewLua.o\
|
build/cPlugin_NewLua.o\
|
||||||
build/cWebPlugin_Lua.o
|
build/cWebPlugin_Lua.o\
|
||||||
|
build/StringUtils.o
|
||||||
$(CC) $(LNK_OPTIONS) \
|
$(CC) $(LNK_OPTIONS) \
|
||||||
build/json_reader.o\
|
build/json_reader.o\
|
||||||
build/json_value.o\
|
build/json_value.o\
|
||||||
@ -458,6 +459,7 @@ MCServer : \
|
|||||||
build/cItem.o\
|
build/cItem.o\
|
||||||
build/cPlugin_NewLua.o\
|
build/cPlugin_NewLua.o\
|
||||||
build/cWebPlugin_Lua.o\
|
build/cWebPlugin_Lua.o\
|
||||||
|
build/StringUtils.o\
|
||||||
-o MCServer
|
-o MCServer
|
||||||
|
|
||||||
clean :
|
clean :
|
||||||
@ -671,6 +673,7 @@ clean :
|
|||||||
build/cItem.o\
|
build/cItem.o\
|
||||||
build/cPlugin_NewLua.o\
|
build/cPlugin_NewLua.o\
|
||||||
build/cWebPlugin_Lua.o\
|
build/cWebPlugin_Lua.o\
|
||||||
|
build/StringUtils.o\
|
||||||
MCServer
|
MCServer
|
||||||
|
|
||||||
install : MCServer
|
install : MCServer
|
||||||
@ -1528,4 +1531,7 @@ build/cPlugin_NewLua.o : source/cPlugin_NewLua.cpp
|
|||||||
build/cWebPlugin_Lua.o : source/cWebPlugin_Lua.cpp
|
build/cWebPlugin_Lua.o : source/cWebPlugin_Lua.cpp
|
||||||
$(CC) $(CC_OPTIONS) source/cWebPlugin_Lua.cpp -c $(INCLUDE) -o build/cWebPlugin_Lua.o
|
$(CC) $(CC_OPTIONS) source/cWebPlugin_Lua.cpp -c $(INCLUDE) -o build/cWebPlugin_Lua.o
|
||||||
|
|
||||||
|
build/StringUtils.o : source/StringUtils.cpp
|
||||||
|
$(CC) $(CC_OPTIONS) source/StringUtils.cpp -c $(INCLUDE) -o build/StringUtils.o
|
||||||
|
|
||||||
##### END RUN ####
|
##### END RUN ####
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <memory.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -42,6 +43,13 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Compatibility:
|
||||||
|
#define ASSERT assert
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// STL stuff:
|
// STL stuff:
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <list>
|
#include <list>
|
||||||
@ -54,6 +62,7 @@
|
|||||||
|
|
||||||
|
|
||||||
// Common headers:
|
// Common headers:
|
||||||
|
#include "StringUtils.h"
|
||||||
#include "cSleep.h"
|
#include "cSleep.h"
|
||||||
#include "cCriticalSection.h"
|
#include "cCriticalSection.h"
|
||||||
#include "cSemaphore.h"
|
#include "cSemaphore.h"
|
||||||
|
@ -15,7 +15,9 @@
|
|||||||
#include "cStringMap.h"
|
#include "cStringMap.h"
|
||||||
#include "md5/md5.h"
|
#include "md5/md5.h"
|
||||||
|
|
||||||
extern std::vector<std::string> StringSplit(std::string str, std::string delim);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/****************************
|
/****************************
|
||||||
* Lua bound functions with special return types
|
* Lua bound functions with special return types
|
||||||
@ -26,7 +28,7 @@ static int tolua_StringSplit(lua_State* tolua_S)
|
|||||||
std::string str = ((std::string) tolua_tocppstring(tolua_S,1,0));
|
std::string str = ((std::string) tolua_tocppstring(tolua_S,1,0));
|
||||||
std::string delim = ((std::string) tolua_tocppstring(tolua_S,2,0));
|
std::string delim = ((std::string) tolua_tocppstring(tolua_S,2,0));
|
||||||
|
|
||||||
std::vector<std::string> Split = StringSplit( str, delim );
|
AStringVector Split = StringSplit( str, delim );
|
||||||
|
|
||||||
lua_createtable(tolua_S, Split.size(), 0);
|
lua_createtable(tolua_S, Split.size(), 0);
|
||||||
int newTable = lua_gettop(tolua_S);
|
int newTable = lua_gettop(tolua_S);
|
||||||
@ -41,6 +43,10 @@ static int tolua_StringSplit(lua_State* tolua_S)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_LOG(lua_State* tolua_S)
|
static int tolua_LOG(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
const char* str = tolua_tocppstring(tolua_S,1,0);
|
const char* str = tolua_tocppstring(tolua_S,1,0);
|
||||||
@ -48,6 +54,10 @@ static int tolua_LOG(lua_State* tolua_S)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_LOGINFO(lua_State* tolua_S)
|
static int tolua_LOGINFO(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
const char* str = tolua_tocppstring(tolua_S,1,0);
|
const char* str = tolua_tocppstring(tolua_S,1,0);
|
||||||
@ -55,6 +65,10 @@ static int tolua_LOGINFO(lua_State* tolua_S)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_LOGWARN(lua_State* tolua_S)
|
static int tolua_LOGWARN(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
const char* str = tolua_tocppstring(tolua_S,1,0);
|
const char* str = tolua_tocppstring(tolua_S,1,0);
|
||||||
@ -62,6 +76,10 @@ static int tolua_LOGWARN(lua_State* tolua_S)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_LOGERROR(lua_State* tolua_S)
|
static int tolua_LOGERROR(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
const char* str = tolua_tocppstring(tolua_S,1,0);
|
const char* str = tolua_tocppstring(tolua_S,1,0);
|
||||||
@ -69,6 +87,10 @@ static int tolua_LOGERROR(lua_State* tolua_S)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_cWorld_GetAllPlayers(lua_State* tolua_S)
|
static int tolua_cWorld_GetAllPlayers(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
cWorld* self = (cWorld*) tolua_tousertype(tolua_S,1,0);
|
cWorld* self = (cWorld*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -79,6 +101,10 @@ static int tolua_cWorld_GetAllPlayers(lua_State* tolua_S)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_cPlugin_GetCommands(lua_State* tolua_S)
|
static int tolua_cPlugin_GetCommands(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
cPlugin* self = (cPlugin*) tolua_tousertype(tolua_S,1,0);
|
cPlugin* self = (cPlugin*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -100,6 +126,10 @@ static int tolua_cPlugin_GetCommands(lua_State* tolua_S)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_cPluginManager_GetAllPlugins(lua_State* tolua_S)
|
static int tolua_cPluginManager_GetAllPlugins(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0);
|
cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -121,6 +151,10 @@ static int tolua_cPluginManager_GetAllPlugins(lua_State* tolua_S)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_cPlayer_GetGroups(lua_State* tolua_S)
|
static int tolua_cPlayer_GetGroups(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0);
|
cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -142,6 +176,10 @@ static int tolua_cPlayer_GetGroups(lua_State* tolua_S)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_cPlayer_GetResolvedPermissions(lua_State* tolua_S)
|
static int tolua_cPlayer_GetResolvedPermissions(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0);
|
cPlayer* self = (cPlayer*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -163,6 +201,10 @@ static int tolua_cPlayer_GetResolvedPermissions(lua_State* tolua_S)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_cPlugin_BindCommand(lua_State* tolua_S)
|
static int tolua_cPlugin_BindCommand(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
cPlugin* self = (cPlugin*) tolua_tousertype(tolua_S,1,0);
|
cPlugin* self = (cPlugin*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -217,6 +259,10 @@ static int tolua_cPlugin_BindCommand(lua_State* tolua_S)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_cWebPlugin_Lua_AddTab(lua_State* tolua_S)
|
static int tolua_cWebPlugin_Lua_AddTab(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
cWebPlugin_Lua* self = (cWebPlugin_Lua*) tolua_tousertype(tolua_S,1,0);
|
cWebPlugin_Lua* self = (cWebPlugin_Lua*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -260,6 +306,10 @@ static int tolua_cWebPlugin_Lua_AddTab(lua_State* tolua_S)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_md5(lua_State* tolua_S)
|
static int tolua_md5(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
std::string SourceString = tolua_tostring(tolua_S, 1, 0);
|
std::string SourceString = tolua_tostring(tolua_S, 1, 0);
|
||||||
@ -268,6 +318,10 @@ static int tolua_md5(lua_State* tolua_S)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_push_StringStringMap(lua_State* tolua_S, std::map< std::string, std::string >& a_StringStringMap )
|
static int tolua_push_StringStringMap(lua_State* tolua_S, std::map< std::string, std::string >& a_StringStringMap )
|
||||||
{
|
{
|
||||||
lua_newtable(tolua_S);
|
lua_newtable(tolua_S);
|
||||||
@ -285,18 +339,30 @@ static int tolua_push_StringStringMap(lua_State* tolua_S, std::map< std::string,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_get_HTTPRequest_Params(lua_State* tolua_S)
|
static int tolua_get_HTTPRequest_Params(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
HTTPRequest* self = (HTTPRequest*) tolua_tousertype(tolua_S,1,0);
|
HTTPRequest* self = (HTTPRequest*) tolua_tousertype(tolua_S,1,0);
|
||||||
return tolua_push_StringStringMap(tolua_S, self->Params);
|
return tolua_push_StringStringMap(tolua_S, self->Params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_get_HTTPRequest_PostParams(lua_State* tolua_S)
|
static int tolua_get_HTTPRequest_PostParams(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
HTTPRequest* self = (HTTPRequest*) tolua_tousertype(tolua_S,1,0);
|
HTTPRequest* self = (HTTPRequest*) tolua_tousertype(tolua_S,1,0);
|
||||||
return tolua_push_StringStringMap(tolua_S, self->PostParams);
|
return tolua_push_StringStringMap(tolua_S, self->PostParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_get_HTTPRequest_FormData(lua_State* tolua_S)
|
static int tolua_get_HTTPRequest_FormData(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
HTTPRequest* self = (HTTPRequest*) tolua_tousertype(tolua_S,1,0);
|
HTTPRequest* self = (HTTPRequest*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -316,6 +382,10 @@ static int tolua_get_HTTPRequest_FormData(lua_State* tolua_S)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ManualBindings::Bind( lua_State* tolua_S )
|
void ManualBindings::Bind( lua_State* tolua_S )
|
||||||
{
|
{
|
||||||
tolua_beginmodule(tolua_S,NULL);
|
tolua_beginmodule(tolua_S,NULL);
|
||||||
@ -357,3 +427,7 @@ void ManualBindings::Bind( lua_State* tolua_S )
|
|||||||
|
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
129
source/StringUtils.cpp
Normal file
129
source/StringUtils.cpp
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
|
||||||
|
// StringUtils.cpp
|
||||||
|
|
||||||
|
// Implements the various string helper functions:
|
||||||
|
|
||||||
|
#include "Globals.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString & AppendVPrintf(AString & str, const char *format, va_list args)
|
||||||
|
{
|
||||||
|
ASSERT(format != NULL);
|
||||||
|
|
||||||
|
char buffer[2048];
|
||||||
|
size_t len;
|
||||||
|
if ((len = _vsnprintf_s(buffer, ARRAYCOUNT(buffer), _TRUNCATE, format, args)) != -1)
|
||||||
|
{
|
||||||
|
str.append(buffer, len);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
len = _vscprintf(format, args);
|
||||||
|
if (len == -1)
|
||||||
|
{
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
std::auto_ptr<char> tmp(new char[len + 1]);
|
||||||
|
ASSERT(tmp.get() != NULL); // Why not alloced? Is the length reasonable?
|
||||||
|
if (tmp.get() == NULL)
|
||||||
|
{
|
||||||
|
throw std::bad_alloc();
|
||||||
|
}
|
||||||
|
if ((len = vsprintf_s(tmp.get(), len + 1, format, args)) != -1)
|
||||||
|
{
|
||||||
|
str.append(tmp.get(), len);
|
||||||
|
}
|
||||||
|
ASSERT(len != -1);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString & Printf(AString & str, const char *format, ...)
|
||||||
|
{
|
||||||
|
str.clear();
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
std::string &retval = AppendVPrintf(str, format, args);
|
||||||
|
va_end(args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString & AppendPrintf(AString &str, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
std::string &retval = AppendVPrintf(str, format, args);
|
||||||
|
va_end(args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AStringVector StringSplit(const AString & str, const AString & delim)
|
||||||
|
{
|
||||||
|
AStringVector results;
|
||||||
|
size_t cutAt = 0;
|
||||||
|
size_t Prev = 0;
|
||||||
|
while ((cutAt = str.find_first_of(delim, Prev)) != str.npos)
|
||||||
|
{
|
||||||
|
if (cutAt > 0)
|
||||||
|
{
|
||||||
|
results.push_back(str.substr(0, cutAt));
|
||||||
|
}
|
||||||
|
Prev = cutAt + delim.length();
|
||||||
|
}
|
||||||
|
if (Prev < str.length())
|
||||||
|
{
|
||||||
|
results.push_back(str.substr(Prev));
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString & StrToUpper(AString & s)
|
||||||
|
{
|
||||||
|
AString::iterator i = s.begin();
|
||||||
|
AString::iterator end = s.end();
|
||||||
|
|
||||||
|
while (i != end)
|
||||||
|
{
|
||||||
|
*i = (char)toupper(*i);
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int NoCaseCompare(const AString & s1, const AString & s2)
|
||||||
|
{
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
// MSVC has stricmp that compares case-insensitive:
|
||||||
|
return stricmp(s1.c_str(), s2.c_str());
|
||||||
|
#else
|
||||||
|
// Do it the hard way:
|
||||||
|
AString s1Copy(s1);
|
||||||
|
AString s2Copy(s2);
|
||||||
|
return StrToUpper(s1Copy).compare(StrToUpper(s2Copy));
|
||||||
|
#endif // else _MSC_VER
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
51
source/StringUtils.h
Normal file
51
source/StringUtils.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
|
||||||
|
// StringUtils.h
|
||||||
|
|
||||||
|
// Interfaces to various string helper functions
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef STRINGUTILS_H_INCLUDED
|
||||||
|
#define STRINGUTILS_H_INCLUDED
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef std::string AString;
|
||||||
|
typedef std::vector<AString> AStringVector;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// Add the formated string to the existing data in the string
|
||||||
|
extern AString & AppendVPrintf(AString & str, const char * format, va_list args);
|
||||||
|
|
||||||
|
/// Output the formatted text into the string
|
||||||
|
extern AString & Printf (AString & str, const char * format, ...);
|
||||||
|
|
||||||
|
/// Add the formatted string to the existing data in the string
|
||||||
|
extern AString & AppendPrintf (AString & str, const char * format, ...);
|
||||||
|
|
||||||
|
/// Split the string at delimiters, return as a stringvector
|
||||||
|
extern AStringVector StringSplit(const AString & str, const AString & delim);
|
||||||
|
|
||||||
|
/// In-place string conversion to uppercase; returns the same string
|
||||||
|
extern AString & StrToUpper(AString & s);
|
||||||
|
|
||||||
|
/// Case-insensitive string comparison; returns 0 if the strings are the same
|
||||||
|
extern int NoCaseCompare(const AString & s1, const AString & s2);
|
||||||
|
|
||||||
|
|
||||||
|
// If you have any other string helper functions, declare them here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // STRINGUTILS_H_INCLUDED
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -7,7 +7,9 @@
|
|||||||
#include "cChatColor.h"
|
#include "cChatColor.h"
|
||||||
#include "cRoot.h"
|
#include "cRoot.h"
|
||||||
|
|
||||||
extern std::vector< std::string > StringSplit( std::string str, std::string delim);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef std::map< std::string, cGroup* > GroupMap;
|
typedef std::map< std::string, cGroup* > GroupMap;
|
||||||
struct cGroupManager::sGroupManagerState
|
struct cGroupManager::sGroupManagerState
|
||||||
@ -57,7 +59,7 @@ cGroupManager::cGroupManager()
|
|||||||
std::string Commands = IniFile.GetValue( KeyName, "Commands", "" );
|
std::string Commands = IniFile.GetValue( KeyName, "Commands", "" );
|
||||||
if( Commands.size() > 0 )
|
if( Commands.size() > 0 )
|
||||||
{
|
{
|
||||||
std::vector< std::string > Split = StringSplit( Commands, "," );
|
AStringVector Split = StringSplit( Commands, "," );
|
||||||
for( unsigned int i = 0; i < Split.size(); i++)
|
for( unsigned int i = 0; i < Split.size(); i++)
|
||||||
{
|
{
|
||||||
Group->AddCommand( Split[i] );
|
Group->AddCommand( Split[i] );
|
||||||
@ -68,7 +70,7 @@ cGroupManager::cGroupManager()
|
|||||||
std::string Permissions = IniFile.GetValue( KeyName, "Permissions", "" );
|
std::string Permissions = IniFile.GetValue( KeyName, "Permissions", "" );
|
||||||
if( Permissions.size() > 0 )
|
if( Permissions.size() > 0 )
|
||||||
{
|
{
|
||||||
std::vector< std::string > Split = StringSplit( Permissions, "," );
|
AStringVector Split = StringSplit( Permissions, "," );
|
||||||
for( unsigned int i = 0; i < Split.size(); i++)
|
for( unsigned int i = 0; i < Split.size(); i++)
|
||||||
{
|
{
|
||||||
Group->AddPermission( Split[i] );
|
Group->AddPermission( Split[i] );
|
||||||
@ -79,7 +81,7 @@ cGroupManager::cGroupManager()
|
|||||||
std::string Groups = IniFile.GetValue( KeyName, "Inherits", "" );
|
std::string Groups = IniFile.GetValue( KeyName, "Inherits", "" );
|
||||||
if( Groups.size() > 0 )
|
if( Groups.size() > 0 )
|
||||||
{
|
{
|
||||||
std::vector< std::string > Split = StringSplit( Groups, "," );
|
AStringVector Split = StringSplit( Groups, "," );
|
||||||
for( unsigned int i = 0; i < Split.size(); i++)
|
for( unsigned int i = 0; i < Split.size(); i++)
|
||||||
{
|
{
|
||||||
Group->InheritFrom( GetGroup( Split[i].c_str() ) );
|
Group->InheritFrom( GetGroup( Split[i].c_str() ) );
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern std::vector<std::string> StringSplit(std::string str, std::string delim);
|
|
||||||
extern bool report_errors(lua_State* lua, int status);
|
extern bool report_errors(lua_State* lua, int status);
|
||||||
|
|
||||||
cLuaCommandBinder::cLuaCommandBinder()
|
cLuaCommandBinder::cLuaCommandBinder()
|
||||||
@ -58,8 +57,11 @@ bool cLuaCommandBinder::BindCommand( const std::string & a_Command, const std::s
|
|||||||
|
|
||||||
bool cLuaCommandBinder::HandleCommand( const std::string & a_Command, cPlayer* a_Player )
|
bool cLuaCommandBinder::HandleCommand( const std::string & a_Command, cPlayer* a_Player )
|
||||||
{
|
{
|
||||||
std::vector<std::string> Split = StringSplit( a_Command, " ");
|
AStringVector Split = StringSplit(a_Command, " ");
|
||||||
if( Split.size() == 0 ) return false;
|
if (Split.size() == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
CommandMap::iterator FoundCommand = m_BoundCommands.find( Split[0] );
|
CommandMap::iterator FoundCommand = m_BoundCommands.find( Split[0] );
|
||||||
if( FoundCommand != m_BoundCommands.end() )
|
if( FoundCommand != m_BoundCommands.end() )
|
||||||
|
@ -13,7 +13,9 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
extern std::vector<std::string> StringSplit(std::string str, std::string delim);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct cMonsterConfig::sAttributesStruct
|
struct cMonsterConfig::sAttributesStruct
|
||||||
{
|
{
|
||||||
@ -61,7 +63,7 @@ void cMonsterConfig::Initialize() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<string> SplitList = StringSplit(m_pState->MonsterTypes,",");
|
AStringVector SplitList = StringSplit(m_pState->MonsterTypes,",");
|
||||||
for(unsigned int i = 0; i < SplitList.size(); ++i) {
|
for(unsigned int i = 0; i < SplitList.size(); ++i) {
|
||||||
if(!SplitList[i].empty()) {
|
if(!SplitList[i].empty()) {
|
||||||
printf("Getting Attributes for: %s \n",SplitList[i].c_str());
|
printf("Getting Attributes for: %s \n",SplitList[i].c_str());
|
||||||
|
@ -1,14 +1,25 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <cstdio>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// fwd: "cWorld.h"
|
||||||
class cWorld;
|
class cWorld;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class cPiston
|
class cPiston
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
cPiston( cWorld* a_World );
|
cPiston( cWorld* a_World );
|
||||||
|
|
||||||
static char RotationPitchToMetaData( float a_Rotation, float a_Pitch )
|
static char RotationPitchToMetaData( float a_Rotation, float a_Pitch )
|
||||||
{
|
{
|
||||||
std::printf("pre:a_Rotation %f \n",a_Rotation);
|
std::printf("pre:a_Rotation %f \n",a_Rotation);
|
||||||
std::printf("a_Pitch %f \n",a_Pitch);
|
std::printf("a_Pitch %f \n",a_Pitch);
|
||||||
|
|
||||||
@ -31,15 +42,19 @@ static char RotationPitchToMetaData( float a_Rotation, float a_Pitch )
|
|||||||
else
|
else
|
||||||
{ std::printf("4444\n");return 0x3;}
|
{ std::printf("4444\n");return 0x3;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExtendPiston( int, int, int );
|
void ExtendPiston( int, int, int );
|
||||||
void RetractPiston( int, int, int );
|
void RetractPiston( int, int, int );
|
||||||
|
|
||||||
cWorld* m_World;
|
cWorld* m_World;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ChainMove( int, int, int, char, unsigned short * );
|
void ChainMove( int, int, int, char, unsigned short * );
|
||||||
unsigned short FirstPassthroughBlock( int, int, int, char );
|
unsigned short FirstPassthroughBlock( int, int, int, char );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,13 +43,11 @@
|
|||||||
#include "../iniFile/iniFile.h"
|
#include "../iniFile/iniFile.h"
|
||||||
#include <json/json.h>
|
#include <json/json.h>
|
||||||
|
|
||||||
#ifndef _WIN32 // for mkdir
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#define sprintf_s(dst, size, format, ...) sprintf(dst, format, __VA_ARGS__ )
|
|
||||||
#endif
|
|
||||||
#define float2int(x) ((x)<0 ? ((int)(x))-1 : (int)(x))
|
#define float2int(x) ((x)<0 ? ((int)(x))-1 : (int)(x))
|
||||||
extern std::vector< std::string > StringSplit( std::string str, std::string delim);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS_DEFINITION( cPlayer, cPawn );
|
CLASS_DEFINITION( cPlayer, cPawn );
|
||||||
|
|
||||||
@ -557,9 +555,13 @@ bool cPlayer::CanUseCommand( const char* a_Command )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPlayer::HasPermission( const char* a_Permission )
|
bool cPlayer::HasPermission( const char* a_Permission )
|
||||||
{
|
{
|
||||||
std::vector< std::string > Split = StringSplit( a_Permission, "." );
|
AStringVector Split = StringSplit( a_Permission, "." );
|
||||||
PermissionMap Possibilities = m_pState->ResolvedPermissions;
|
PermissionMap Possibilities = m_pState->ResolvedPermissions;
|
||||||
// Now search the namespaces
|
// Now search the namespaces
|
||||||
while( Possibilities.begin() != Possibilities.end() )
|
while( Possibilities.begin() != Possibilities.end() )
|
||||||
@ -567,7 +569,7 @@ bool cPlayer::HasPermission( const char* a_Permission )
|
|||||||
PermissionMap::iterator itr = Possibilities.begin();
|
PermissionMap::iterator itr = Possibilities.begin();
|
||||||
if( itr->second )
|
if( itr->second )
|
||||||
{
|
{
|
||||||
std::vector< std::string > OtherSplit = StringSplit( itr->first, "." );
|
AStringVector OtherSplit = StringSplit( itr->first, "." );
|
||||||
if( OtherSplit.size() <= Split.size() )
|
if( OtherSplit.size() <= Split.size() )
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -589,6 +591,10 @@ bool cPlayer::HasPermission( const char* a_Permission )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPlayer::IsInGroup( const char* a_Group )
|
bool cPlayer::IsInGroup( const char* a_Group )
|
||||||
{
|
{
|
||||||
for( GroupList::iterator itr = m_pState->ResolvedGroups.begin(); itr != m_pState->ResolvedGroups.end(); ++itr )
|
for( GroupList::iterator itr = m_pState->ResolvedGroups.begin(); itr != m_pState->ResolvedGroups.end(); ++itr )
|
||||||
@ -743,7 +749,7 @@ void cPlayer::LoadPermissionsFromDisk()
|
|||||||
std::string Groups = IniFile.GetValue(m_pState->PlayerName, "Groups", "");
|
std::string Groups = IniFile.GetValue(m_pState->PlayerName, "Groups", "");
|
||||||
if( Groups.size() > 0 )
|
if( Groups.size() > 0 )
|
||||||
{
|
{
|
||||||
std::vector< std::string > Split = StringSplit( Groups, "," );
|
AStringVector Split = StringSplit( Groups, "," );
|
||||||
for( unsigned int i = 0; i < Split.size(); i++ )
|
for( unsigned int i = 0; i < Split.size(); i++ )
|
||||||
{
|
{
|
||||||
AddToGroup( Split[i].c_str() );
|
AddToGroup( Split[i].c_str() );
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
#include "cPlugin.h"
|
#include "cPlugin.h"
|
||||||
#include "cPlugin_Lua.h"
|
#include "cPlugin_Lua.h"
|
||||||
#include "cPlugin_NewLua.h"
|
#include "cPlugin_NewLua.h"
|
||||||
#include "cMCLogger.h"
|
|
||||||
#include "cWebAdmin.h"
|
#include "cWebAdmin.h"
|
||||||
#include "cItem.h"
|
#include "cItem.h"
|
||||||
#include "cRoot.h"
|
#include "cRoot.h"
|
||||||
@ -15,17 +14,15 @@
|
|||||||
|
|
||||||
#include "SquirrelBindings.h"
|
#include "SquirrelBindings.h"
|
||||||
#if USE_SQUIRREL
|
#if USE_SQUIRREL
|
||||||
#pragma warning(disable:4100;disable:4127;disable:4510;disable:4610;disable:4244;disable:4512) // Getting A LOT of these warnings from SqPlus
|
#pragma warning(disable:4100;disable:4127;disable:4510;disable:4610;disable:4244;disable:4512) // Getting A LOT of these warnings from SqPlus
|
||||||
#include <sqplus/sqplus.h>
|
#include <sqplus/sqplus.h>
|
||||||
#pragma warning(default:4100;default:4127;default:4510;default:4610;default:4244;default:4512)
|
#pragma warning(default:4100;default:4127;default:4510;default:4610;default:4244;default:4512)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern std::vector<std::string> StringSplit(std::string str, std::string delim);
|
|
||||||
|
|
||||||
typedef std::list< cPlugin_Lua* > LuaPluginList;
|
typedef std::list< cPlugin_Lua* > LuaPluginList;
|
||||||
typedef std::map< cPluginManager::PluginHook, cPluginManager::PluginList > HookMap;
|
typedef std::map< cPluginManager::PluginHook, cPluginManager::PluginList > HookMap;
|
||||||
|
|
||||||
@ -96,7 +93,7 @@ void cPluginManager::ReloadPluginsNow()
|
|||||||
// allow for comma separated plugin list
|
// allow for comma separated plugin list
|
||||||
// degrades and works fine for the plugin
|
// degrades and works fine for the plugin
|
||||||
// per line
|
// per line
|
||||||
std::vector< std::string > split = StringSplit( PluginFile, "," );
|
AStringVector split = StringSplit( PluginFile, "," );
|
||||||
for (unsigned int j = 0; j < split.size(); j++) {
|
for (unsigned int j = 0; j < split.size(); j++) {
|
||||||
cPlugin_Lua* Plugin = new cPlugin_Lua( (split[j] + std::string(".lua") ).c_str() );
|
cPlugin_Lua* Plugin = new cPlugin_Lua( (split[j] + std::string(".lua") ).c_str() );
|
||||||
if( !AddLuaPlugin( Plugin ) )
|
if( !AddLuaPlugin( Plugin ) )
|
||||||
|
@ -347,6 +347,10 @@ void ServerTickThread( void * a_Param )
|
|||||||
LOG("TICK THREAD STOPPED");
|
LOG("TICK THREAD STOPPED");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cServer::StartListenThread()
|
void cServer::StartListenThread()
|
||||||
{
|
{
|
||||||
m_pState->pListenThread = new cThread( ServerListenThread, this, "cServer::ServerListenThread" );
|
m_pState->pListenThread = new cThread( ServerListenThread, this, "cServer::ServerListenThread" );
|
||||||
@ -355,50 +359,24 @@ void cServer::StartListenThread()
|
|||||||
m_pState->pTickThread->Start( true );
|
m_pState->pTickThread->Start( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector< std::string > StringSplit(std::string str, std::string delim)
|
|
||||||
{
|
|
||||||
std::vector< std::string > results;
|
|
||||||
size_t cutAt;
|
|
||||||
while( (cutAt = str.find_first_of(delim)) != str.npos )
|
|
||||||
{
|
|
||||||
if(cutAt > 0)
|
|
||||||
{
|
|
||||||
results.push_back(str.substr(0,cutAt));
|
|
||||||
}
|
|
||||||
str = str.substr(cutAt+1);
|
|
||||||
}
|
|
||||||
if(str.length() > 0)
|
|
||||||
{
|
|
||||||
results.push_back(str);
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
bool from_string(T& t,
|
bool from_string(
|
||||||
|
T& t,
|
||||||
const std::string& s,
|
const std::string& s,
|
||||||
std::ios_base& (*f)(std::ios_base&))
|
std::ios_base& (*f)(std::ios_base&)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
std::istringstream iss(s);
|
std::istringstream iss(s);
|
||||||
return !(iss >> f >> t).fail();
|
return !(iss >> f >> t).fail();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string & StrToUpper(std::string& s)
|
|
||||||
{
|
|
||||||
std::string::iterator i = s.begin();
|
|
||||||
std::string::iterator end = s.end();
|
|
||||||
|
|
||||||
while (i != end) {
|
|
||||||
*i = (char)toupper(*i);
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
int NoCaseCompare( std::string s1, std::string s2 )
|
|
||||||
{
|
|
||||||
return StrToUpper( s1 ).compare( StrToUpper( s2 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cServer::Command( cClientHandle & a_Client, const char* a_Cmd )
|
bool cServer::Command( cClientHandle & a_Client, const char* a_Cmd )
|
||||||
{
|
{
|
||||||
@ -410,11 +388,11 @@ bool cServer::Command( cClientHandle & a_Client, const char* a_Cmd )
|
|||||||
if( Command.length() <= 0 ) return false;
|
if( Command.length() <= 0 ) return false;
|
||||||
if( Command[0] != '/' ) return false;
|
if( Command[0] != '/' ) return false;
|
||||||
|
|
||||||
std::vector< std::string > split = StringSplit( Command, " " );
|
AStringVector split = StringSplit( Command, " " );
|
||||||
if( split.size() == 0 )
|
if( split.size() == 0 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( split[0].compare("/coords") == 0 )
|
if (split[0].compare("/coords") == 0)
|
||||||
{
|
{
|
||||||
char c_Str[128];
|
char c_Str[128];
|
||||||
sprintf_s( c_Str, 128, "[X:%0.2f] [Y:%0.2f] [Z:%0.2f]", a_Client.GetPlayer()->GetPosX(), a_Client.GetPlayer()->GetPosY(), a_Client.GetPlayer()->GetPosZ() );
|
sprintf_s( c_Str, 128, "[X:%0.2f] [Y:%0.2f] [Z:%0.2f]", a_Client.GetPlayer()->GetPosX(), a_Client.GetPlayer()->GetPosY(), a_Client.GetPlayer()->GetPosZ() );
|
||||||
@ -426,8 +404,8 @@ bool cServer::Command( cClientHandle & a_Client, const char* a_Cmd )
|
|||||||
|
|
||||||
void cServer::ServerCommand( const char* a_Cmd )
|
void cServer::ServerCommand( const char* a_Cmd )
|
||||||
{
|
{
|
||||||
std::string Command( a_Cmd );
|
AString Command( a_Cmd );
|
||||||
std::vector< std::string > split = StringSplit( Command, " " );
|
AStringVector split = StringSplit( Command, " " );
|
||||||
if( split.size() > 0 )
|
if( split.size() > 0 )
|
||||||
{
|
{
|
||||||
if( split[0].compare( "help" ) == 0 )
|
if( split[0].compare( "help" ) == 0 )
|
||||||
|
@ -21,16 +21,17 @@
|
|||||||
#include <psapi.h>
|
#include <psapi.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <memory> // auto_ptr
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern std::vector<std::string> StringSplit(std::string str, std::string delim);
|
cWebAdmin * WebAdmin = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cWebAdmin* WebAdmin = 0;
|
|
||||||
|
|
||||||
cWebAdmin::cWebAdmin( int a_Port /* = 8080 */ )
|
cWebAdmin::cWebAdmin( int a_Port /* = 8080 */ )
|
||||||
: m_Port( a_Port )
|
: m_Port( a_Port )
|
||||||
@ -75,12 +76,16 @@ void cWebAdmin::RemovePlugin( cWebPlugin* a_Plugin )
|
|||||||
m_Plugins.remove( a_Plugin );
|
m_Plugins.remove( a_Plugin );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cWebAdmin::Request_Handler(webserver::http_request* r)
|
void cWebAdmin::Request_Handler(webserver::http_request* r)
|
||||||
{
|
{
|
||||||
if( WebAdmin == 0 ) return;
|
if( WebAdmin == 0 ) return;
|
||||||
LOG("Path: %s", r->path_.c_str() );
|
LOG("Path: %s", r->path_.c_str() );
|
||||||
|
|
||||||
std::vector< std::string > Split = StringSplit( r->path_, "/" );
|
AStringVector Split = StringSplit( r->path_, "/" );
|
||||||
|
|
||||||
if(r->path_ == "/")
|
if(r->path_ == "/")
|
||||||
{
|
{
|
||||||
|
@ -8,6 +8,15 @@
|
|||||||
#include "cWebAdmin.h"
|
#include "cWebAdmin.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern bool report_errors(lua_State* lua, int status);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static std::string SafeString( const std::string& a_String )
|
static std::string SafeString( const std::string& a_String )
|
||||||
{
|
{
|
||||||
std::string RetVal;
|
std::string RetVal;
|
||||||
@ -24,8 +33,8 @@ static std::string SafeString( const std::string& a_String )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern bool report_errors(lua_State* lua, int status);
|
|
||||||
extern std::vector<std::string> StringSplit(std::string str, std::string delim);
|
|
||||||
|
|
||||||
struct cWebPlugin_Lua::sWebPluginTab
|
struct cWebPlugin_Lua::sWebPluginTab
|
||||||
{
|
{
|
||||||
@ -130,7 +139,7 @@ void cWebPlugin_Lua::Initialize()
|
|||||||
std::pair< std::string, std::string > cWebPlugin_Lua::GetTabNameForRequest( HTTPRequest* a_Request )
|
std::pair< std::string, std::string > cWebPlugin_Lua::GetTabNameForRequest( HTTPRequest* a_Request )
|
||||||
{
|
{
|
||||||
std::pair< std::string, std::string > Names;
|
std::pair< std::string, std::string > Names;
|
||||||
std::vector<std::string> Split = StringSplit( a_Request->Path, "/" );
|
AStringVector Split = StringSplit(a_Request->Path, "/");
|
||||||
|
|
||||||
if( Split.size() > 1 )
|
if( Split.size() > 1 )
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user