diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-31 18:49:08 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-31 18:49:08 (GMT) |
| commit | 1d258eab6b0ec3740d634f014af5dbff882e0069 (patch) | |
| tree | 956d446f144415d4f188dcca17c7dffba08851c2 /src/client/ThumbnailBroker.h | |
| parent | 303b546ceb134df48763730cbfd8ce7b6df008a2 (diff) | |
| download | powder-1d258eab6b0ec3740d634f014af5dbff882e0069.zip powder-1d258eab6b0ec3740d634f014af5dbff882e0069.tar.gz | |
ThumbnailBroker for background retrieval and rendering
Diffstat (limited to 'src/client/ThumbnailBroker.h')
| -rw-r--r-- | src/client/ThumbnailBroker.h | 58 |
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 |
