From 89afb970d88e3efa8ddb2f1eafff10cd6525f2b7 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Sun, 29 Jan 2012 19:28:19 +0000 Subject: VC2008 / VC2010: Enabled precompiled header through Globals.h; the header included in every module in the project. Compilation optimization. git-svn-id: http://mc-server.googlecode.com/svn/trunk@188 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- WebServer/Globals.cpp | 10 ++++ WebServer/Globals.h | 78 +++++++++++++++++++++++++++++ WebServer/Socket.cpp | 6 +-- WebServer/StdHelpers.cpp | 3 +- WebServer/UrlHelper.cpp | 6 +-- WebServer/WebServer.cpp | 18 +++---- WebServer/WebServer.h | 100 +++++++++++++++++++------------------ WebServer/base64.cpp | 3 ++ WebServer/cEvent.cpp | 112 ------------------------------------------ WebServer/cEvent.h | 18 ------- WebServer/cEvents.cpp | 125 +++++++++++++++++++++++++++++++++++++++++++++++ WebServer/cEvents.h | 18 +++++++ 12 files changed, 298 insertions(+), 199 deletions(-) create mode 100644 WebServer/Globals.cpp create mode 100644 WebServer/Globals.h delete mode 100644 WebServer/cEvent.cpp delete mode 100644 WebServer/cEvent.h create mode 100644 WebServer/cEvents.cpp create mode 100644 WebServer/cEvents.h (limited to 'WebServer') diff --git a/WebServer/Globals.cpp b/WebServer/Globals.cpp new file mode 100644 index 000000000..2c60fd698 --- /dev/null +++ b/WebServer/Globals.cpp @@ -0,0 +1,10 @@ + +// Globals.cpp + +// This file is used for precompiled header generation in MSVC environments + +#include "Globals.h" + + + + diff --git a/WebServer/Globals.h b/WebServer/Globals.h new file mode 100644 index 000000000..027b988ef --- /dev/null +++ b/WebServer/Globals.h @@ -0,0 +1,78 @@ + +// Globals.h + +// This file gets included from every module in the project, so that global symbols may be introduced easily +// Also used for precompiled header generation in MSVC environments + + + + + +// OS-dependent stuff: +#ifdef _WIN32 + #define WIN32_LEAN_AND_MEAN + #include + #include +#else + #include + #include // for mkdir + #include + #include + #include + #include + #include + + #include + #include + #include + #include + #include + #include +#endif + + + + + +// CRT stuff: +#include +#include + + + + + +// STL stuff: +#include +#include +#include +#include +#include + + + + + +// Common headers: +#include "../source/cCriticalSection.h" +#include "../source/cMCLogger.h" + + + + + +// Common definitions: + +/// Evaluates to the number of elements in an array (compile-time!) +#define ARRAYCOUNT(X) (sizeof(X) / sizeof(*(X))) + +// sprintf_s is the preferred call in MSVC ("secure"); make it *nix-compatible: +#ifndef _WIN32 + #define sprintf_s(dst, size, format, ...) sprintf(dst, format, __VA_ARGS__ ) + #define vsnprintf_s(buffer, buffer_size, maxcount, stringbuffer, ...) (vsnprintf(buffer, maxcount, stringbuffer, __VA_ARGS__)) +#endif // _WIN32 + + + + + diff --git a/WebServer/Socket.cpp b/WebServer/Socket.cpp index 1ae3c9f37..ec3c9a5c7 100644 --- a/WebServer/Socket.cpp +++ b/WebServer/Socket.cpp @@ -29,7 +29,7 @@ THIS IS NOT THE ORIGINAL SOURCE1!!1!!!~!!~`1ONE!!`1 */ -#include "../source/cMCLogger.h" +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules #include "Socket.h" #include @@ -38,11 +38,11 @@ #include #include #else -#define MSG_NOSIGNAL (0) + #define MSG_NOSIGNAL (0) #endif #ifdef __MAC_NA -#define MSG_NOSIGNAL (0) + #define MSG_NOSIGNAL (0) #endif using namespace std; diff --git a/WebServer/StdHelpers.cpp b/WebServer/StdHelpers.cpp index 6bb05f421..f858c0bc4 100644 --- a/WebServer/StdHelpers.cpp +++ b/WebServer/StdHelpers.cpp @@ -29,8 +29,9 @@ THIS IS NOT THE ORIGINAL SOURCE1!!1!!!~!!~`1ONE!!`1 */ +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + #include "StdHelpers.h" -#include #include std::string ReplaceInStr(const std::string& in, const std::string& search_for, const std::string& replace_with) { diff --git a/WebServer/UrlHelper.cpp b/WebServer/UrlHelper.cpp index 3cdb0fc60..44f1166fd 100644 --- a/WebServer/UrlHelper.cpp +++ b/WebServer/UrlHelper.cpp @@ -29,14 +29,12 @@ THIS IS NOT THE ORIGINAL SOURCE1!!1!!!~!!~`1ONE!!`1 */ +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + #include "UrlHelper.h" #include "Tracer.h" #include "StdHelpers.h" -#ifdef _WIN32 -#include -#endif - #include #include diff --git a/WebServer/WebServer.cpp b/WebServer/WebServer.cpp index 954791663..466093fd3 100644 --- a/WebServer/WebServer.cpp +++ b/WebServer/WebServer.cpp @@ -31,24 +31,22 @@ THIS IS NOT THE ORIGINAL SOURCE1!!1!!!~!!~`1ONE!!`1 */ +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + #include #ifdef _WIN32 -#include + #include #endif #include -#include -#include #include #include "WebServer.h" +#include "cEvents.h" #include "Socket.h" #include "UrlHelper.h" #include "base64.h" -#include "cEvent.h" - - webserver::request_func webserver::request_func_=0; #ifdef _WIN32 @@ -178,7 +176,7 @@ void webserver::Stop() { m_bStop = true; m_Socket->Close(); - m_Event->Wait(); + m_Events->Wait(); } void webserver::Begin() @@ -209,18 +207,18 @@ void webserver::Begin() pthread_create( hHandle, NULL, Request, ptr_s); #endif } - m_Event->Set(); + m_Events->Set(); } webserver::webserver(unsigned int port_to_listen, request_func r) { m_Socket = new SocketServer(port_to_listen,1); request_func_ = r; - m_Event = new cEvent(); + m_Events = new cEvents(); } webserver::~webserver() { delete m_Socket; - delete m_Event; + delete m_Events; } diff --git a/WebServer/WebServer.h b/WebServer/WebServer.h index 06c6359e6..844af0c46 100644 --- a/WebServer/WebServer.h +++ b/WebServer/WebServer.h @@ -30,66 +30,64 @@ THIS IS NOT THE ORIGINAL SOURCE1!!1!!!~!!~`1ONE!!`1 */ -#include -#include -class cEvent; +class cEvents; class Socket; class SocketServer; class webserver { - public: - struct http_request { - - http_request() - : s_( 0 ) - , authentication_given_(false) - {} - - Socket* s_; - std::string method_; - std::string path_; - std::map params_; - - std::string accept_; - std::string accept_language_; - std::string accept_encoding_; - std::string user_agent_; - - /* status_: used to transmit server's error status, such as - o 202 OK - o 404 Not Found - and so on */ - std::string status_; - - /* auth_realm_: allows to set the basic realm for an authentication, - no need to additionally set status_ if set */ - std::string auth_realm_; - - std::string answer_; - - /* authentication_given_ is true when the user has entered a username and password. - These can then be read from username_ and password_ */ - bool authentication_given_; - std::string username_; - std::string password_; - }; - - typedef void (*request_func) (http_request*); - webserver(unsigned int port_to_listen, request_func); +public: + struct http_request { + + http_request() + : s_( 0 ) + , authentication_given_(false) + {} + + Socket* s_; + std::string method_; + std::string path_; + std::map params_; + + std::string accept_; + std::string accept_language_; + std::string accept_encoding_; + std::string user_agent_; + + /* status_: used to transmit server's error status, such as + o 202 OK + o 404 Not Found + and so on */ + std::string status_; + + /* auth_realm_: allows to set the basic realm for an authentication, + no need to additionally set status_ if set */ + std::string auth_realm_; + + std::string answer_; + + /* authentication_given_ is true when the user has entered a username and password. + These can then be read from username_ and password_ */ + bool authentication_given_; + std::string username_; + std::string password_; + }; + + typedef void (*request_func) (http_request*); + webserver(unsigned int port_to_listen, request_func); ~webserver(); void Begin(); void Stop(); - private: +private: bool m_bStop; - #ifdef _WIN32 - static unsigned __stdcall Request(void*); - #else - static void* Request(void*); - #endif - static request_func request_func_; - - cEvent* m_Event; +#ifdef _WIN32 + static unsigned __stdcall Request(void*); +#else + static void* Request(void*); +#endif + static request_func request_func_; + + cEvents * m_Events; SocketServer* m_Socket; }; diff --git a/WebServer/base64.cpp b/WebServer/base64.cpp index 8a6f33147..72cd7cd59 100644 --- a/WebServer/base64.cpp +++ b/WebServer/base64.cpp @@ -1,3 +1,6 @@ + +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + #include "base64.h" #include diff --git a/WebServer/cEvent.cpp b/WebServer/cEvent.cpp deleted file mode 100644 index 289131568..000000000 --- a/WebServer/cEvent.cpp +++ /dev/null @@ -1,112 +0,0 @@ -#include "cEvent.h" -#include "../source/cMCLogger.h" - -#ifdef _WIN32 -#include -#else -#include -#include -#include -#include // sprintf() -#endif - -cEvent::cEvent( unsigned int a_NumEvents /* = 1 */ ) - : m_NumEvents( a_NumEvents ) -#ifndef _WIN32 - , m_bNamed( false ) -#endif -{ - if( m_NumEvents < 1 ) m_NumEvents = 1; - -#ifdef _WIN32 - m_Handle = new HANDLE[ m_NumEvents ]; - for( unsigned int i = 0; i < m_NumEvents; i++) - { - ((HANDLE*)m_Handle)[i] = CreateEvent( 0, FALSE, FALSE, 0 ); - } -#else - m_Handle = new sem_t*[ m_NumEvents ]; - for( unsigned int i = 0; i < m_NumEvents; i++) - { - - sem_t* & HandlePtr = ((sem_t**)m_Handle)[i]; - HandlePtr = new sem_t; - - if( sem_init( HandlePtr, 0, 0 ) ) - { - LOG("WARNING cEvent: Could not create unnamed semaphore, fallback to named."); - m_bNamed = true; - delete HandlePtr; // named semaphores return their own address - - char c_Str[32]; - sprintf( c_Str, "cEvent%p", &HandlePtr ); - HandlePtr = sem_open( c_Str, O_CREAT, 777, 0 ); - if( HandlePtr == SEM_FAILED ) - LOG("ERROR: Could not create Event. (%i)", errno); - else - if( sem_unlink( c_Str ) != 0 ) - LOG("ERROR: Could not unlink cEvent. (%i)", errno); - } - } -#endif -} - -cEvent::~cEvent() -{ -#ifdef _WIN32 - for( unsigned int i = 0; i < m_NumEvents; i++ ) - { - CloseHandle( ((HANDLE*)m_Handle)[i] ); - } - delete [] (HANDLE*)m_Handle; -#else - for( unsigned int i = 0; i < m_NumEvents; i++ ) - { - if( m_bNamed ) - { - sem_t* & HandlePtr = ((sem_t**)m_Handle)[i]; - char c_Str[32]; - sprintf( c_Str, "cEvent%p", &HandlePtr ); - // LOG("Closing event: %s", c_Str ); - // LOG("Sem ptr: %p", HandlePtr ); - if( sem_close( HandlePtr ) != 0 ) - { - LOG("ERROR: Could not close cEvent. (%i)", errno); - } - } - else - { - sem_destroy( ((sem_t**)m_Handle)[i] ); - delete ((sem_t**)m_Handle)[i]; - } - } - delete [] (sem_t**)m_Handle; m_Handle = 0; -#endif -} - -void cEvent::Wait() -{ -#ifdef _WIN32 - WaitForMultipleObjects( m_NumEvents, (HANDLE*)m_Handle, true, INFINITE ); -#else - for(unsigned int i = 0; i < m_NumEvents; i++) - { - if( sem_wait( ((sem_t**)m_Handle)[i] ) != 0 ) - { - LOG("ERROR: Could not wait for cEvent. (%i)", errno); - } - } -#endif -} - -void cEvent::Set(unsigned int a_EventNum /* = 0 */) -{ -#ifdef _WIN32 - SetEvent( ((HANDLE*)m_Handle)[a_EventNum] ); -#else - if( sem_post( ((sem_t**)m_Handle)[a_EventNum] ) != 0 ) - { - LOG("ERROR: Could not set cEvent. (%i)", errno); - } -#endif -} diff --git a/WebServer/cEvent.h b/WebServer/cEvent.h deleted file mode 100644 index e5b77be50..000000000 --- a/WebServer/cEvent.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -class cEvent -{ -public: - cEvent( unsigned int a_NumEvents = 1 ); - ~cEvent(); - - void Wait(); - void Set(unsigned int a_EventNum = 0); -private: - unsigned int m_NumEvents; - void* m_Handle; // HANDLE[] pointer - -#ifndef _WIN32 - bool m_bNamed; -#endif -}; diff --git a/WebServer/cEvents.cpp b/WebServer/cEvents.cpp new file mode 100644 index 000000000..4c9fa8775 --- /dev/null +++ b/WebServer/cEvents.cpp @@ -0,0 +1,125 @@ + +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + +#include "cEvents.h" + + + + + +cEvents::cEvents( unsigned int a_NumEvents /* = 1 */ ) + : m_NumEvents( a_NumEvents ) +#ifndef _WIN32 + , m_bNamed( false ) +#endif +{ + if( m_NumEvents < 1 ) m_NumEvents = 1; + +#ifdef _WIN32 + m_Handle = new HANDLE[ m_NumEvents ]; + for( unsigned int i = 0; i < m_NumEvents; i++) + { + ((HANDLE*)m_Handle)[i] = CreateEvent( 0, FALSE, FALSE, 0 ); + } +#else + m_Handle = new sem_t*[ m_NumEvents ]; + for( unsigned int i = 0; i < m_NumEvents; i++) + { + + sem_t* & HandlePtr = ((sem_t**)m_Handle)[i]; + HandlePtr = new sem_t; + + if( sem_init( HandlePtr, 0, 0 ) ) + { + LOG("WARNING cEvents: Could not create unnamed semaphore, fallback to named."); + m_bNamed = true; + delete HandlePtr; // named semaphores return their own address + + char c_Str[32]; + sprintf( c_Str, "cEvents%p", &HandlePtr ); + HandlePtr = sem_open( c_Str, O_CREAT, 777, 0 ); + if( HandlePtr == SEM_FAILED ) + LOG("ERROR: Could not create Event. (%i)", errno); + else + if( sem_unlink( c_Str ) != 0 ) + LOG("ERROR: Could not unlink cEvents. (%i)", errno); + } + } +#endif +} + + + + + +cEvents::~cEvents() +{ +#ifdef _WIN32 + for( unsigned int i = 0; i < m_NumEvents; i++ ) + { + CloseHandle( ((HANDLE*)m_Handle)[i] ); + } + delete [] (HANDLE*)m_Handle; +#else + for( unsigned int i = 0; i < m_NumEvents; i++ ) + { + if( m_bNamed ) + { + sem_t* & HandlePtr = ((sem_t**)m_Handle)[i]; + char c_Str[32]; + sprintf( c_Str, "cEvents%p", &HandlePtr ); + // LOG("Closing event: %s", c_Str ); + // LOG("Sem ptr: %p", HandlePtr ); + if( sem_close( HandlePtr ) != 0 ) + { + LOG("ERROR: Could not close cEvents. (%i)", errno); + } + } + else + { + sem_destroy( ((sem_t**)m_Handle)[i] ); + delete ((sem_t**)m_Handle)[i]; + } + } + delete [] (sem_t**)m_Handle; m_Handle = 0; +#endif +} + + + + + +void cEvents::Wait() +{ +#ifdef _WIN32 + WaitForMultipleObjects( m_NumEvents, (HANDLE*)m_Handle, true, INFINITE ); +#else + for(unsigned int i = 0; i < m_NumEvents; i++) + { + if( sem_wait( ((sem_t**)m_Handle)[i] ) != 0 ) + { + LOG("ERROR: Could not wait for cEvents. (%i)", errno); + } + } +#endif +} + + + + + +void cEvents::Set(unsigned int a_EventNum /* = 0 */) +{ +#ifdef _WIN32 + SetEvent( ((HANDLE*)m_Handle)[a_EventNum] ); +#else + if( sem_post( ((sem_t**)m_Handle)[a_EventNum] ) != 0 ) + { + LOG("ERROR: Could not set cEvents. (%i)", errno); + } +#endif +} + + + + diff --git a/WebServer/cEvents.h b/WebServer/cEvents.h new file mode 100644 index 000000000..c8a6a7df9 --- /dev/null +++ b/WebServer/cEvents.h @@ -0,0 +1,18 @@ +#pragma once + +class cEvents +{ +public: + cEvents( unsigned int a_NumEvents = 1 ); + ~cEvents(); + + void Wait(); + void Set(unsigned int a_EventNum = 0); +private: + unsigned int m_NumEvents; + void* m_Handle; // HANDLE[] pointer + +#ifndef _WIN32 + bool m_bNamed; +#endif +}; -- cgit v1.2.3