VB/VB.Net [RESOLU] Problème de serialisation de la packet 42

Inscrit
14 Mars 2015
Messages
68
Reactions
0
#1
Hello tout le monde, :)

J'ai un petit problème :oops: avec la serialisation de la packet 42 , j'ai un message d'erreur "System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet " ,
code de serialisation
Code:
  writer.WriteVarShort(m_serverId)
            writer.WriteUTF(m_address)
            writer.WriteShort(m_port)
            writer.WriteBoolean(m_canCreateNewCharacter)
            writer.WriteVarInt(m_ticket.Count)
            Dim ticketIndex As Integer
            ticketIndex = 0
            While (ticketIndex < m_ticket.Count)
                writer.WriteByte(m_ticket(ticketIndex))
                ticketIndex = (ticketIndex + 1)
            End While
image de l'erreur http://s11.postimg.org/ay6h0sg4z/Sans_titre.png


EDIT : [RESOLU] mal utilisation de writer
 
Dernière édition:

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
Bonsoir,

Je ne suis pas convaincu que le problème vienne du serialize et encore moins du writer.
Le problème vient très certainement des arguments que tu fournis à ta classe.
De plus je ne comprends pas bien "l'image de l'erreur".

Ou alors tu utilises peut être mal le writer.
Nous avons besoin d'avantage de code et d'infos.
 
Inscrit
14 Mars 2015
Messages
68
Reactions
0
#3
Hem ,
code serialize de packet 42
Public Overrides Sub Serialize(ByVal writer As DofusMessage)
writer.WriteVarShort(m_serverId)
writer.WriteUTF(m_address)
writer.WriteShort(m_port)
writer.WriteBoolean(m_canCreateNewCharacter)
writer.WriteVarInt(m_ticket.Count)
Dim ticketIndex As Integer
ticketIndex = 0
While (ticketIndex < m_ticket.Count)
writer.WriteByte(m_ticket(ticketIndex))
ticketIndex = (ticketIndex + 1)
End While
End Sub[

pour ecrire le serverid il utilise le WriteVarShort
code de WriteVarShort
Public Sub WriteVarShort(ByVal int As Integer) Implements IDataWriter.WriteVarShort
Dim local_5 = 0
If int > SHORT_MAX_VALUE Or int < SHORT_MIN_VALUE Then
Throw New System.Exception("Forbidden value")
Else
Dim local_2 As BigEndianWriter = New BigEndianWriter()
If int >= 0 And int <= MASK_0 Then
local_2.WriteByte(CByte(int))
WriteBytes(local_2.Data)
Return
End If

Dim local_3 = int And 65535
Dim local_4 As BigEndianWriter = New BigEndianWriter()

While local_3 <> 0
local_4.WriteByte(CByte(local_3 And MASK_0))
local_4.Position = local_4.Data.Length - 1

Dim local_4_reader As BigEndianReader = New BigEndianReader(local_4.Data)
local_5 = local_4_reader.ReadByte()
local_4 = New BigEndianWriter(local_4_reader.Data)

local_3 = CInt(CUInt(local_3 >> CHUNCK_BIT_SIZE))
If local_3 > 0 Then
local_5 = local_5 Or MASK_1
End If
local_2.WriteByte(CByte(local_5))
End While
WriteBytes(local_2.Data)
Return
End If
End Sub
lorsqu' il exécute le WriteBytes(local_2.Data) il resté bloquer sur "Dim pos = m_writer.BaseStream.Position"

Public ReadOnly Property BaseStream() As Stream
Get
Return m_writer.BaseStream
End Get
End Property

Public ReadOnly Property BytesAvailable() As Long
Get
Return m_writer.BaseStream.Length - m_writer.BaseStream.Position
End Get
End Property

Public Property Position() As Long
Get
Return m_writer.BaseStream.Position
End Get
Set(ByVal Value As Long)
m_writer.BaseStream.Position = Value
End Set
End Property

Public ReadOnly Property Data() As Byte() Implements IDataWriter.Data
Get

->>> ici Dim pos = m_writer.BaseStream.Position <<<<-----
System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet

Dim datas = New Byte(m_writer.BaseStream.Length - 1) {}
m_writer.BaseStream.Position = 0
m_writer.BaseStream.Read(datas, 0, CInt(m_writer.BaseStream.Length))
m_writer.BaseStream.Position = pos

Return datas
End Get
End Property
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#4
Bonsoir,

Je vois que ton problème est résolu. Merci de bien vouloir nous partager la solution afin que d'autres qui auraient le même problème puissent trouver de l'aide ici.
 
Inscrit
14 Mars 2015
Messages
68
Reactions
0
#5
La solution --> Utilisation les nouveau IO
 
Dernière édition:
Haut Bas