Re: Comprendre le protocole de Dofus 2.0
Merci Bouh2, un retour aux sources ne peut pas faire de mal ;)
Un petit détail m'intrigue, car j'ai retrouvé cette lourdeur un peu partout (de qui l'oeuf ou la poule...).
Dans :
length = (uint)(((m_buffer.ReadByte() & 255) << 16) + ((m_buffer.ReadByte() & 255) << 8) + (m_buffer.ReadByte() & 255));
j'imagine que ReadByte renvoie un Byte ou au pire un int avec une valeur forcément <256. Alors pourquoi mettre des "& 255" à chaque fois que tu lis un octet ?
Une alternative pour déterminer la taille :
au lieu de
switch (lenType)
{
case 0:
{
length = 0;
}
case 1:
{
length = m_buffer.ReadByte();
}
case 2:
{
length = m_buffer.ReadUShort();
}
case 3:
{
length = (uint)(((m_buffer.ReadByte() & 255) << 16) + ((m_buffer.ReadByte() & 255) << 8) + (m_buffer.ReadByte() & 255));
}
default:
{
length = 0;
}
}
(Qui d'ailleurs n'est pas correct, car il manque les "break;")
on peut opter pour le code un peu plus compact suivant :
length = 0;
while (lenType--)
length = (length << 8) + m_buffer.ReadByte();