Administrator
Administrator
  • Mesaje: 4795
    Membru din: 07 Aug 2024, 21:53
  • Reacții: 115427
  • Mesaje utile: 46
  • Status: Pe aici.. 🤠
    Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    *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:
    Code:
    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.

    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
    Comunitatea Metin2 Romania este si pe Discord! :ymcowboy:

    2500+ membri • Chat activ zilnic • Support • Cereri & Resurse

    ► discord.gg/jWxeDSf7HP ◄





    See full signature

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra sau conecta rapid utilizând contul tău de Discord, Github sau Google.

    Înregistrare

    Autentifică-te

    • Subiecte similare

      • de anielle » » în Sisteme Metin2
        3
        Răspunsuri
        1150
        Vizualizări
        de tarata4480
      • de SCOOB » » în FIX-uri
        0
        Răspunsuri
        9
        Vizualizări
        de SCOOB
      • de SCOOB » » în FIX-uri
        2
        Răspunsuri
        1201
        Vizualizări
        de Reizo
      • de Lugh » » în Îmbunătățiri
        5
        Răspunsuri
        1072
        Vizualizări
        de Lugh
      • de SCOOB » » în FIX-uri
        0
        Răspunsuri
        653
        Vizualizări
        de SCOOB

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

    Informații

    Utilizatori ce navighează pe acest forum: akino6666, Alex Ivan, Deversito și 5 vizitatori

    Discord ID copiat: