Résolu Compréhension écriture/lecture des packets

Inscrit
16 Juin 2019
Messages
31
Reactions
0
#1
Bonjour à tous !

J'aimerais savoir si j'ai bien compris le write en littleendian:

Un byte bah on le lit direct ...
Un short on lit un byte on ce replace au début << 8 | on rajoute le suivant (je crois?)
Un int on fait pareille 4 octets on ce replace au début << 8 << 16 << 24
Le long pareille 8 fois << 8 << 16 << 24 << 32 << 40 << 48 << 56

Edit: (Je ne sais pas si <<8 c'est l'équivalent de faire un tableau de bytes à l'envers)
Edit2: (Non ça ne l'est pas, c'est un décalage de 8 bit sur la gauche à voir ici)

Bon le unsigned sa change pas.

Par contre j'ai rien compris à tout ce qui est varInt varLong varShort ni à quoi ça correspondait !
Et je n'ai pas envie de bêtement faire du copier .. J'aimerais comprendre quoi.

Bon après avoir l'id et la taille du paquet sa j'ai compris.
J'ai pas regarder pour le read mais ça doit être sensiblement la même chose.

J'aimerais savoir également où est la class ICustomDataOutput car j'ai sothink qui crash en recherche/décompilage.
J'ai décompiler petite parties par petites parties sauf je crois 2/3 fichiers et j'ai pas la class parmi ceux que j'ai décompiler
(j'ai fais un logiciel pour chercher dans les .as sortie).

Du coup ... Suis-je bon ? Et à quoi correspond les varInt varLong varShort (puisqu'ils ne correspondent pas à un int,long,short normal ..) et où est cette fameuse class ? Je pourrais juste traduire le code si je la trouver.

Je crois que c'est le seul truc qui me bloque ... Et j'aimerais être sûr de ce que je penses savoir pour m'améliorer.
Je suis allergique aux sources toutes prête :D

Merci !
 
Dernière édition:
Inscrit
28 Février 2014
Messages
99
Reactions
35
#2
Les classes ICustomDataInput et ICustomDataOutput sont à "com.ankamagames.jerakine.network". Tu trouves toutes les fonctions déclarées de l'interface dans CustomDataWrapper.
 
Inscrit
16 Juin 2019
Messages
31
Reactions
0
#3
Les classes ICustomDataInput et ICustomDataOutput sont à "com.ankamagames.jerakine.network". Tu trouves toutes les fonctions déclarées de l'interface dans CustomDataWrapper.
Ah, j'ai pas chercher à ce niveau là j'ai Focus le fichier D0f.
Merci beaucoup :D

Vivement que je reçois ma nouvelle carte mère je penses c'est ce qui provoque les crashs ^^
 
Inscrit
22 Juillet 2018
Messages
81
Reactions
12
#4
Le système de varInt, varShort etc...c'est un concept piqué à protobuf : https://carlmastrangelo.com/blog/lets-make-a-varint

en gros, un var short c'est un short entre [1;3] octets, qui peut varier en taille par rapport à un short classique. L'inconvénient, si le short peut, il rentre sur un octet ou deux (petit gain, ou pas de gain) ou alors sur trois si la taille dépasse la capacité du short.
C'est une sorte d'optimisation, qui doit être ciblée (si la taille est souvent inférieure à la capacité, sinon tu te retrouveras à envoyer 2 ou 3 octets à chaque fois) au risque qu'elle soit contre-productive.
 
Inscrit
16 Juin 2019
Messages
31
Reactions
0
#5
Le système de varInt, varShort etc...c'est un concept piqué à protobuf : https://carlmastrangelo.com/blog/lets-make-a-varint

en gros, un var short c'est un short entre [1;3] octets, qui peut varier en taille par rapport à un short classique. L'inconvénient, si le short peut, il rentre sur un octet ou deux (petit gain, ou pas de gain) ou alors sur trois si la taille dépasse la capacité du short.
C'est une sorte d'optimisation, qui doit être ciblée (si la taille est souvent inférieure à la capacité, sinon tu te retrouveras à envoyer 2 ou 3 octets à chaque fois) au risque qu'elle soit contre-productive.
Je comprends mieux pourquoi je ne l'avais jamais vu :)
Donc si j'ai bien compris avant de le lire on à la taille dans le byte précédent et par rapport à ça pour lire on sait si c'est 1/2/3 bytes ?

Pour l'écrire bah c'est nous qui faisons donc ça change rien quoi .. (bon faut copier le procéder pour pas être spotted).
 
Inscrit
22 Juillet 2018
Messages
81
Reactions
12
#6
Non, en gros tu lis ton octet. Si le bit de poids fort (le 1er) est à 1 il y a une suite, sinon c'est que tu es arrivé a la fin. Donc tu ne peux stocker que 7 bits sur les 8 dans chaque octet
 
Inscrit
16 Juin 2019
Messages
31
Reactions
0
#7
Non, en gros tu lis ton octet. Si le bit de poids fort (le 1er) est à 1 il y a une suite, sinon c'est que tu es arrivé a la fin. Donc tu ne peux stocker que 7 bits sur les 8 dans chaque octet
Mmh, étrange, en sois je comprend le 1er bit dit si il y à une suite ou non, mais en sois je ne vois pas comment stocker mes 7 bits suivant, mais là le problème est plus un soucis de manque de connaissance, je vais googler un peu merci :)

Edit: Du coup si j'envoie (32 567)
0111 1111
1111 1111 ben .. Il y à pas de suite.

Et si j'envoie genre 600 ça donnerait genre ...
1000 0010
0101 1000

Pour le lire suffirait de lire
0000 0010
0101 1000

C'est ça?
 
Dernière édition:
Inscrit
22 Juillet 2018
Messages
81
Reactions
12
#8
Tout à fait

Sur 8 bits 1 sert de flag pour la suite, 7 pour les donnees !
 
Inscrit
16 Juin 2019
Messages
31
Reactions
0
#9
Tout à fait

Sur 8 bits 1 sert de flag pour la suite, 7 pour les donnees !
Merci énorme ! :) Histoire de bien avoir compris car je crois avoir fais "sans le vouloir" un bon truc précedemment mais non valable avec ma façon de penser pour un truc plus gros comme int ou long donc en int 1147516415 ça donnerait:

Code:
0100 0100
0110 0101
1011 0101
1111 1111
Du coup ... Faut faire ... Comme ça?:

Code:
1000 0100
1010 0011
1001 0110
1110 1011
0111 1111
J'ai bien tout compris ? Je crois j'ai mal compris un truc ... Je pars du dernier et je remonte de 7 j'ajoute 0, puis je continue en ajoutant 1 à chaque fois (+ le zéros manquant sur le premier)
 
Dernière édition:
Haut Bas