summaryrefslogtreecommitdiff
path: root/src/client/Client.cpp
diff options
context:
space:
mode:
authorSimon 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)
commit6d3b447f8e32fdaccdb3727af4d72d341e191e94 (patch)
tree707dcea0977c413200d321a3e79cf02b4e69c1c4 /src/client/Client.cpp
parent44639a6423c03552a3c0faafab27ef8f395f73a6 (diff)
downloadpowder-6d3b447f8e32fdaccdb3727af4d72d341e191e94.zip
powder-6d3b447f8e32fdaccdb3727af4d72d341e191e94.tar.gz
Changes to thumbnail retreival
Diffstat (limited to 'src/client/Client.cpp')
-rw-r--r--src/client/Client.cpp55
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;