Bonsoir,
Vus que cela fait bientôt un an que je n'ai pas recommencé à développer un bot pour Dofus, je me suis intéressé de près au tutoriel suivant écrit par Maxilia : https://cadernis.fr/index.php?threads/[tuto]-bot-socket-les-fondamentaux.491/. À la fin du buffer, je veux déclencher l'événement RecievePacketBuffer mais j'obtient ce code d'erreur :
Voici le code source du dit buffer :
J'ai instancié le packet à part dans une variable Packet pour vérifier son contenu, il est correctement déclaré. Je ne comprends vraiment pas pour cette exception se déclenche.
J'espère que vous allez pouvoir m'éclairer ! Amicalement.
Vus que cela fait bientôt un an que je n'ai pas recommencé à développer un bot pour Dofus, je me suis intéressé de près au tutoriel suivant écrit par Maxilia : https://cadernis.fr/index.php?threads/[tuto]-bot-socket-les-fondamentaux.491/. À la fin du buffer, je veux déclencher l'événement RecievePacketBuffer mais j'obtient ce code d'erreur :
Code:
System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
à RMDofus.DNetwork.DBuffer.ProcessQueue() dans c:\Users\Jules\Documents\SharpDevelop Projects\MITMDofus\MITMDofus\DNetwork\DBuffer.cs:ligne 93
à RMDofus.DNetwork.DBuffer.OnQueue(Byte[] buffer) dans c:\Users\Jules\Documents\SharpDevelop Projects\MITMDofus\MITMDofus\DNetwork\DBuffer.cs:ligne 35
à RMDofus.DNetwork.RMSocket.listening() dans c:\Users\Jules\Documents\SharpDevelop Projects\MITMDofus\MITMDofus\DNetwork\RMSocket.cs:ligne 60
à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
à System.Threading.ThreadHelper.ThreadStart()
Code:
/*
* Created by SharpDevelop.
* User: Jules
* Date: 26/09/2012
* Time: 03:49
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using RMDofus.DPacket;
using RMDofus.DNetwork;
namespace RMDofus.DNetwork
{
/// <summary>
/// Description of DBuffer.
/// </summary>
public class DBuffer
{
private Queue<byte> _byteQueue = new Queue<byte>();
public event EventHandler<PacketBufferEventArg> RecievePacketBuffer;
public DBuffer()
{
}
public void OnQueue(byte[] buffer)
{
foreach (byte _byte in buffer)
{
_byteQueue.Enqueue(_byte);
}
ProcessQueue();
}
public void ProcessQueue()
{
while (_byteQueue.Count > 0)
{
if (_byteQueue.Count < 2) {
return;
}
DofusReader _reader = new DofusReader(_byteQueue.ToArray());
short header = _reader.readShort();
short protocolID = (short)(header >> 2);
short lenghtSize = (short)(header & 3);
if (_byteQueue.Count < 2 + lenghtSize) {
return;
}
short lenght;
switch (lenghtSize)
{
case 0:
lenght = 0;
break;
case 1:
lenght = _reader.readByte();
break;
case 2:
lenght = _reader.readShort();
break;
case 3:
lenght = (short)((((_reader.readByte() & 255) << 16) + ((_reader.readByte() & 255) << 8) + (_reader.readByte() & 255)));
break;
default:
throw new Exception();
}
if (_byteQueue.Count < lenght + lenghtSize + 2) {
return;
}
DequeueByteUtils(lenghtSize);
byte[] data = new Byte[lenght];
Console.WriteLine("ID: {0}", protocolID);
Console.Write("Message: ");
for (int i = 0; i < data.Length; i++)
{
data[i] = _byteQueue.Dequeue();
}
PacketBufferEventArg Packet = new PacketBufferEventArg(protocolID, data);
RecievePacketBuffer(null, Packet); // Ligne de l'erreur.
}
}
private void DequeueByteUtils(short lenghtSize)
{
_byteQueue.Dequeue();//
_byteQueue.Dequeue();// Header
if (lenghtSize > 0)
_byteQueue.Dequeue();
if (lenghtSize > 1)
_byteQueue.Dequeue();
if (lenghtSize > 2)
_byteQueue.Dequeue();
}
}
}
J'espère que vous allez pouvoir m'éclairer ! Amicalement.