summaryrefslogtreecommitdiff
path: root/src/client/Client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/Client.cpp')
-rw-r--r--src/client/Client.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/client/Client.cpp b/src/client/Client.cpp
new file mode 100644
index 0000000..3545414
--- /dev/null
+++ b/src/client/Client.cpp
@@ -0,0 +1,133 @@
+#include <stdlib.h>
+#include <iostream>
+#include <sstream>
+#include <string>
+#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++)
+ {
+ thumbnailCache[i] = NULL;
+ }
+ for(i = 0; i < 5; i++)
+ {
+ activeThumbRequests[i] = NULL;
+ activeThumbRequestTimes[i] = 0;
+ }
+}
+
+Client::~Client()
+{
+ http_done();
+}
+
+void Client::ClearThumbnailRequests()
+{
+ for(int i = 0; i < 5; i++)
+ {
+ if(activeThumbRequests[i])
+ {
+ http_async_req_close(activeThumbRequests[i]);
+ activeThumbRequests[i] = NULL;
+ }
+ }
+}
+
+Thumbnail * Client::GetThumbnail(int saveID, int saveDate)
+{
+ std::stringstream urlStream;
+ std::stringstream idStream;
+ int i = 0;
+ for(i = 0; i < 120; i++)
+ {
+ if(thumbnailCache[i] && thumbnailCache[i]->ID == saveID && thumbnailCache[i]->Datestamp == saveDate)
+ return thumbnailCache[i];
+ }
+ urlStream << "http://" << SERVER << "/Get.api?Op=thumbsmall&ID=" << saveID;
+ if(saveDate)
+ {
+ urlStream << "&Date=" << saveDate;
+ }
+ idStream << saveID << ":" << saveDate;
+ std::string idString = idStream.str();
+ bool found = false;
+ for(i = 0; i < 5; i++)
+ {
+ if(activeThumbRequests[i] && activeThumbRequestIDs[i] == idString)
+ {
+ found = true;
+ if(http_async_req_status(activeThumbRequests[i]))
+ {
+ pixel * thumbData;
+ char * data;
+ int status, data_size, imgw, imgh;
+ data = http_async_req_stop(activeThumbRequests[i], &status, &data_size);
+ activeThumbRequests[i] = NULL;
+ if (status == 200 && data)
+ {
+ thumbData = Graphics::ptif_unpack(data, data_size, &imgw, &imgh);
+ if(data)
+ {
+ free(data);
+ }
+ thumbnailCacheNextID %= 120;
+ if(thumbnailCache[thumbnailCacheNextID])
+ {
+ delete thumbnailCache[thumbnailCacheNextID];
+ }
+ if(thumbData)
+ {
+ thumbnailCache[thumbnailCacheNextID] = new Thumbnail(saveID, saveDate, thumbData, ui::Point(imgw, imgh));
+ }
+ else
+ {
+ thumbnailCache[thumbnailCacheNextID] = new Thumbnail(saveID, saveDate, (pixel *)malloc((128*128) * PIXELSIZE), ui::Point(128, 128));
+ }
+ return thumbnailCache[thumbnailCacheNextID++];
+ }
+ else
+ {
+ if(data)
+ {
+ free(data);
+ }
+ thumbnailCacheNextID %= 120;
+ if(thumbnailCache[thumbnailCacheNextID])
+ {
+ delete thumbnailCache[thumbnailCacheNextID];
+ }
+ thumbnailCache[thumbnailCacheNextID] = new Thumbnail(saveID, saveDate, (pixel *)malloc((128*128) * PIXELSIZE), ui::Point(128, 128));
+ return thumbnailCache[thumbnailCacheNextID++];
+ }
+ }
+ }
+ }
+ if(!found)
+ {
+ for(i = 0; i < 5; i++)
+ {
+ if(!activeThumbRequests[i])
+ {
+ activeThumbRequests[i] = http_async_req_start(NULL, (char *)urlStream.str().c_str(), NULL, 0, 1);
+ std::cout << "ThumbCache: Requesting " << urlStream.str() << " : " << idString << std::endl;
+ activeThumbRequestIDs[i] = idString;
+ return NULL;
+ }
+ }
+ }
+ //http_async_req_start(http, urlStream.str().c_str(), NULL, 0, 1);
+ return NULL;
+}