Reader & Writer

Inscrit
30 Juin 2020
Messages
23
Reactions
12
#1
Bonjour,
Je ne sais pas si ce topic a déjà été fait, probablement mais bon j'en ai pas vu de cette année.
Je voudrais savoir s'il y a récemment eu des changements dans les reader et writer Dofus, actuellement j'utilise les reader et writer de RaidBot. Qui me semble n'être plus à jour...
C'est pourquoi j'ai envie de tout reprendre à 0 mais je n'y connais rien, je sais codé en C# sauf sur tout ce qui concerne la partie "réseau", les sockets, la lecture de packets..

Si vous pouvez m'aiguiller, me donner des pistes, des tutos, afin de pouvoir être capable de correctement traduire et comprendre les fonctions writer et reader présentes dans les sources.

Si j'ai bien compris je dois traduire les classes suivantes : Binary64, Int64, UInt64, BooleanByteWrapper, CustomDataWrapper, ICustomDataInput, ICustomDataOutput, NetworkMessage.
Donc si j'ai bien compris: Ankama pour lire et écrire ses packets utilise IDataInput/Output qui est une fonction (classe?) directement intégré à AS3, donc déjà il faut traduire ces deux là, et il ne change pas et ne changeront jamais c'est bien ça ? Seuelement les fonctions propres à Ankama peuvent être amenées à changer ? (ReadVarInt, ReadVarShort par exemple...)

Désolé du pavé et des fautes.. merci !
 

Elwazo

Contributeur
Inscrit
30 Mars 2020
Messages
9
Reactions
6
#2
D'après ce que tu écris, j'ai l'impression que tu regardes le code de RaidBot plutot que celui d'ankamagames directement.
Si tu veux repartir de 0, essaie plutôt de copier le code d'AG. Typiquement, je ne sais pas pourquoi tu voudrais faire une classe avec les uint64, ça doit être un type primitif en c# !
Je crois que le code du binary reader/writer n'a pas changé depuis longtemps, et c'est la seule classe que j'ai eu besoin de ré-implémenter.

La meilleure piste pour savoir par où commencer, c'est le code de D2 (et pour voir une approche assez pratique, y'a le code de Labo aussi, mais je pense que c'est pas l'approche à suivre en c#) !
 

Elwazo

Contributeur
Inscrit
30 Mars 2020
Messages
9
Reactions
6
#4
Je recommande pas de copier le code, mais plutot que de faire une copie d'une copie, autant faire une copie de l'original, surtout pour ce qui est du writer, qui est un truc assez direct.
En fait, ce qui me dérangeait le plus c'est qu'il dise vouloir faire une classe uint64, alors que aujourd'hui c'est clairement un truc standard, donc ça serait dommage qu'il le refasse simplement parce que c'est le cas dans un vieux code.

Je sais pas où tu trouves tes sources, mais avec JPEX j'ai rarement des soucis d'obfu.
 
Inscrit
30 Juin 2020
Messages
23
Reactions
12
#5
Merci pour vos réponse. En fait j'ai vraiment du mal avec le AS3 j'ai jamais pratiqué, et le C# j'ai pas non plus un très bon niveau, c'est pour ça que je compare toujours avec ce que fait RaidBot pour voir si je suis dans le bon chemin niveau traduction, et il se trouve que le bot possède une classe Uint64. ^^

BlueDream le git que tu as posté les méthodes sont à jour ? J'ai bien envie d'essayer de traduire de mon côté et d'avoir un modèle correct comparable avec ce que je fait.
Ah oui, et est-ce possible de simplifier au maximum les IO ? J'ai vu des rep avec trois classe pour lire et écrire des données, de mémoire BooleanByteWrapper, et deux classes "DataReader" et "DataWriter". Quelles sont les méthodes à obligatoirement garder pour tout faire fonctionner ?
 

Elwazo

Contributeur
Inscrit
30 Mars 2020
Messages
9
Reactions
6
#6
Si tu veux un truc réduit au minimum et que tu sais lire le python, tu peux te faire un équivalent c# du binrw de labo
 
Inscrit
30 Juin 2020
Messages
23
Reactions
12
#7
Ah ouais c'est vraiment du beau travail. Merci pour le lien ! Je vais voir tout ça et essayer de l'adapter en C#
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#8
Je recommande pas de copier le code, mais plutot que de faire une copie d'une copie, autant faire une copie de l'original, surtout pour ce qui est du writer, qui est un truc assez direct.
En fait, ce qui me dérangeait le plus c'est qu'il dise vouloir faire une classe uint64, alors que aujourd'hui c'est clairement un truc standard, donc ça serait dommage qu'il le refasse simplement parce que c'est le cas dans un vieux code.

Je sais pas où tu trouves tes sources, mais avec JPEX j'ai rarement des soucis d'obfu.
Au même endroit que toi, le code est légérement obfu,
d'où l'option "Déobfu automatique" dans les paramètres de JPEXS.

Ensuite, copier le code le dofus, je trouve pas ça instructif.
Logiquement oui, mieux vaut aller à la source, mais quand la source est polluée, bah tu vas voir ailleurs.
Surtout qu'il code en C#, je parle pas de réinventer la roue, mais au moins comprendre le code et l'appliquer à sa manière à minima.
Après il va se retrouver avec un code remplis de locs, quelle horreur :') et bonjour la maintenabilité.
 
Haut Bas