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;
}