diff options
author | Gluzskiy Alexandr <sss123next@list.ru> | 2010-06-14 15:14:50 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss123next@list.ru> | 2010-06-14 15:14:50 +0300 |
commit | f39ee981130774d536255a90e2e7aba71706e213 (patch) | |
tree | 3109c3ea4218e56ff04680fea1ffd763238b06dc | |
parent | 0510e1e7b42979598e9b4c072addbbf0ae517bab (diff) |
modified: utilities.cpp
modified: utilities.h
-rw-r--r-- | utilities.cpp | 52 | ||||
-rw-r--r-- | utilities.h | 4 |
2 files changed, 49 insertions, 7 deletions
diff --git a/utilities.cpp b/utilities.cpp index 9e0f7c2..1ddb504 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -67,15 +67,29 @@ int GetJabberInterface(WPARAM, LPARAM) //get interface for all jabber accounts, int HandleNewContact(WPARAM w, LPARAM l) { - IJabberSysInterface *ijsys; - JabberAccount *acc = &Accounts; for(int i = 0; i < GetAccountsCount(); i++) { + JabberAccount *acc = &Accounts; if(!acc) break; - ijsys = acc->JabberInterface->Sys(); + IJabberSysInterface *ijsys = acc->JabberInterface->Sys(); if(_tcsstr(_T(JUICK_JID), ijsys->ContactToJID(HANDLE(w)))) - ; //juick contact found, need to add xmpp traffic handlers for this account. + { + IJabberNetInterface *ijnet = acc->JabberInterface->Net(); + if(!acc->hPrescenseHandler && !acc->hMessageHandler && !acc->hIqHandler) + { + acc->hPrescenseHandler = ijnet->AddPresenceHandler(acc->PrescenseHandler()); + acc->hMessageHandler = ijnet->AddMessageHandler(acc->MessageHandler(), JABBER_MESSAGE_TYPE_ANY, _T(""), _T("")); //hm... + acc->hIqHandler = ijnet->AddIqHandler(acc->IqHandler(), JABBER_IQ_TYPE_ANY, _T(""), _T("")); //hm... + } + } + else if (acc->hPrescenseHandler && acc->hMessageHandler && acc->hIqHandler) + { + IJabberNetInterface *ijnet = acc->JabberInterface->Net(); + ijnet->RemoveHandler(acc->hPrescenseHandler); + ijnet->RemoveHandler(acc->hMessageHandler); + ijnet->RemoveHandler(acc->hIqHandler); + } acc = acc->next; } return 0; @@ -83,19 +97,43 @@ int HandleNewContact(WPARAM w, LPARAM l) void FindJuickAccounts() { - IJabberSysInterface *ijsys; - JabberAccount *acc = &Accounts; + for(int i = 0; i < GetAccountsCount(); i++) { + JabberAccount *acc = &Accounts; if(!acc) break; + IJabberSysInterface *ijsys; ijsys = acc->JabberInterface->Sys(); if(ijsys->ContactFromJID(_T(JUICK_JID))) - ; //juick contact found, need to add xmpp traffic handlers for this account. + { + IJabberNetInterface *ijnet = acc->JabberInterface->Net(); + if(!acc->hPrescenseHandler && !acc->hMessageHandler && !acc->hIqHandler) + { + acc->hPrescenseHandler = ijnet->AddPresenceHandler(acc->PrescenseHandler()); + acc->hMessageHandler = ijnet->AddMessageHandler(acc->MessageHandler(), JABBER_MESSAGE_TYPE_ANY, _T(""), _T("")); //hm... + acc->hIqHandler = ijnet->AddIqHandler(acc->IqHandler(), JABBER_IQ_TYPE_ANY, _T(""), _T("")); //hm... + } + } acc = acc->next; } } +JABBER_HANDLER_FUNC JabberAccount::PrescenseHandler() +{ + return FALSE; +} + +JABBER_HANDLER_FUNC JabberAccount::MessageHandler() +{ + return FALSE; +} + +JABBER_HANDLER_FUNC JabberAccount::IqHandler() +{ + return FALSE; +} + BOOL JabberAccount::operator!() { if(!this) diff --git a/utilities.h b/utilities.h index 0325f51..dfddf3d 100644 --- a/utilities.h +++ b/utilities.h @@ -8,6 +8,10 @@ public: TCHAR *AccountName; int AccountNumber; IJabberInterface *JabberInterface; + HJHANDLER hPrescenseHandler, hMessageHandler, hIqHandler; + JABBER_HANDLER_FUNC PrescenseHandler(); + JABBER_HANDLER_FUNC MessageHandler(); + JABBER_HANDLER_FUNC IqHandler(); class JabberAccount *next; BOOL operator !(); }; |