mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-08-11 19:04:05 +02:00
Changes to thumbnail retreival
This commit is contained in:
@@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
#define APPDATA_SUBDIR "\\HardWIRED"
|
#define APPDATA_SUBDIR "\\HardWIRED"
|
||||||
|
|
||||||
|
//Number of unique thumbnails to have in cache at one time
|
||||||
#define THUMB_CACHE_SIZE 256
|
#define THUMB_CACHE_SIZE 256
|
||||||
|
|
||||||
#ifndef M_PI
|
#ifndef M_PI
|
||||||
@@ -43,8 +44,11 @@
|
|||||||
#define M_GRAV 6.67300e-1
|
#define M_GRAV 6.67300e-1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define IMGCONNS 3
|
//Number of asynchronous connections used to retrieve thumnails
|
||||||
|
#define IMGCONNS 5
|
||||||
|
//Not sure
|
||||||
#define TIMEOUT 100
|
#define TIMEOUT 100
|
||||||
|
//HTTP request timeout in seconds
|
||||||
#define HTTP_TIMEOUT 10
|
#define HTTP_TIMEOUT 10
|
||||||
|
|
||||||
#ifdef RENDERER
|
#ifdef RENDERER
|
||||||
|
@@ -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()
|
Console::~Console()
|
||||||
|
@@ -4,7 +4,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "interface/Sandbox.h"
|
|
||||||
#include "simulation/Simulation.h"
|
#include "simulation/Simulation.h"
|
||||||
|
|
||||||
class ConsoleCommand
|
class ConsoleCommand
|
||||||
@@ -29,7 +28,6 @@ private:
|
|||||||
bool file_script;
|
bool file_script;
|
||||||
std::vector<ConsoleCommand> * previousCommands;
|
std::vector<ConsoleCommand> * previousCommands;
|
||||||
std::string * lastError;
|
std::string * lastError;
|
||||||
ui::Sandbox * sandbox;
|
|
||||||
Simulation * sim;
|
Simulation * sim;
|
||||||
public:
|
public:
|
||||||
virtual void Tick(float * dt);
|
virtual void Tick(float * dt);
|
||||||
@@ -41,7 +39,7 @@ public:
|
|||||||
virtual int ProcessCommand(char * console);
|
virtual int ProcessCommand(char * console);
|
||||||
virtual std::string * GetLastError();
|
virtual std::string * GetLastError();
|
||||||
virtual std::vector<ConsoleCommand> * GetPreviousCommands();
|
virtual std::vector<ConsoleCommand> * GetPreviousCommands();
|
||||||
Console(ui::Sandbox * sandbox);
|
Console();
|
||||||
virtual ~Console();
|
virtual ~Console();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
#include "interface/Engine.h"
|
#include "interface/Engine.h"
|
||||||
#include "interface/Button.h"
|
#include "interface/Button.h"
|
||||||
#include "interface/Sandbox.h"
|
|
||||||
#include "interface/Panel.h"
|
#include "interface/Panel.h"
|
||||||
#include "interface/ControlFactory.h"
|
#include "interface/ControlFactory.h"
|
||||||
#include "interface/Point.h"
|
#include "interface/Point.h"
|
||||||
|
@@ -2,30 +2,25 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <time.h>
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "Client.h"
|
#include "Client.h"
|
||||||
#include "interface/Point.h"
|
#include "interface/Point.h"
|
||||||
#include "Graphics.h"
|
#include "Graphics.h"
|
||||||
|
|
||||||
/*
|
|
||||||
static Thumbnail* thumbnailCache[120];
|
|
||||||
static void * activeThumbRequests[5];
|
|
||||||
static int activeThumbRequestTimes[5];
|
|
||||||
static std::string activeThumbRequestIDs[5];
|
|
||||||
*/
|
|
||||||
|
|
||||||
Client::Client()
|
Client::Client()
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
http_init(NULL);
|
http_init(NULL);
|
||||||
for(i = 0; i < 120; i++)
|
for(i = 0; i < THUMB_CACHE_SIZE; i++)
|
||||||
{
|
{
|
||||||
thumbnailCache[i] = NULL;
|
thumbnailCache[i] = NULL;
|
||||||
}
|
}
|
||||||
for(i = 0; i < 5; i++)
|
for(i = 0; i < IMGCONNS; i++)
|
||||||
{
|
{
|
||||||
activeThumbRequests[i] = NULL;
|
activeThumbRequests[i] = NULL;
|
||||||
activeThumbRequestTimes[i] = 0;
|
activeThumbRequestTimes[i] = 0;
|
||||||
|
activeThumbRequestCompleteTimes[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,12 +31,14 @@ Client::~Client()
|
|||||||
|
|
||||||
void Client::ClearThumbnailRequests()
|
void Client::ClearThumbnailRequests()
|
||||||
{
|
{
|
||||||
for(int i = 0; i < 5; i++)
|
for(int i = 0; i < IMGCONNS; i++)
|
||||||
{
|
{
|
||||||
if(activeThumbRequests[i])
|
if(activeThumbRequests[i])
|
||||||
{
|
{
|
||||||
http_async_req_close(activeThumbRequests[i]);
|
http_async_req_close(activeThumbRequests[i]);
|
||||||
activeThumbRequests[i] = NULL;
|
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 urlStream;
|
||||||
std::stringstream idStream;
|
std::stringstream idStream;
|
||||||
int i = 0;
|
int i = 0, currentTime = time(NULL);
|
||||||
for(i = 0; i < 120; i++)
|
//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)
|
if(thumbnailCache[i] && thumbnailCache[i]->ID == saveID && thumbnailCache[i]->Datestamp == saveDate)
|
||||||
return thumbnailCache[i];
|
return thumbnailCache[i];
|
||||||
@@ -64,7 +81,7 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate)
|
|||||||
idStream << saveID << ":" << saveDate;
|
idStream << saveID << ":" << saveDate;
|
||||||
std::string idString = idStream.str();
|
std::string idString = idStream.str();
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for(i = 0; i < 5; i++)
|
for(i = 0; i < IMGCONNS; i++)
|
||||||
{
|
{
|
||||||
if(activeThumbRequests[i] && activeThumbRequestIDs[i] == idString)
|
if(activeThumbRequests[i] && activeThumbRequestIDs[i] == idString)
|
||||||
{
|
{
|
||||||
@@ -83,7 +100,7 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate)
|
|||||||
{
|
{
|
||||||
free(data);
|
free(data);
|
||||||
}
|
}
|
||||||
thumbnailCacheNextID %= 120;
|
thumbnailCacheNextID %= THUMB_CACHE_SIZE;
|
||||||
if(thumbnailCache[thumbnailCacheNextID])
|
if(thumbnailCache[thumbnailCacheNextID])
|
||||||
{
|
{
|
||||||
delete thumbnailCache[thumbnailCacheNextID];
|
delete thumbnailCache[thumbnailCacheNextID];
|
||||||
@@ -104,7 +121,7 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate)
|
|||||||
{
|
{
|
||||||
free(data);
|
free(data);
|
||||||
}
|
}
|
||||||
thumbnailCacheNextID %= 120;
|
thumbnailCacheNextID %= THUMB_CACHE_SIZE;
|
||||||
if(thumbnailCache[thumbnailCacheNextID])
|
if(thumbnailCache[thumbnailCacheNextID])
|
||||||
{
|
{
|
||||||
delete thumbnailCache[thumbnailCacheNextID];
|
delete thumbnailCache[thumbnailCacheNextID];
|
||||||
@@ -113,15 +130,21 @@ Thumbnail * Client::GetThumbnail(int saveID, int saveDate)
|
|||||||
return thumbnailCache[thumbnailCacheNextID++];
|
return thumbnailCache[thumbnailCacheNextID++];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(activeThumbRequestTimes[i] < currentTime-HTTP_TIMEOUT)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!found)
|
if(!found)
|
||||||
{
|
{
|
||||||
for(i = 0; i < 5; i++)
|
for(i = 0; i < IMGCONNS; i++)
|
||||||
{
|
{
|
||||||
if(!activeThumbRequests[i])
|
if(!activeThumbRequests[i])
|
||||||
{
|
{
|
||||||
activeThumbRequests[i] = http_async_req_start(NULL, (char *)urlStream.str().c_str(), NULL, 0, 1);
|
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;
|
std::cout << "ThumbCache: Requesting " << urlStream.str() << " : " << idString << std::endl;
|
||||||
activeThumbRequestIDs[i] = idString;
|
activeThumbRequestIDs[i] = idString;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
#define CLIENT_H
|
#define CLIENT_H
|
||||||
|
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
#include "Config.h"
|
||||||
#include "HTTP.h"
|
#include "HTTP.h"
|
||||||
#include "search/Thumbnail.h"
|
#include "search/Thumbnail.h"
|
||||||
#include "Singleton.h"
|
#include "Singleton.h"
|
||||||
@@ -10,10 +11,11 @@ class Client: public Singleton<Client>
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
int thumbnailCacheNextID;
|
int thumbnailCacheNextID;
|
||||||
Thumbnail * thumbnailCache[120];
|
Thumbnail * thumbnailCache[THUMB_CACHE_SIZE];
|
||||||
void * activeThumbRequests[5];
|
void * activeThumbRequests[IMGCONNS];
|
||||||
int activeThumbRequestTimes[5];
|
int activeThumbRequestTimes[IMGCONNS];
|
||||||
std::string activeThumbRequestIDs[5];
|
int activeThumbRequestCompleteTimes[IMGCONNS];
|
||||||
|
std::string activeThumbRequestIDs[IMGCONNS];
|
||||||
public:
|
public:
|
||||||
Client();
|
Client();
|
||||||
~Client();
|
~Client();
|
||||||
|
Reference in New Issue
Block a user