00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined(__INCLUDE_ServerWebServerh_INCLUDE__)
00022 #define __INCLUDE_ServerWebServerh_INCLUDE__
00023
00024 #include <net/NetServerTCP.h>
00025 #include <common/FileLogger.h>
00026 #include <webserver/ServerWebServerQueue.h>
00027
00028 class ServerWebServer : public NetMessageHandlerI
00029 {
00030 public:
00031 static ServerWebServer *instance();
00032
00033 void start(int port);
00034 void processMessages();
00035 void addRequestHandler(const char *url,
00036 ServerWebServerI *handler);
00037 void addThrededRequestHandler(const char *url,
00038 ServerWebServerI *handler);
00039 void addAsyncRequestHandler(const char *url,
00040 ServerWebServerI *handler);
00041
00042 protected:
00043 static ServerWebServer *instance_;
00044
00045 struct HandlerEntry
00046 {
00047 enum Flags
00048 {
00049 eAsync = 1,
00050 eThreaded = 2
00051 };
00052
00053 ServerWebServerI *handler;
00054 unsigned int flags;
00055 };
00056 std::map<std::string, HandlerEntry> handlers_;
00057
00058 ServerWebServerQueue asyncQueue_;
00059 ServerWebServerQueue threadedQueue_;
00060 ServerWebServerQueue normalQueue_;
00061
00062 unsigned int asyncTimer_;
00063 std::list<std::pair<unsigned int, NetMessage *> > delayedMessages_;
00064
00065 SDL_Thread *sendThread_;
00066 NetServerTCP netServer_;
00067 FileLogger *logger_;
00068
00069 bool processRequest(
00070 unsigned int destinationId,
00071 const char *ip,
00072 const char *url,
00073 std::map<std::string, std::string> &fields,
00074 std::map<std::string, NetMessage *> &parts);
00075 bool validateUser(
00076 const char *ip,
00077 const char *url,
00078 std::map<std::string, std::string> &fields);
00079 unsigned int validateSession(
00080 const char *ip,
00081 const char *url,
00082 std::map<std::string, std::string> &fields);
00083
00084 static int sendThreadFunc(void *);
00085 bool processQueue(ServerWebServerQueue &queue, bool keepEntries);
00086
00087
00088 virtual void processMessage(NetMessage &message);
00089
00090 private:
00091 ServerWebServer();
00092 virtual ~ServerWebServer();
00093 };
00094
00095 #endif