Administrator
Administrator
  • Mesaje: 4988
    Membru din: 07 Aug 2024, 18:53
  • Reacții: 126051
  • Mesaje utile: 47
  • Status: Pe aici.. 🤠
    Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • *Descriere:

    Metin2 C++26 - Automatic Packet Registration cu Reflection

    Aceasta implementare automatizeaza inregistrarea packet-urilor Metin2 folosind C++26 Reflection si annotations. Nu mai trebuie sa adaugi manual cate un Set in constructorul CPacketInfoCG pentru fiecare packet nou.

    - packet-urile sunt gasite automat la compile-time;
    - configurarea se face direct prin annotation;
    - reduce sansele sa uiti inregistrarea unui packet;
    - permite verificari suplimentare pentru packet-uri;
    - necesita C++26 si GCC 16.


    *Link download / Code:

    Pentru aceasta implementare ai nevoie de C++26 si GCC 16.


    Descarca fisierul refl.hpp:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Implementarea foloseste un metadata struct pentru informatiile packet-ului, precum header-ul, numele, sequence-ul si daca packet-ul este dynamic.


    Pentru un packet nou, in loc sa adaugi manual Set in CPacketInfoCG, packet-ul primeste annotation direct pe structura sa.


    Exemplu de annotation:

    Cod: Selectaţi tot

    struct[[= PacketMeta{HEADER_CG_JOIN, "ArenaJoin"}]] CGArenaJoin

    Packet-urile sunt tinute intr-un namespace comun, iar functia collect_packets foloseste C++26 Reflection pentru a cauta tipurile care contin metadata PacketMeta.


    Lista este generata la compile-time si salvata in packet_list.


    Functia register_one citeste metadata packet-ului si apeleaza automat CNetworkPacketHeaderMap::Set.


    In final, functia de register parcurge lista generata la compile-time si inregistreaza toate packet-urile gasite.


    Mock-ul complet oferit de autor poate fi gasit aici:
    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.



    Astfel, cand adaugi un packet nou, nu mai trebuie sa modifici manual constructorul CPacketInfoCG. Este suficient ca structura packet-ului sa aiba annotation-ul necesar.
    Fii primul care reacționează

    Nou Cum descarc de pe TeraBox?

    Afișează detalii Ascunde detalii
    • Este asemănător cu Mega.nz
    • Instalați-vă clientul lor de Download de aici
    • Faceți-vă un cont (vă puteți loga cu Facebook / Google / etc)
    • Nou Dacă nu vreți să descărcați clientul de Download, folosiți acest site
    • Gata! Acum puteți descărca resursele rapid & simplu.

    De ce folosim TeraBox?

    • Este gratuit
    • Primești 1TB de spațiu gratuit la orice cont creat!
    • Este ușor de folosit și varianta premium este foarte ieftină
    • Fișierele nu sunt șterse niciodată
    TeraBox logo
    See full signature
    • Subiecte similare

      • de anielle » » în Sisteme Metin2
        3
        Răspunsuri
        1288
        Vizualizări
        de tarata4480
      • de SCOOB » » în FIX-uri
        2
        Răspunsuri
        562
        Vizualizări
        de SCOOB
      • de SCOOB » » în FIX-uri
        2
        Răspunsuri
        1262
        Vizualizări
        de Reizo
      • de Lugh » » în Îmbunătățiri
        5
        Răspunsuri
        1161
        Vizualizări
        de Lugh
      • de SCOOB » » în FIX-uri
        0
        Răspunsuri
        689
        Vizualizări
        de SCOOB

    Înapoi la “Îmbunătățiri”

    Informații

    Utilizatori ce navighează pe acest forum: Niciun utilizator înregistrat și 3 vizitatori

    Discord ID copiat: