Changes to thumbnail retreival

This commit is contained in:
Simon Robertshaw 2012-01-19 17:59:00 +00:00
parent 44639a6423
commit 6d3b447f8e
6 changed files with 53 additions and 28 deletions

View File

@ -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

View File

@ -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()

View File

@ -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();
};

View File

@ -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"

View File

@ -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;

View File

@ -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();