From 6d3b447f8e32fdaccdb3727af4d72d341e191e94 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Thu, 19 Jan 2012 17:59:00 +0000 Subject: [PATCH] Changes to thumbnail retreival --- src/Config.h | 6 ++++- src/Console.cpp | 5 ++-- src/Console.h | 4 +--- src/PowderToy.cpp | 1 - src/client/Client.cpp | 55 ++++++++++++++++++++++++++++++------------- src/client/Client.h | 10 ++++---- 6 files changed, 53 insertions(+), 28 deletions(-) diff --git a/src/Config.h b/src/Config.h index 4cb2da342..facb598a9 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 f861fd1c4..51f1155d8 100644 --- a/src/Console.cpp +++ b/src/Console.cpp @@ -48,10 +48,9 @@ std::vector * 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 8f7a07280..247d89cb6 100644 --- a/src/Console.h +++ b/src/Console.h @@ -4,7 +4,6 @@ #include #include -#include "interface/Sandbox.h" #include "simulation/Simulation.h" class ConsoleCommand @@ -29,7 +28,6 @@ private: bool file_script; std::vector * 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 * GetPreviousCommands(); - Console(ui::Sandbox * sandbox); + Console(); virtual ~Console(); }; diff --git a/src/PowderToy.cpp b/src/PowderToy.cpp index 0ee16485e..5d1db346f 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 3545414be..2b742f457 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -2,30 +2,25 @@ #include #include #include +#include #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 37d0ad69c..3aa233385 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -2,6 +2,7 @@ #define CLIENT_H #include +#include "Config.h" #include "HTTP.h" #include "search/Thumbnail.h" #include "Singleton.h" @@ -10,10 +11,11 @@ class Client: public Singleton { 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();