Opublikowano 6 Lutego6 Lut Analizuje sobie kod i może jestem jakiś lekko upo, ale w kodzie input_login.cpp nie widzie nigdzie zdeklarowanego db_clientdesc, chciałbym się dowiedzieć jak to działa. Po ostatnim moim pytaniu wnioskuje ze jest db_clientdesc który czeka na pakiety i GD, ale tu pojawia się moje następne pytanie czy są pakiety DG? void CInputLogin::Login(LPDESC d, const char * data) { TPacketCGLogin * pinfo = (TPacketCGLogin *) data; char login[LOGIN_MAX_LEN + 1]; trim_and_lower(pinfo->login, login, sizeof(login)); sys_log(0, "InputLogin::Login : %s", login); TPacketGCLoginFailure failurePacket; if (!test_server) { failurePacket.header = HEADER_GC_LOGIN_FAILURE; strlcpy(failurePacket.szStatus, "VERSION", sizeof(failurePacket.szStatus)); d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure)); return; } if (g_bNoMoreClient) { failurePacket.header = HEADER_GC_LOGIN_FAILURE; strlcpy(failurePacket.szStatus, "SHUTDOWN", sizeof(failurePacket.szStatus)); d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure)); return; } if (g_iUserLimit > 0) { int iTotal; int * paiEmpireUserCount; int iLocal; DESC_MANAGER::instance().GetUserCount(iTotal, &paiEmpireUserCount, iLocal); if (g_iUserLimit <= iTotal) { failurePacket.header = HEADER_GC_LOGIN_FAILURE; strlcpy(failurePacket.szStatus, "FULL", sizeof(failurePacket.szStatus)); d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure)); return; } } TLoginPacket login_packet; strlcpy(login_packet.login, login, sizeof(login_packet.login)); strlcpy(login_packet.passwd, pinfo->passwd, sizeof(login_packet.passwd)); db_clientdesc->DBPacket(HEADER_GD_LOGIN, d->GetHandle(), &login_packet, sizeof(TLoginPacket)); } Edytowane 6 Lutego6 Lut przez theblabil
Opublikowano 6 Lutego6 Lut Autor Nieważne znalazłem, w input_db.cpp i tak są pakiety DG, ale dalej nie rozumiem mechaniki samego 'db_clientdesc', gdzie w kodzie jest to zdeklarowane i czy jest to jakoś globalnie dostępne? Edytowane 6 Lutego6 Lut przez theblabil
Opublikowano 6 Lutego6 Lut Bardzo fajne pytanie, również się dołączam. Ktoś obeznany mógłby w wolnej chwili wytlumaczyć główny mechanizm i zależności między nimi lub podesłać jakieś istniejące źródło.
Opublikowano 7 Lutego7 Lut Rozwiązanie db_clientdesc zadeklarowane jest w pliku /game/src/desc_client.h Jest to zmienna globalna używana do komunikacji między aplikacjami game oraz db Tworzenie połączenia do db jest w pliku /game/src/main.cpp i wygląda następująco: db_clientdesc = DESC_MANAGER::instance().CreateConnectionDesc(main_fdw, db_addr, db_port, PHASE_DBCLIENT, true); Aby korzystać z db_clientdesc należy dodać w pliku *.cpp (jeśli brakuje): #include "desc_client.h" Godzinę temu, theblabil napisał(a): Nieważne znalazłem, w input_db.cpp i tak są pakiety DG, ale dalej nie rozumiem mechaniki samego 'db_clientdesc', gdzie w kodzie jest to zdeklarowane i czy jest to jakoś globalnie dostępne? W pliku input_db.cpp jest obsługa pakietów wysłanych z db do game Edytowane 7 Lutego7 Lut przez KoYGeR