Cześć, chciałbym się zapytać o dwie kwestie: 1. Jak serwer rozpoznaje, której wersji protokołu użyć? Czy na postawie ciągu znaków "version"? Czy już zam fakt użycia GG_LOGIN80 określa wersję protokołu?
2. Rozłączanie. Nie potrafię określić warunków, kiedy serwer wyśle pakiet GG_DISCONNECT_ACK. W tej chwili moja biblioteka ma następujące handlery wiadomości - załącznik "handlers.txt". Dla ustalenia uwagi - "CloseConnectionWorker" ustawia event mówiący, że wszystkie ewentualne wątki mają zakończyć działanie oraz zamyka socketa. Teraz problem - gdy rozłączam ("DisconnectWorker" z załącznika "disconnect.txt") to są dwie drogi - jeśli stan jest zalogowany - ustawiam status, jeśli nie - wołam bezpośrednio "CloseConnectionWorker". W przypadku zmiany statusu serwer powinien wysłać mi jeszcze GG_DISCONNECT_ACK - wtedy (zerknijcie na "hadlers.txt") zawołam końcowy "CloseConnectionWorker". Niestety - od razu po "ChangeStatus" serwer zamyka socketa. Na co powienienen dodatkowo zwrócić uwagę? Flagi przy logowaniu, wersja klienta, inne? Dzięki i pozdrawiam, Marcin
case GG_PACKET_R_DISCONNECTING: ::OutputDebugString(_T("GG_PACKET_R_DISCONNECTING\n")); { CloseConnectionWorker(m_AutoReconnect,FALSE); } break; case GG_PACKET_R_DISCONNECT_ACK: ::OutputDebugString(_T("GG_PACKET_R_DISCONNECT_ACK\n")); { CloseConnectionWorker(FALSE,FALSE); } break;
BOOL ggLibrary::DisconnectWorker(BOOL bLeaveDescription,BOOL bNotifyReconnect) { if(DisconnectValidate(bLeaveDescription,bNotifyReconnect)) { switch(GetState()) { case GG_STATE_LOGGED_IN: if(bLeaveDescription&&(GetUserDescription().length()>0)) { return ChangeStatusWorker(GG_USER_STATUS_NOT_AVAIL_DESCR,GetUserDescription().c_str(),GetUserOnlyForFriends()); } return ChangeStatusWorker(GG_USER_STATUS_NOT_AVAIL,NULL,FALSE); break; default: break; } return CloseConnectionWorker(FALSE,bNotifyReconnect); } else { SetLastErrorCode(GG_ERROR_CODE_INVALID_PARAM); } return FALSE; }
_______________________________________________ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel