Re: Problème Connection
Le parsing :
Imports System.Net.Sockets
Imports System.Text
Public Class Parsing
Public Shared Waiting As Integer
Public Shared Data_out() As Byte
Public Shared Data() As Byte
Public Shared Launched As Boolean
Public Sub parsing(ByVal data() As Byte)
Try
Dim Serveur As String = Consoles.ServerSock.RemoteEP.Address.ToString 'pour savoir sur quel serveur on est
Dim sock As BazSocket = CType(Consoles.lstClient.Items(0), Client).Socket
If Serveur <> "213.248.126.180" Then ' si pas serveur de loging on copie data vers le jeu
If sock IsNot Nothing AndAlso sock.State = BazSocketState.Connected Then
sock.Send(data)
End If
End If
Launched = True
Dim index As Integer ' pour savoir ou on est
Dim id_and_length As UShort ' les 2 premiers octets (16 bits)
Dim packet_id As UShort ' les 14 premiers bits des 16
Dim packet_length_of As Byte ' les 2 derniers bits des 16
Dim packet_length As Integer ' la longueur du packet
Dim Packet_Start As Integer
Dim Packet_End As Integer
If Waiting > 0 Then
'Array.Copy(data, Packet_Start, Data_Out, Waiting, Data_Out.Length - Waiting)
Dim data_temps(data.Length + Data_Out.Length - 1) As Byte
Array.Copy(Data_Out, 0, data_temps, 0, Data_Out.Length)
Array.Copy(data, 0, data_temps, Data_Out.Length, data.Length)
data = data_temps
'Application.DoEvents()
End If
Do Until index = data.Length
Packet_Start = index
id_and_length = data(index) * 256 + data(index + 1)
packet_length_of = id_and_length And 3 ' on veut les 2 derniers bits donc on masque (and) avec 11 en binaire (3 en decimal)
packet_id = id_and_length >> 2 ' on veut les 14 premiers bits donc on decale les 16 bits de 2 bits vers la droite
index += 2 + packet_length_of ' on avance des 2 octets de id_and_length + du nombre d'octets de la taille de taille
Select Case packet_length_of
Case 0
packet_length = 0
Case 1
packet_length = data(index - 1)
Case 2
packet_length = 256 * data(index - 2) + data(index - 1)
Case 3
packet_length = 65536 * data(index - 3) + 256 * data(index - 2) + data(index - 1)
End Select
If index + packet_length > data.Length Then
Waiting = packet_length + index - Packet_Start
ReDim Data_Out(data.Length - Packet_Start - 1)
Array.Copy(data, Packet_Start, Data_Out, 0, data.Length - Packet_Start)
Exit Sub
End If
Console.WriteLine("recu : id->" & packet_id & " len->" & packet_length)
If packet_id = 0 Then
Beep()
Exit Sub
End If
Dim packet(0) As Byte
If packet_length > 0 Then
ReDim packet(packet_length - 1)
Array.Copy(data, index, packet, 0, packet_length)
End If
If Consoles.Debug.Checked Then
For i As Integer = 0 To packet_length - 1 ' on fait defiler tout les octets recus
Console.Write(packet(i).ToString("X2")) ' on ecrit l'octet proprement
Next ' au suivant
Console.WriteLine()
End If
DataCheck(packet_id, New Dofus.DofusReader(New IO.MemoryStream(packet)))
index += packet_length
'If Packet_End + index > data.Length Then
' Waiting = index
' ReDim Data_Out(Packet_End - Packet_Start - 1)
'End If
Packet_End = index
Dim data_temps(Packet_End - Packet_Start - 1) As Byte
Array.Copy(data, Packet_Start, data_temps, 0, data_temps.Length)
If Serveur = "213.248.126.180" Then ' si serveur de loging
If packet_id = 42 Then 'si c'est packet qui contient l'ip de serveur de jeu
If sock IsNot Nothing AndAlso sock.State = BazSocketState.Connected Then
sock.Send(Data_Out) ' on envoie au jeu un faux paquet qui contient 127.0.0.1 pour l'ip de serveur de jeu
End If
CType(Consoles.lstClient.Items(0), Client).Socket.Close()
Do Until Consoles.Log.Text = "Serveur : Déconnecté"
Application.DoEvents()
Loop
Consoles.ServerSock.Connect(Consoles.Address, 5555)
Else
If sock IsNot Nothing AndAlso sock.State = BazSocketState.Connected Then
sock.Send(data_temps)
End If
End If
End If
If Packet_End = data.Length Then
Waiting = 0
ReDim Data_Out(0)
End If
Loop
Launched = False
Console.WriteLine()
Catch e As Exception
Console.WriteLine("parsing() " & e.TargetSite.Name & " -> " & e.Message)
End Try
End Sub
Private Sub DataCheck(ByVal ID As Integer, ByVal PacketData As Dofus.DofusReader)
Dim ID_Message As Object = Nothing
Try
Select Case ID
Case 0
Beep() ' ne doit jamais passer ici
Case (42)
ID_Message = New Messages.Connection.SelectedServerDataMessage
ID_Message.Deserialize(PacketData)
Consoles.Address = ID_Message.Address ' on recupere l'ip de serveur de jeu
ID_Message.initSelectedServerDataMessage(ID_Message.serverId, "127.0.0.1", 5555, ID_Message.canCreateNewCharacter, ID_Message.ticket)
Dim Message As New Dofus.DofusMessage
ID_Message.serialize(Message)
Data_out = Dofus.DofusMessage.Send(ID)
End Select
Catch e As Exception
Console.WriteLine(e.TargetSite.Name & " -> " & e.Message)
End Try
End Sub
End Class
Pour tant des fois il se connecte correctement et des fois non