Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Outlook GG
Konnekt | Forum > Developerzy > Tworzenie dodatków
MaciekFR
Witam!

Jestem w trakcie tworzenia prostej wtyczki do Outlooka sprawdzającej status jakiegoś nr GG. Potrzebuje również opis więc metoda HTTP odpada. Udało mi się skompilować libgadu z waszego SDK wraz z najnowszymi źródłami OpenSSL. Napisałem prosty programik logujący się, sprawdzający staus i wysyłający wiadomości. Jednak mam problem, ponieważ funkcja sprawdzająca status zacina się za każdym razem gdy ktos jest niedostepny bez opisu lub ukryty bez opisu (tzn wyglada to tak jakby serwer nie odpowiedzial i metoda recv z winsock czeka i czeka) w kazdym innym przypadku dziala bez żadnych problemów. O co może chodzić ?? Może czegoś nie doczytałem odnośnie działania serwera GG .... Proszę o pomoc !

Poniżej w skrócie mój kod

CODE

    //polaczenie z serwerem GG
    gg_debug_level = 255;
    memset(&m_p, 0, sizeof(m_p));

    //Aby zadziałała funkcja gethostbyname() trzeba uruchomić WSA
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 2, 1 );

    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 )
    {                          
        m_wndStatus.AddString("WSAStartup Failed");
        m_wndStatus.SetSel(m_wndStatus.GetCount());
    }                    
    //Logowanie do serwera GG
    m_p.uin = nGGNumber;
    m_p.password = strPassword.GetBuffer();


    if (!(m_sess = gg_login(&m_p)))
    {
        m_wndStatus.AddString("gg_login Failed");
        gg_free_session(m_sess);
        return;
    }




    //sprawdzenie statusu
    uin_t kontakty[1];
    kontakty[0] = atoi(m_wndDestGGNumber);
    if(gg_notify(m_sess,kontakty,1) == -1)
    {    
        m_wndStatus.AddString("Connection lost!");
        gg_free_session(m_sess);
        return;
    }
    m_e = gg_watch_fd(m_sess);
    int nStat = m_e->event.notify60->status;
    CString strDesc;
    int nType = m_e->type;
    if(nType == 23) strDesc = m_e->event.notify60->descr;
    else if(nType == 22) strDesc = m_e->event.status60.descr;
    else strDesc = "";
    switch(nStat)
    {
        case GG_STATUS_NOT_AVAIL        : m_wndStatusDesc = "Niedostępny"; break;
        case GG_STATUS_NOT_AVAIL_DESCR      : m_wndStatusDesc = "Niedostępny: " + strDesc; break;
        case GG_STATUS_AVAIL                : m_wndStatusDesc = "Dostępny"; break;
        case GG_STATUS_AVAIL_DESCR          : m_wndStatusDesc = "Dostępny: " + strDesc; break;
        case GG_STATUS_BUSY                : m_wndStatusDesc = "Zaraz wracam"; break;
        case GG_STATUS_BUSY_DESCR          : m_wndStatusDesc = "Zaraz wracam: " + strDesc; break;
        case GG_STATUS_INVISIBLE          : m_wndStatusDesc = "Niewidoczny"; break;
        case GG_STATUS_INVISIBLE_DESCR        : m_wndStatusDesc = "Niewidoczny: " + strDesc; break;
        default                             : m_wndStatusDesc = "Nierozpoznano statusu!"; break;
    }
Dexterxx
To może użyj SetTimeout?
MaciekFR
QUOTE(Dexterxx @ 26.05.2008 - 16:35) *

To może użyj SetTimeout?


Timeout nie rozwiązuje mojego problemu. Nie chce obchodzić na około skoro jest gotowy mechanizm. W libgadu istnieją statusy GG_STATUS_NOT_AVAIL i GG_STATUS_INVISIBLE więc takie odpowiedzi powinny przyjść z serwera. Ja pytam dlaczego nie przychodzą ??
dulek000
GG wysyła statusy różnymi eventami, zdebuguj sobie i przyjrzyj się co dostajesz przy zmianie na niedostępny (GG_EVENT_STATUS, GG_EVENT_STATUS60, GG_EVENT_NOTIFY60 jest używane z tego co widzę).

Pamiętaj, że przy niewidocznym nie dostaniesz GG_STATUS_INVISIBLE, tylko GG_STATUS_NOT_AVAIL, tak jakby kontaktu nie było.
MaciekFR
QUOTE(dulek000 @ 27.05.2008 - 18:28) *

GG wysyła statusy różnymi eventami, zdebuguj sobie i przyjrzyj się co dostajesz przy zmianie na niedostępny (GG_EVENT_STATUS, GG_EVENT_STATUS60, GG_EVENT_NOTIFY60 jest używane z tego co widzę).

Pamiętaj, że przy niewidocznym nie dostaniesz GG_STATUS_INVISIBLE, tylko GG_STATUS_NOT_AVAIL, tak jakby kontaktu nie było.



Właśnie w tym problem, że nic nie dostaje .... po wywołaniu gg_watch_fd aplikacja się zawiesza (po dokładniejszym zdebugowaniu doszedłem, że to funckja recv czeka na sokecie na odpowiedź serwera) po kilku minutach się odwiesza a struktura zawierająca event jest pusta. Czyli wychodzi na to, że serwer nie odpowiedział :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.