diff options
| author | Robert Pösel <robyer@seznam.cz> | 2012-11-05 21:11:48 +0000 |
|---|---|---|
| committer | Robert Pösel <robyer@seznam.cz> | 2012-11-05 21:11:48 +0000 |
| commit | 048aaf0c4e77402adf584e3318e5aae6f1cdd749 (patch) | |
| tree | def343da80e282ae43164e45e672a1386db66546 /protocols/Xfire/src/Xfire_avatar_loader.cpp | |
| parent | 35a9af527f9b7ec35e81455784cd0a795be910c5 (diff) | |
XFire adoption (crashes on login, no 64bit)
git-svn-id: http://svn.miranda-ng.org/main/trunk@2212 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/Xfire/src/Xfire_avatar_loader.cpp')
| -rw-r--r-- | protocols/Xfire/src/Xfire_avatar_loader.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/protocols/Xfire/src/Xfire_avatar_loader.cpp b/protocols/Xfire/src/Xfire_avatar_loader.cpp new file mode 100644 index 0000000000..e1fe2fdd01 --- /dev/null +++ b/protocols/Xfire/src/Xfire_avatar_loader.cpp @@ -0,0 +1,86 @@ +#include "stdafx.h"
+#include "Xfire_avatar_loader.h"
+
+Xfire_avatar_loader::Xfire_avatar_loader(xfirelib::Client* client) {
+ threadrunning=FALSE;
+ this->client=client;
+ InitializeCriticalSection(&this->avatarMutex);
+}
+
+Xfire_avatar_loader::~Xfire_avatar_loader() {
+ //liste leeren, damit der laufende thread abgebrochen wird
+ list.clear();
+ //warten bis der thread geschlossen wurde
+ EnterCriticalSection(&this->avatarMutex);
+ LeaveCriticalSection(&this->avatarMutex);
+ //critical section entfernen
+ DeleteCriticalSection(&this->avatarMutex);
+}
+
+void Xfire_avatar_loader::loadThread(LPVOID lparam) {
+ Xfire_avatar_loader* loader=(Xfire_avatar_loader*)lparam;
+
+ //kein loader, dann abbruch
+ if(!lparam)
+ return;
+
+ if(loader) {
+ EnterCriticalSection(&loader->avatarMutex);
+ loader->threadrunning=TRUE;
+ }
+
+ while(1){
+ //keinen avatarload auftrag mehr
+ if(!loader->list.size())
+ break;
+
+ //letzten load process holen
+ Xfire_avatar_process process=loader->list.back();
+
+ //buddyinfo abfragen
+ GetBuddyInfo buddyinfo;
+ buddyinfo.userid=process.userid;
+ if(loader->client)
+ if(loader->client->connected)
+ {
+ loader->client->send(&buddyinfo);
+ }
+ else //nicht mehr verbunden? dann liste leeren und schleife abbrechen
+ {
+ loader->list.clear();
+ break;
+ }
+
+ //auftrag entfernen
+ loader->list.pop_back();
+
+ Sleep(1000);
+ }
+
+ if(loader)
+ {
+ loader->threadrunning=FALSE;
+ LeaveCriticalSection(&loader->avatarMutex);
+ }
+
+ return;
+}
+
+BOOL Xfire_avatar_loader::loadAvatar(HANDLE hcontact,char*username,unsigned int userid) {
+ Xfire_avatar_process process={0};
+
+ //struktur füllen
+ process.hcontact = hcontact;
+ if(username)
+ strcpy_s(process.username,128,username);
+ process.userid=userid;
+
+ //Avataranfrage an die liste übergeben
+ this->list.push_back(process);
+
+ if(!threadrunning && client!=NULL) {
+ mir_forkthread(Xfire_avatar_loader::loadThread,(LPVOID)this);
+ }
+
+ return TRUE;
+}
\ No newline at end of file |
