00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <webserver/ServerWebServer.h>
00022
00023 ServerWebServerQueueEntry::ServerWebServerQueueEntry(
00024 unsigned int destinationId,
00025 unsigned int sid,
00026 const char *url,
00027 ServerWebServerI *handler,
00028 std::map<std::string, std::string> &fields,
00029 std::map<std::string, NetMessage *> &parts) :
00030 destinationId_(destinationId),
00031 sid_(sid),
00032 request_(url, fields, parts),
00033 handler_(handler)
00034 {
00035 }
00036
00037 ServerWebServerQueueEntry::~ServerWebServerQueueEntry()
00038 {
00039 delete handler_;
00040 }
00041
00042 ServerWebServerQueue::ServerWebServerQueue()
00043 {
00044 queueMutex_ = SDL_CreateMutex();
00045 }
00046
00047 ServerWebServerQueue::~ServerWebServerQueue()
00048 {
00049 }
00050
00051 void ServerWebServerQueue::addEntry(ServerWebServerQueueEntry *entry)
00052 {
00053 SDL_LockMutex(queueMutex_);
00054 entries_.push_back(entry);
00055 SDL_UnlockMutex(queueMutex_);
00056 }
00057
00058 ServerWebServerQueueEntry *ServerWebServerQueue::getEntry()
00059 {
00060 ServerWebServerQueueEntry *result = 0;
00061 SDL_LockMutex(queueMutex_);
00062 if (!entries_.empty())
00063 {
00064 result = entries_.front();
00065 entries_.pop_front();
00066 }
00067 SDL_UnlockMutex(queueMutex_);
00068 return result;
00069 }
00070
00071 void ServerWebServerQueue::removeEntry(unsigned int destinationId)
00072 {
00073 SDL_LockMutex(queueMutex_);
00074 std::list<ServerWebServerQueueEntry *>::iterator itor;
00075 for (itor = entries_.begin();
00076 itor != entries_.end();
00077 itor++)
00078 {
00079 ServerWebServerQueueEntry *entry = *itor;
00080 if (entry->getDestinationId() == destinationId)
00081 {
00082 entries_.erase(itor);
00083 delete entry;
00084 break;
00085 }
00086 }
00087 SDL_UnlockMutex(queueMutex_);
00088 }
00089
00090 bool ServerWebServerQueue::hasEntry(unsigned int destinationId)
00091 {
00092 bool result = false;
00093
00094 SDL_LockMutex(queueMutex_);
00095 std::list<ServerWebServerQueueEntry *>::iterator itor;
00096 for (itor = entries_.begin();
00097 itor != entries_.end();
00098 itor++)
00099 {
00100 ServerWebServerQueueEntry *entry = *itor;
00101 if (entry->getDestinationId() == destinationId)
00102 {
00103 result = true;
00104 break;
00105 }
00106 }
00107 SDL_UnlockMutex(queueMutex_);
00108
00109 return result;
00110 }