summaryrefslogtreecommitdiff
path: root/src/client/ThumbnailBroker.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/ThumbnailBroker.h')
-rw-r--r--src/client/ThumbnailBroker.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/client/ThumbnailBroker.h b/src/client/ThumbnailBroker.h
new file mode 100644
index 0000000..8fec6c1
--- /dev/null
+++ b/src/client/ThumbnailBroker.h
@@ -0,0 +1,58 @@
+#pragma once
+#include <queue>
+#include <list>
+#include <utility>
+#include <deque>
+#include <pthread.h>
+#undef GetUserName //God dammit microsoft!
+
+#include "Singleton.h"
+
+class GameSave;
+class Thumbnail;
+class ThumbnailListener;
+class ThumbnailBroker: public Singleton<ThumbnailBroker>
+{
+private:
+ class ThumbnailID;
+ class ThumbnailRequest;
+ class ThumbnailSpec;
+ class ThumbRenderRequest;
+
+ //Thumbnail retreival
+ /*int thumbnailCacheNextID;
+ Thumbnail * thumbnailCache[THUMB_CACHE_SIZE];
+ void * activeThumbRequests[IMGCONNS];
+ int activeThumbRequestTimes[IMGCONNS];
+ int activeThumbRequestCompleteTimes[IMGCONNS];
+ std::string activeThumbRequestIDs[IMGCONNS];*/
+
+ pthread_mutex_t thumbnailQueueMutex;
+ pthread_mutex_t listenersMutex;
+ pthread_t thumbnailQueueThread;
+ bool thumbnailQueueRunning;
+ std::deque<ThumbnailRequest> thumbnailRequests;
+ std::deque<ThumbRenderRequest> renderRequests;
+
+ std::deque<std::pair<ThumbnailListener*, Thumbnail*> > thumbnailComplete;
+ std::list<ThumbnailRequest> currentRequests;
+ std::deque<std::pair<ThumbnailID, Thumbnail*> > thumbnailCache;
+
+ std::vector<ThumbnailListener*> validListeners;
+
+ static void * thumbnailQueueProcessHelper(void * ref);
+ void thumbnailQueueProcessTH();
+
+public:
+ ThumbnailBroker();
+ virtual ~ThumbnailBroker();
+
+ void FlushThumbQueue();
+ void RenderThumbnail(GameSave * gameSave, int width, int height, ThumbnailListener * tListener);
+ void RetrieveThumbnail(int saveID, int saveDate, int width, int height, ThumbnailListener * tListener);
+ void RetrieveThumbnail(int saveID, int width, int height, ThumbnailListener * tListener);
+
+ bool CheckThumbnailListener(ThumbnailListener * tListener);
+ void AttachThumbnailListener(ThumbnailListener * tListener);
+ void DetachThumbnailListener(ThumbnailListener * tListener);
+}; \ No newline at end of file