diff options
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/Client.cpp | 28 | ||||
| -rw-r--r-- | src/client/Client.h | 3 | ||||
| -rw-r--r-- | src/client/RequestBroker.cpp (renamed from src/client/ThumbnailBroker.cpp) | 34 | ||||
| -rw-r--r-- | src/client/RequestBroker.h (renamed from src/client/ThumbnailBroker.h) | 18 |
4 files changed, 59 insertions, 24 deletions
diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 4c13850..97251e0 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -42,7 +42,7 @@ #include "search/Thumbnail.h" #include "preview/Comment.h" #include "ClientListener.h" -#include "ThumbnailBroker.h" +#include "RequestBroker.h" #include "cajun/reader.h" #include "cajun/writer.h" @@ -617,7 +617,7 @@ std::vector<std::pair<std::string, std::string> > Client::GetServerNotifications void Client::Tick() { //Check thumbnail queue - ThumbnailBroker::Ref().FlushThumbQueue(); + RequestBroker::Ref().FlushThumbQueue(); //Check status on version check request if(versionCheckRequest && http_async_req_status(versionCheckRequest)) @@ -809,7 +809,7 @@ void Client::WritePrefs() void Client::Shutdown() { - ThumbnailBroker::Ref().Shutdown(); + RequestBroker::Ref().Shutdown(); ClearThumbnailRequests(); http_done(); @@ -1150,6 +1150,28 @@ std::vector<unsigned char> Client::GetSaveData(int saveID, int saveDate) return saveData; } +VideoBuffer * Client::GetAvatar(std::string username) +{ + lastError = ""; + int dataStatus; + int dataLength = 0; + unsigned char * data; + std::stringstream urlStream; + urlStream << "http://" << STATICSERVER << "/avatars/" << username << ".pti"; + + data = (unsigned char *)http_simple_get((char *)urlStream.str().c_str(), &dataStatus, &dataLength); + if(data && dataStatus == 200) + { + std::vector<char> responseData(data, data+dataLength); + return format::PTIToVideoBuffer(responseData); + } + else if(data) + { + free(data); + } + return NULL; +} + LoginStatus Client::Login(std::string username, std::string password, User & user) { lastError = ""; diff --git a/src/client/Client.h b/src/client/Client.h index 0b40012..41eeef7 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -17,6 +17,7 @@ class SaveInfo; class SaveFile; class SaveComment; class GameSave; +class VideoBuffer; enum LoginStatus { LoginOkay, LoginError @@ -125,6 +126,8 @@ public: RequestStatus AddComment(int saveID, std::string comment); + VideoBuffer * GetAvatar(std::string username); + unsigned char * GetSaveData(int saveID, int saveDate, int & dataLength); std::vector<unsigned char> GetSaveData(int saveID, int saveDate); LoginStatus Login(std::string username, std::string password, User & user); diff --git a/src/client/ThumbnailBroker.cpp b/src/client/RequestBroker.cpp index 85fee3a..e09cb5c 100644 --- a/src/client/ThumbnailBroker.cpp +++ b/src/client/RequestBroker.cpp @@ -2,7 +2,7 @@ #include <iostream> #include <typeinfo> #include <time.h> -#include "ThumbnailBroker.h" +#include "RequestBroker.h" #include "ThumbnailListener.h" #include "Client.h" #include "HTTP.h" @@ -12,7 +12,7 @@ //Asynchronous Thumbnail render & request processing -ThumbnailBroker::ThumbnailBroker() +RequestBroker::RequestBroker() { thumbnailQueueRunning = false; //thumbnailQueueMutex = PTHREAD_MUTEX_INITIALIZER; @@ -25,12 +25,12 @@ ThumbnailBroker::ThumbnailBroker() pthread_mutex_init (&runningMutex, NULL); } -ThumbnailBroker::~ThumbnailBroker() +RequestBroker::~RequestBroker() { } -void ThumbnailBroker::assureRunning() +void RequestBroker::assureRunning() { pthread_mutex_lock(&runningMutex); bool running = thumbnailQueueRunning; @@ -42,11 +42,11 @@ void ThumbnailBroker::assureRunning() #ifdef DEBUG std::cout << typeid(*this).name() << " Starting background thread for new " << __FUNCTION__ << " request" << std::endl; #endif - pthread_create(&thumbnailQueueThread, 0, &ThumbnailBroker::thumbnailQueueProcessHelper, this); + pthread_create(&thumbnailQueueThread, 0, &RequestBroker::thumbnailQueueProcessHelper, this); } } -void ThumbnailBroker::Shutdown() +void RequestBroker::Shutdown() { pthread_mutex_lock(&runningMutex); if(thumbnailQueueRunning) @@ -69,12 +69,12 @@ void ThumbnailBroker::Shutdown() } } -void ThumbnailBroker::RenderThumbnail(GameSave * gameSave, int width, int height, ThumbnailListener * tListener) +void RequestBroker::RenderThumbnail(GameSave * gameSave, int width, int height, ThumbnailListener * tListener) { RenderThumbnail(gameSave, true, true, width, height, tListener); } -void ThumbnailBroker::RenderThumbnail(GameSave * gameSave, bool decorations, bool fire, int width, int height, ThumbnailListener * tListener) +void RequestBroker::RenderThumbnail(GameSave * gameSave, bool decorations, bool fire, int width, int height, ThumbnailListener * tListener) { AttachThumbnailListener(tListener); pthread_mutex_lock(&thumbnailQueueMutex); @@ -84,7 +84,7 @@ void ThumbnailBroker::RenderThumbnail(GameSave * gameSave, bool decorations, boo assureRunning(); } -void ThumbnailBroker::RetrieveThumbnail(int saveID, int saveDate, int width, int height, ThumbnailListener * tListener) +void RequestBroker::RetrieveThumbnail(int saveID, int saveDate, int width, int height, ThumbnailListener * tListener) { AttachThumbnailListener(tListener); pthread_mutex_lock(&thumbnailQueueMutex); @@ -94,13 +94,13 @@ void ThumbnailBroker::RetrieveThumbnail(int saveID, int saveDate, int width, int assureRunning(); } -void * ThumbnailBroker::thumbnailQueueProcessHelper(void * ref) +void * RequestBroker::thumbnailQueueProcessHelper(void * ref) { - ((ThumbnailBroker*)ref)->thumbnailQueueProcessTH(); + ((RequestBroker*)ref)->thumbnailQueueProcessTH(); return NULL; } -void ThumbnailBroker::FlushThumbQueue() +void RequestBroker::FlushThumbQueue() { pthread_mutex_lock(&thumbnailQueueMutex); while(thumbnailComplete.size()) @@ -121,7 +121,7 @@ void ThumbnailBroker::FlushThumbQueue() pthread_mutex_unlock(&thumbnailQueueMutex); } -void ThumbnailBroker::thumbnailQueueProcessTH() +void RequestBroker::thumbnailQueueProcessTH() { time_t lastAction = time(NULL); pthread_mutex_lock(&runningMutex); @@ -354,12 +354,12 @@ void ThumbnailBroker::thumbnailQueueProcessTH() pthread_mutex_unlock(&runningMutex); } -void ThumbnailBroker::RetrieveThumbnail(int saveID, int width, int height, ThumbnailListener * tListener) +void RequestBroker::RetrieveThumbnail(int saveID, int width, int height, ThumbnailListener * tListener) { RetrieveThumbnail(saveID, 0, width, height, tListener); } -bool ThumbnailBroker::CheckThumbnailListener(ListenerHandle handle) +bool RequestBroker::CheckThumbnailListener(ListenerHandle handle) { pthread_mutex_lock(&listenersMutex); int count = std::count(validListeners.begin(), validListeners.end(), handle); @@ -368,14 +368,14 @@ bool ThumbnailBroker::CheckThumbnailListener(ListenerHandle handle) return count; } -void ThumbnailBroker::AttachThumbnailListener(ThumbnailListener * tListener) +void RequestBroker::AttachThumbnailListener(ThumbnailListener * tListener) { pthread_mutex_lock(&listenersMutex); validListeners.push_back(ListenerHandle(tListener->ListenerRand, tListener)); pthread_mutex_unlock(&listenersMutex); } -void ThumbnailBroker::DetachThumbnailListener(ThumbnailListener * tListener) +void RequestBroker::DetachThumbnailListener(ThumbnailListener * tListener) { pthread_mutex_lock(&listenersMutex); diff --git a/src/client/ThumbnailBroker.h b/src/client/RequestBroker.h index 5160479..b3d1fc3 100644 --- a/src/client/ThumbnailBroker.h +++ b/src/client/RequestBroker.h @@ -12,7 +12,7 @@ class GameSave; class Thumbnail; class ThumbnailListener; typedef std::pair<int, ThumbnailListener*> ListenerHandle; -class ThumbnailBroker: public Singleton<ThumbnailBroker> +class RequestBroker: public Singleton<RequestBroker> { private: class ThumbnailSpec @@ -67,6 +67,15 @@ private: ThumbRenderRequest() : Save(0), Decorations(true), Fire(true), Width(0), Height(0), CompletedListener(ListenerHandle(0, (ThumbnailListener*)NULL)) {} }; + class Request + { + enum RequestType { Thumbnail, ThumbnailRender, HTTP }; + public: + RequestType Type; + void * RequestObject; + ListenerHandle Listener; + }; + //Thumbnail retreival /*int thumbnailCacheNextID; Thumbnail * thumbnailCache[THUMB_CACHE_SIZE]; @@ -87,16 +96,17 @@ private: std::list<ThumbnailRequest> currentRequests; std::deque<std::pair<ThumbnailID, Thumbnail*> > thumbnailCache; - std::vector<ListenerHandle> validListeners; + std::deque<Request> requestQueue; + static void * thumbnailQueueProcessHelper(void * ref); void thumbnailQueueProcessTH(); void assureRunning(); public: - ThumbnailBroker(); - virtual ~ThumbnailBroker(); + RequestBroker(); + virtual ~RequestBroker(); void Shutdown(); void FlushThumbQueue(); |
