Je suis sous OS X j'utilise donc FFDec mais je ne sais pas si c'est le meilleur à disposition.
Concernant le IdentificationMessage, comment dois-je procéder à la réception du HelloConnectMessage pour serialize le IdentificationMessage correctement.
J'ai traduis le paquet en python et ça me donne cela :
IdentificationMessage.py
Cliquez pour révéler
Cliquez pour masquer
# coding: utf-8
from Dofus.Network.Messages import Message
from Dofus.Network.Types.Version.VersionExtended import VersionExtended
from Jerakine.Network.Utils.BooleanByteWrapper import BooleanByteWrapper
class IdentificationMessage(Message):
m_version = VersionExtended()
m_lang = ""
m_credentials = []
m_serverId = 0
m_autoconnect = False
m_useCertificate = False
m_useLoginToken = False
m_sessionOptionalSalt = 0
m_failedAttempts = []
def __init__(self):
self.m_protocolId = 4
self.m_version = VersionExtended()
self.m_credentials = []
self.m_failedAttempts = []
def initIdentificationMessage(param1, param2, param3, param4, param5, param6, param7, param8, param9):
self.m_version = param1;
self.m_lang = param2;
self.m_credentials = param3;
self.m_serverId = param4;
self.m_autoconnect = param5;
self.m_useCertificate = param6;
self.m_useLoginToken = param7;
self.m_sessionOptionalSalt = param8;
self.m_failedAttempts = param9;
return self
def reset():
self.m_version = VersionExtended();
self.m_credentials = [];
self.m_serverId = 0;
self.m_autoconnect = False;
self.m_useCertificate = False;
self.m_useLoginToken = False;
self.m_sessionOptionalSalt = 0;
self.m_failedAttempts = [];
def serialize(self, writer):
_loc2_ = 0
_loc2_ = BooleanByteWrapper.setFlag(_loc2_, 0, self.m_autoconnect)
_loc2_ = BooleanByteWrapper.setFlag(_loc2_, 1, self.m_useCertificate)
_loc2_ = BooleanByteWrapper.setFlag(_loc2_, 2, self.m_useLoginToken)
writer.writeByte(_loc2_)
self.m_version.serialize(writer)
writer.writeUTF(self.m_lang)
writer.writeVarInt(len(self.m_credentials))
_loc3_ = 0
while (_loc3_ < len(self.m_credentials)):
writer.writeByte(self.m_credentials[_loc3_])
_loc3_ += 1
writer.writeShort(self.m_serverId)
if (self.m_sessionOptionalSalt < -9007199254740990 || self.m_sessionOptionalSalt > 9007199254740990):
Log.Error ("Forbidden value (%s) on element sessionOptionalSalt." %s (self.m_sessionOptionalSalt))
writer.writeLong(self.m_sessionOptionalSalt)
writer.writeShort(len(self.m_failedAttempts))
_loc4_ = 0
while (_loc4_ < len(self.m_failedAttempts)):
if (self.m_failedAttempts[_loc4_] < 0):
Log.Error ("Forbidden value (%s) on element 9 (starting at 1) of failedAttempts." %s (self.m_failedAttempts[_loc4_]))
write.writeShort(self.m_failedAttempts[_loc_4])
_loc4_ += 1
Et je procède comme suit pour traiter les paquets reçu :
PacketReader.py
Cliquez pour révéler
Cliquez pour masquer
# coding: utf-8
from InputOuput.BigEndianReader import BigEndianReader
from Utils.LogClass import Log
from Dofus.Network.MessageReceiver import MessageReceiver
class PacketReader():
def __init__(self, protocolId, packetLength, packetContent):
self.m_protocolId = protocolId
self.m_packetContent = packetContent
self.m_reader = BigEndianReader(self.m_packetContent)
self.m_packetLength = packetLength
def readPacketById(self):
message = MessageReceiver().parse(self.m_reader, self.m_protocolId, self.m_packetLength)
if message is not None: print (message.__dict__)
if (message.protocolId == 3):
self.handleHelloConnectMessage(message)
def handleHelloConnectMessage(self, message):
pass
Comme tu peux le voir je dois donc remplir la fonction handleHelloConnectMessage pour serialize le IdentificationMessage pour pouvoir l'envoyer au serveur et m'authentifier mais je ne sais qu'elle procédure suivre.