Historique des modifications - Message

Message #11700

Sujet: [Raknet] envoyer et recevoir des objets


Type Date Auteur Contenu
Création du message 30-04-2016 10:24:08 Magun
et bien tu peut envoyer des structures a condition qu'elle ne possède pas de pointeur vers d'autres objets
reste alors le probleme little/big endian, mais clairement en c++ tu ne pourras pas faire mieux, à part serialiser tes objets

perso j'ai fait mon protocol reseau chaque trame est composer d'un header comportant des opcodes pour différentes commandes/sous-commande/...
le reste c'est grossomodo des données brutes +/- sérialisé

Code c++ :


                    global[0] = a;

                    for(irr::u8 i = 0; i<12; ++i) global[ 1+i] = name[i];
                    for(irr::u8 i = 0; i<12; ++i) global[13+i] = owner[i];

                    packUnsignedInt(id, global, 25);
                    packUnsignedShort(group, global, 29);
                    packUnsignedShort(guild, global, 31);

                    packUnsignedChar(lvl, global, 33);
                    packUnsignedChar(race_id, global, 34);
                    packUnsignedChar(class_id, global, 35);
                    packUnsignedChar(zone_id, global, 36);

                    packUnsignedChar(FOR, global, 37);
                    packUnsignedChar(AGI, global, 38);
                    packUnsignedChar(VIT, global, 39);
                    packUnsignedChar(INT, global, 40);
                    packUnsignedChar(DEX, global, 41);

                    packFloat(pos.X, global, 42);
                    packFloat(pos.Y, global, 46);
                    packFloat(pos.Z, global, 50);
                    packFloat(rot.X, global, 54);
                    packFloat(rot.Y, global, 58);
                    packFloat(rot.Z, global, 62);


et pour la reception, j'ai simplement un tableau de "functor", ça peut être des objets ou des pointeur sur fonctions

Code c++ :


        if(recv[0] >= 0 && recv[0] < network::CONTEXT_COUNT)
             func[recv[0]]->manage(recv);
        else std::cout << "bad call of index" << (int)recv[0] << std::endl;


ça fait le cafée rapidement et facilement maintenable
juste la sérialisation/désérialisation à faire à la main pour chaque objet
et encore, je pensse qu'avec de bon template on peut abstraire cette étape

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
156 invités en ligne
membre en ligne: -
RSS Feed