Salut à tous !
Je rencontre actuellement un problème lors de la lecture de la longueur des paquets. Mon code est celui de RaphyTheGeek, soit pour les flemmards :
private void ParseData(byte[] DataToParse)
{
// Déclaration des variables qui seront utilisées
int index = 0;
short id_and_packet_lenght_type, packet_id, packet_lenght_type;
Int32 packet_lenght = 0;
byte[] packet_content;
// Lecture jusqu'à la fin de byte[] data
while (index != DataToParse.Length)
{
// Décodage du header
id_and_packet_lenght_type = (short)(DataToParse[index] * 256 + DataToParse[index + 1]); // Selection des 2 premiers octets du paquet
packet_id = (short)(id_and_packet_lenght_type >> 2); // Récupérer l'ID du paquet
packet_lenght_type = (short)(id_and_packet_lenght_type & 3); // Récupérer la taille de la taille de la longueur du paquet
index += 2; // On se déplace 2 octets plus loin
// Récupération de la taille du paquet
switch (packet_lenght_type)
{
case 0:
packet_lenght = 0;
break;
case 1:
packet_lenght = DataToParse[index];
break;
case 2:
packet_lenght = DataToParse[index] * 256 + DataToParse[index + 1];
break;
case 3:
packet_lenght = DataToParse[index] * 65536 + DataToParse[index + 1] * 256 + DataToParse[index + 2];
break;
}
// Récupération du contenu du paquet
packet_content = new byte[(int)packet_lenght];
Array.Copy(DataToParse, index + packet_lenght_type, packet_content, 0, packet_lenght);
// Création de la variable contenant le contenu du paquet en héxadécimal
string content_hex = string.Empty;
int huit_bytes = 0;
foreach (byte b in packet_content)
{
if (huit_bytes == 8)
{
content_hex += "\r\n";
huit_bytes = 0;
}
content_hex += b.ToString("X2") + " ";
huit_bytes++;
}
// Jounalisation
Log("[Reçu] ID = " + packet_id + " | Taille du contenu = " + packet_lenght + "\r\n" + content_hex);
// Traitement du paquet
TreatPacket(packet_id, packet_content);
// Définition de l'index qui démarre le paquet suivant
index += packet_lenght + packet_lenght_type;
}
}
Je rencontre un problème sur le paquet PrismsListMessage (ID = 6440). Le problème apparaît lors du Array.Copy, étant donné que la longueur du packet est plus longue que la longueur de DataToParse. En effet, j'obtiens un packet_lenght_type de 2, et une longueur de 11911 (au lieu d'environ 3500). J'ai par ailleurs remarqué que la variable index était, à l'endroit du bug, d'environ 120 au lieu de 2 (étant donné le packet_lenght_type de 2).
Si quelqu'un a la solution, ou si quelqu'un a déjà rencontré ce problème, il est le bienvenu ! :)
En espérant vous avoir donné suffisamment d'infos ! :)
Veriditas !