diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-01-19 17:59:00 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-01-19 17:59:00 (GMT) |
| commit | 6d3b447f8e32fdaccdb3727af4d72d341e191e94 (patch) | |
| tree | 707dcea0977c413200d321a3e79cf02b4e69c1c4 /src | |
| parent | 44639a6423c03552a3c0faafab27ef8f395f73a6 (diff) | |
| download | powder-6d3b447f8e32fdaccdb3727af4d72d341e191e94.zip powder-6d3b447f8e32fdaccdb3727af4d72d341e191e94.tar.gz | |
Changes to thumbnail retreival
Diffstat (limited to 'src')
| -rw-r--r-- | src/Config.h | 6 | ||||
| -rw-r--r-- | src/Console.cpp | 5 | ||||
| -rw-r--r-- | src/Console.h | 4 | ||||
| -rw-r--r-- | src/PowderToy.cpp | 1 | ||||
| -rw-r--r-- | src/client/Client.cpp | 55 | ||||
| -rw-r--r-- | src/client/Client.h | 10 |
6 files changed, 53 insertions, 28 deletions
diff --git a/src/Config.h b/src/Config.h index 4cb2da3..facb598 100644 --- a/src/Config.h +++ b/src/Config.h @@ -34,6 +34,7 @@ #define APPDATA_SUBDIR "\\HardWIRED" +//Number of unique thumbnails to have in cache at one time #define THUMB_CACHE_SIZE 256 #ifndef M_PI @@ -43,8 +44,11 @@ #define M_GRAV 6.67300e-1 #endif -#define IMGCONNS 3 +//Number of asynchronous connections used to retrieve thumnails +#define IMGCONNS 5 +//Not sure #define TIMEOUT 100 +//HTTP request timeout in seconds #define HTTP_TIMEOUT 10 #ifdef RENDERER diff --git a/src/Console.cpp b/src/Console.cpp index f861fd1..51f1155 100644 --- a/src/Console.cpp +++ b/src/Console.cpp @@ -48,10 +48,9 @@ std::vector<ConsoleCommand> * Console::GetPreviousCommands() } -Console::Console(ui::Sandbox * sandbox) +Console::Console() { - this->sandbox = sandbox; - sim = sandbox->GetSimulation(); + //sim = sandbox->GetSimulation(); } Console::~Console() diff --git a/src/Console.h b/src/Console.h index 8f7a072..247d89c 100644 --- a/src/Console.h +++ b/src/Console.h @@ -4,7 +4,6 @@ #include <string> #include <vector> -#include "interface/Sandbox.h" #include "simulation/Simulation.h" class ConsoleCommand @@ -29,7 +28,6 @@ private: bool file_script; std::vector<ConsoleCommand> * previousCommands; std::string * lastError; - ui::Sandbox * sandbox; Simulation * sim; public: virtual void Tick(float * dt); @@ -41,7 +39,7 @@ public: virtual int ProcessCommand(char * console); virtual std::string * GetLastError(); virtual std::vector<ConsoleCommand> * GetPreviousCommands(); - Console(ui::Sandbox * sandbox); + Console(); virtual ~Console(); }; diff --git a/src/PowderToy.cpp b/src/PowderToy.cpp index 0ee1648..5d1db34 100644 --- a/src/PowderToy.cpp +++ b/src/PowderToy.cpp @@ -10,7 +10,6 @@ #include "interface/Engine.h" #include "interface/Button.h" -#include "interface/Sandbox.h" #include "interface/Panel.h" #include "interface/ControlFactory.h" #include "interface/Point.h" diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 3545414..2b742f4 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -2,30 +2,25 @@ #include <iostream> #include <sstream> #include <string> +#include <time.h> #include "Config.h" #include "Client.h" #include "interface/Point.h" #include "Graphics.h" -/* - static Thumbnail* thumbnailCache[120]; - static void * activeThumbRequests[5]; - static int activeThumbRequestTimes[5]; - static std::string activeThumbRequestIDs[5]; -*/ - Client::Client() { int i = 0; http_init(NULL); - for(i = 0; i < 120; i++) + for(i = 0; i < THUMB_CACHE_SIZE; i++) { thumbnailCache[i] = NULL; } - for(i = 0; i < 5; i++) + for(i = 0; i < IMGCONNS; i++) { activeThumbRequests[i] = NULL; activeThumbRequestTimes[i] = 0; + activeThumbRequestCompleteTimes[i] = 0; } } @@ -36,12 +31,14 @@ Client::~Client() void Client::ClearThumbnailRequests() { - for(int i = 0; i < 5; i++) + for(int i = 0; i < IMGCONNS; i++) { if(activeThumbRequests[i]) { http_async_req_close(activeThumbRequests[i]); activeThumbRequests[i] = NULL; + activeThumbRequestTimes[i] = 0; + activeThumbRequestCompleteTimes[i] = 0; } } } @@ -50,8 +47,28 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate) { std::stringstream urlStream; std::stringstream idStream; - int i = 0; - for(i = 0; i < 120; i++) + int i = 0, currentTime = time(NULL); + //Check active requests for any "forgotten" requests + for(i = 0; i < IMGCONNS; i++) + { + //If the request is active, and we've recieved a response + if(activeThumbRequests[i] && http_async_req_status(activeThumbRequests[i])) + { + //If we haven't already, mark the request as completed + if(!activeThumbRequestCompleteTimes[i]) + { + activeThumbRequestCompleteTimes[i] = time(NULL); + } + else if(activeThumbRequestCompleteTimes[i] < (currentTime-20)) //Otherwise, if it completed more than 10 seconds ago, destroy it. + { + http_async_req_close(activeThumbRequests[i]); + activeThumbRequests[i] = NULL; + activeThumbRequestTimes[i] = 0; + activeThumbRequestCompleteTimes[i] = 0; + } + } + } + for(i = 0; i < THUMB_CACHE_SIZE; i++) { if(thumbnailCache[i] && thumbnailCache[i]->ID == saveID && thumbnailCache[i]->Datestamp == saveDate) return thumbnailCache[i]; @@ -64,7 +81,7 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate) idStream << saveID << ":" << saveDate; std::string idString = idStream.str(); bool found = false; - for(i = 0; i < 5; i++) + for(i = 0; i < IMGCONNS; i++) { if(activeThumbRequests[i] && activeThumbRequestIDs[i] == idString) { @@ -83,7 +100,7 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate) { free(data); } - thumbnailCacheNextID %= 120; + thumbnailCacheNextID %= THUMB_CACHE_SIZE; if(thumbnailCache[thumbnailCacheNextID]) { delete thumbnailCache[thumbnailCacheNextID]; @@ -104,7 +121,7 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate) { free(data); } - thumbnailCacheNextID %= 120; + thumbnailCacheNextID %= THUMB_CACHE_SIZE; if(thumbnailCache[thumbnailCacheNextID]) { delete thumbnailCache[thumbnailCacheNextID]; @@ -113,15 +130,21 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate) return thumbnailCache[thumbnailCacheNextID++]; } } + else if(activeThumbRequestTimes[i] < currentTime-HTTP_TIMEOUT) + { + // + } } } if(!found) { - for(i = 0; i < 5; i++) + for(i = 0; i < IMGCONNS; i++) { if(!activeThumbRequests[i]) { activeThumbRequests[i] = http_async_req_start(NULL, (char *)urlStream.str().c_str(), NULL, 0, 1); + activeThumbRequestTimes[i] = currentTime; + activeThumbRequestCompleteTimes[i] = 0; std::cout << "ThumbCache: Requesting " << urlStream.str() << " : " << idString << std::endl; activeThumbRequestIDs[i] = idString; return NULL; diff --git a/src/client/Client.h b/src/client/Client.h index 37d0ad6..3aa2333 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -2,6 +2,7 @@ #define CLIENT_H #include <queue> +#include "Config.h" #include "HTTP.h" #include "search/Thumbnail.h" #include "Singleton.h" @@ -10,10 +11,11 @@ class Client: public Singleton<Client> { private: int thumbnailCacheNextID; - Thumbnail * thumbnailCache[120]; - void * activeThumbRequests[5]; - int activeThumbRequestTimes[5]; - std::string activeThumbRequestIDs[5]; + Thumbnail * thumbnailCache[THUMB_CACHE_SIZE]; + void * activeThumbRequests[IMGCONNS]; + int activeThumbRequestTimes[IMGCONNS]; + int activeThumbRequestCompleteTimes[IMGCONNS]; + std::string activeThumbRequestIDs[IMGCONNS]; public: Client(); ~Client(); |
