summaryrefslogtreecommitdiffstats
path: root/source/WebAdmin.h
blob: 3e57bbf008b97c4e85d8505c81936795dc80a7be (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#pragma once

#include "../WebServer/WebServer.h"
#include "OSSupport/Socket.h"

class cStringMap;
class cLuaScript;

struct HTTPFormData     // tolua_export
{                       // tolua_export
	std::string Name;   // tolua_export
	std::string Value;  // tolua_export
	std::string Type;   // tolua_export
};// tolua_export

struct HTTPRequest  // tolua_export
{                   // tolua_export
	typedef std::map< std::string, std::string > StringStringMap;
	typedef std::map< std::string, HTTPFormData > FormDataMap;
	AString Method;             // tolua_export
	AString Path;               // tolua_export
	StringStringMap Params;     // >> EXPORTED IN MANUALBINDINGS <<
	StringStringMap PostParams; // >> EXPORTED IN MANUALBINDINGS <<
	AString Username;           // tolua_export
	FormDataMap FormData;       // >> EXPORTED IN MANUALBINDINGS <<
}; // tolua_export

struct HTTPTemplateRequest // tolua_export
{                          // tolua_export
	HTTPRequest Request;   // tolua_export

}; // tolua_export

// tolua_begin
struct sWebAdminPage
{
	AString Content;
	AString PluginName;
	AString TabName;
};
// tolua_end

struct lua_State;
class cEvent;
class cIniFile;
class cWebPlugin;

class cWebAdmin // tolua_export
{               // tolua_export
public:         // tolua_export
	cWebAdmin( int a_Port = 8080 );
	~cWebAdmin();

	bool                Init( int a_Port );

	void                AddPlugin( cWebPlugin* a_Plugin );
	void                RemovePlugin( cWebPlugin* a_Plugin );

	typedef std::list< cWebPlugin* > PluginList;

	// TODO: Convert this to the auto-locking callback mechanism used for looping players in worlds and such
	PluginList          GetPlugins() const { return m_Plugins; } // >> EXPORTED IN MANUALBINDINGS <<

	static void         Request_Handler(webserver::http_request* r);

	int                 GetPort() { return m_Port; } // tolua_export

	sWebAdminPage       GetPage(const HTTPRequest& a_Request); // tolua_export
	AString             GetBaseURL(const AString& a_URL); // tolua_export
	AString             GetBaseURL(const AStringVector& a_URLSplit);

	AString             GetMemoryUsage() const; // tolua_export
private:

#ifdef _WIN32
	static DWORD WINAPI ListenThread(LPVOID lpParam);
#else
	static void *       ListenThread( void *lpParam );
#endif

	AString             GetTemplate();

	cLuaScript*         m_pTemplate;

	int                 m_Port;

	bool                m_bConnected;
	cSocket             m_ListenSocket;

	cIniFile*           m_IniFile;
	PluginList          m_Plugins;

	cEvent*             m_Event;

	webserver*          m_WebServer;
}; // tolua_export