2.0 Impossible de lire au-delà de la fin du flux.

Inscrit
19 Decembre 2016
Messages
35
Reactions
0
#1
Salut, quand j'essaye de me connecter sur mon serveur Dofus, ça me déconnecte directement avec un message en jaune dans la console auth.

Code:
Stump.Server.BaseServer.Network.BaseClient.ProcessReceive ->
    Forced disconnection <127.0.0.1> : System.IO.EndOfStreamException: Impossible de lire au-delà de la fin du flux.
   à System.IO.BinaryReader.ReadByte()
   à Stump.Core.IO.BigEndianReader.ReadBigEndianBytes(Int32 count) dans C:\Users\Anthony\Desktop\stumpRemak\Core\Stump.Core\IO\BigEndianReader.cs:ligne 74
   à Stump.Core.IO.BigEndianReader.ReadUShort() dans C:\Users\Anthony\Desktop\stumpRemak\Core\Stump.Core\IO\BigEndianReader.cs:ligne 124
   à Stump.Core.IO.BigEndianReader.ReadUTF() dans C:\Users\Anthony\Desktop\stumpRemak\Core\Stump.Core\IO\BigEndianReader.cs:ligne 221
   à Stump.DofusProtocol.Messages.IdentificationMessage.Deserialize(IDataReader reader) dans C:\Users\Anthony\Desktop\stumpRemak\DofusProtocol\Messages\Messages\connection\IdentificationMessage.cs:ligne 73
   à Stump.DofusProtocol.Messages.Message.Unpack(IDataReader reader) dans C:\Users\Anthony\Desktop\stumpRemak\DofusProtocol\Messages\Message.cs:ligne 18
   à Stump.DofusProtocol.Messages.MessageReceiver.BuildMessage(UInt32 id, BigEndianReader reader) dans C:\Users\Anthony\Desktop\stumpRemak\DofusProtocol\Messages\MessageReceiver.cs:ligne 66
   à Stump.Server.BaseServer.Network.BaseClient.BuildMessage() dans C:\Users\Anthony\Desktop\stumpRemak\Server\Stump.Server.BaseServer\Network\BaseClient.cs:ligne 193
   à Stump.Server.BaseServer.Network.BaseClient.ProcessReceive(Byte[] data, Int32 offset, Int32 count) dans C:\Users\Anthony\Desktop\stumpRemak\Server\Stump.Server.BaseServer\Network\BaseClient.cs:ligne 148
Voici le code de mon fichier IdentificationMessage :

Code:
using System;
using Stump.Core.IO;
using System.Collections.Generic;
using System.Linq;

namespace Stump.DofusProtocol.Messages
{
    public class IdentificationMessage : Message
    {
        public const uint Id = 4;
        public override uint MessageId
        {
            get
            {
                return 4;
            }
        }
        
        public bool autoconnect;
        public bool useCertificate;
        public bool useLoginToken;
        public Types.VersionExtended version;
        public string lang;
        public string login;
        public IEnumerable<sbyte> credentials;
        public short serverId;
        
        public IdentificationMessage()
        {
        }
        
        public IdentificationMessage(bool autoconnect, bool useCertificate, bool useLoginToken, Types.VersionExtended version, string lang, string login, IEnumerable<sbyte> credentials, short serverId)
        {
            this.autoconnect = autoconnect;
            this.useCertificate = useCertificate;
            this.useLoginToken = useLoginToken;
            this.version = version;
            this.lang = lang;
            this.login = login;
            this.credentials = credentials;
            this.serverId = serverId;
        }
        
        public override void Serialize(IDataWriter writer)
        {
            byte flag1 = 0;
            flag1 = BooleanByteWrapper.SetFlag(flag1, 0, autoconnect);
            flag1 = BooleanByteWrapper.SetFlag(flag1, 1, useCertificate);
            flag1 = BooleanByteWrapper.SetFlag(flag1, 2, useLoginToken);
            writer.WriteByte(flag1);
            version.Serialize(writer);
            writer.WriteUTF(lang);
            writer.WriteUTF(login);
            writer.WriteUShort((ushort)credentials.Count());
            foreach (var entry in credentials)
            {
                writer.WriteSByte(entry);
            }
            writer.WriteShort(serverId);
        }
        
        public override void Deserialize(IDataReader reader)
        {
            byte flag1 = reader.ReadByte();
            autoconnect = BooleanByteWrapper.GetFlag(flag1, 0);
            useCertificate = BooleanByteWrapper.GetFlag(flag1, 1);
            useLoginToken = BooleanByteWrapper.GetFlag(flag1, 2);
            version = new Types.VersionExtended();
            version.Deserialize(reader);
            lang = reader.ReadUTF();
            login = reader.ReadUTF();
            int limit = reader.ReadUShort();
            credentials = new sbyte[limit];
            for (int i = 0; i < limit; i++)
            {
                (credentials as sbyte[])[i] = reader.ReadSByte();
            }
            serverId = reader.ReadShort();
        }
    }
}
Merci pour votre aide et bonne soirée.
 

BlueDream

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

Très certainement que le client que tu utilises est à la dernière version et que les sources de Stump sont destinés a une version antérieure du jeu.

Il faut mettre à jour l'ensemble du protocole.
Tu dois décompiler les sources du jeu.
Je t'invite à utiliser la fonction 'Recherche' du forum.
 
Inscrit
19 Decembre 2016
Messages
35
Reactions
0
#3
Salut, merci pour ta réponse, mais il s'agit bien du client 2.6.2 et de Stump 2.6.2 (sources partagées), donc normalement je n'ai pas à faire d'update.

Merci pour votre aide et bonne soirée.
 
Inscrit
25 Novembre 2015
Messages
169
Reactions
20
#4
Les logs sont très explicite sérieusement... ça throw au premier readUTF de ta fonction deserialize, plus particulièrement parce qu'il dois lire une mauvaise valeur quelque part dans le flux pour avoir une str len trop longue et ça te mène a une EndOfStreamException. Compare ta fonction avec celle du jeu, et si elle fait pas la meme chose le probleme se situe ailleurs.
 
Inscrit
19 Decembre 2016
Messages
35
Reactions
0
#5
Salut, merci pour ta réponse.

J'ai comparé mon IdentificationMessage du serveur avec celui du client et ça à l'air d'être pareil.

Ou est-ce que je dois modifier la valeur qui est trop longue ? Qu'est-ce que je dois faire sinon ?

Merci pour votre aide et bonne journée.

PS : comment je peux décompiler les sources de Stump svp ?
 
Dernière édition:
Haut Bas