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/client/Client.cpp | |
| parent | 44639a6423c03552a3c0faafab27ef8f395f73a6 (diff) | |
| download | powder-6d3b447f8e32fdaccdb3727af4d72d341e191e94.zip powder-6d3b447f8e32fdaccdb3727af4d72d341e191e94.tar.gz | |
Changes to thumbnail retreival
Diffstat (limited to 'src/client/Client.cpp')
| -rw-r--r-- | src/client/Client.cpp | 55 |
1 files changed, 39 insertions, 16 deletions
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; |
