Des UTF à la lecture du PrismsListMessage ?!?!

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#1
J'ai intercepté le contenu d'un PrismsListMessage : http://termbin.com/2jka

D'abord je lis la taille du Vector : \x00\xcd -> 205
puis je lis le typeId du premier élément : \x01\xb2 -> 434 -> PrismGeolocalizedInformation
ensuite je le lis, ça donne :
JavaScript:
{'prism': {'typeId': 1, 'rewardTokenCount': 14402, 'nextVulnerabilityDate': 16865975, '__type__': 'PrismInformation', 'placementDate': 1931500013, 'state': -85}, 'worldX': -26, 'worldY': -60, 'allianceId': 0, '__type__': 'PrismGeolocalizedInformation', 'mapId': 144700.0, 'subAreaId': 49}
mais quand j'essaye de lire le typeId du PrismSubareaEmptyInfo suivant, ça me donne 47252.

Cependant, le seul sous-type de PrismSubareaEmptyInfo est PrismGeolocalizedInformation,
du coup j'ai regardé les occurrences de \x01\xb2 dans mon message de départ,
et c'est très périodique.
C'est le premier message avec lequel j'ai des problèmes, et je pense que mes reader / writer binaires sont bons à 90%.
En fait, pour être même plus précis, il y a 204 occurrences de \x01\xb2 et une de \x01\xb6 qui correspond à PrismSubareaEmptyInfo. Donc je suis sûr que ce que j'ai reçu est correct.

Il y a clairement des chaînes de caractère dans les données binaires, sûrement le nom d'une guilde.
Par exemple, le premier "segment" (je sépare les segments par \x01\xb2 et \x01\xb6) est : b"\x01\xb21\x00\xff\xe6\xff\xc4A\x01\xa9\xe0\x00\x00\x00\x00\x01\xab\x01\x01Z\xb7s Y\xed\xc2p\xb8\x94\x01\xa7\n\x00\x05Chips\x00\x1cTous contre nous mais on win.\x00\xff\xc4E\x01\x00\x04\x01\x01"

Je sais que c'est un PrismGeolocalizedInformation grâce à \x01\xb2, mais quand j'essaye de le lire avec mon reader, j'arrive que 26 bytes après donc il en reste 52, qui contiennent entre autres les chaînes de caractères, et je ne sais pas du tout d'où ça vient !

Je pense qu'il devrait y avoir un readUTF quelque part, mais il n'y en a pas dans PrismsListMessage, PrismGeolocalizedInformation, PrismSubareaEmptyInfo ou PrismInformation.

EDIT: Il y a de grandes chances que l'erreur vienne de mon reader / writer actuel, (par exemple le mapID), le voici : http://termbin.com/n03i

EDIT:
Merci à @Trytax et @DevChris pour avoir relevé une erreur dans les float et double qui étaient en little endian, le pb principal est pas résolu.
 
Dernière édition:

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#2
Problème résolu grâce à @DevChris qui m'a dit que les UTF proviennent de AllianceInformations.

Partant de là, j'ai vu que mon protocolBuilder était faux parce qu'il considérait prism de PrismGeolocalizedInformation comme étant de type fixé et n'appelait donc pas le ProtocolTypeManager.
 
Haut Bas