Skocz do zawartości
Opublikowano

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 przez theblabil

Rozwiązane przez KoYGeR

Przejdź do rozwiązania

Featured Replies

Opublikowano
  • 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 przez theblabil

Opublikowano

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
  • Programista
  • 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 przez KoYGeR

  • Poly zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.