C# Lecture des sources Stump !

Inscrit
23 Septembre 2010
Messages
30
Reactions
0
#1
Salut tout le monde,

Alors je vous écris aujourd'hui car je désespère avec les source de Stump , je n'arrive pas à les lire !!! Je cherche depuis des mois le parsing des packets un code du genre :

switch(packetID)
case 6314
message = new CredentialsAcknowlegeMessage() //et lui s'occupe de désérialiser etc...

Le créateur (du moins la créatrice ;) qui est assez jolie au passage) de Stump est un réel génie . Mais je trouve que son code n'est pas assez structuré ... Ce qui est normal !!! Fin je veux dire il y a une infinité de possibilités pour coder un émulateur sur une socket basé sur la sérialisation et désérialisation de classes (ou meme structures) . Certains me diront "tu n'as pas le niveau go SDZ" , quand même les gars , je me vente pas je dis juste la vérité je suis pas un programmeur d’exception (je code en C , C++ VB , a peine php et javascript) la je code une application en C# de type Men In The Middle , j'arrive a très bien lire les packets avec la classe BinaryReader (sauf pour la méthode UShort bien sur ou j'ai du override la methode) , mais stump la j'y arrive vraiment pas et sa commence a m'énerver ... Dite moi juste comment le parsing marche ... Au tout début le parsing avait la même gueule que celui ci dessus quand les serveur 2.0 était en train de naître . J'aimerais participer aussi à la communauté mais bon ... Comme je l'ai dit plutôt Bouh2 a fait un travail remarquable mais enfaîte si j'ai du mal c'est que moi j'aurais vraiment vraiment vraiment pas codé comme sa ... Je dis pas que ma méthode est mieux , elle est juste plus simple et lisible , (mais peut etre que celle de Mademoiselle Bouh2 est beaucoup plus optimisée je dois l'avouer) . Bref si vous pourriez me dire comment sa marche ou meme me dire ou je pourrais trouver l'équivalent du code ci-dessus sa m'aiderai bcp ...
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#2
En fait, c'est le même fonctionnement que dans le client avec un switch...
Je n'arrive même pas à imaginer ce que tu ne comprends pas...
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#3
Captain Kheops a dit:
Le créateur (du moins la créatrice ;) qui est assez jolie au passage) de Stump est un réel génie
[...]
mais peut etre que celle de Mademoiselle Bouh2 est beaucoup plus optimisée je dois l'avouer
wut ? bouh2 une fille ? dafuq
 
Inscrit
23 Septembre 2010
Messages
30
Reactions
0
#4
Labo a dit:
En fait, c'est le même fonctionnement que dans le client avec un switch...
Je n'arrive même pas à imaginer ce que tu ne comprends pas...
C'est simple une fois que le packet est reçu , comment est-il dispatcher , l'équivalant du GameProcessor de Dofus Engine (seul les vétérans qui ont vu naître les emu 1.29 le savent sa)

oui seul les vrais le savent mais Bouh2 est belle et bien une fille tu n'as qu'a lui demandé elle te le diras (voir meme plus si affinité qui sait :cool: :lol: ) . Bref la n'est pas la question .
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#5
Il parcours juste une liste de handlers à la recherche de celui qui gère le message.
 
Inscrit
23 Septembre 2010
Messages
30
Reactions
0
#6
merci sorrow , je pense que je vais faire un parser parrallèle avec mon propre code ;)
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#8
Ca fait plaisir de voir enfin une fille dans notre monde très fermé de la programmation !
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#9
Luax semble être choqué :mrgreen: .
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#10
Après confirmation bouh2 est un homme, tu as du rencontrer une version falsifié.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#11
Miskine !
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#12
Lol :') .
 

Neo-Craft

Contributeur
Inscrit
6 Septembre 2011
Messages
11
Reactions
0
#13
D'après ma dernière lecture , il utilise des Attributes sur les class qui implémentent le message pour désigner l'id du packet .
Puis avec Singleton , tu crée une instance via Reflection aussi facile ...
 
Inscrit
23 Septembre 2010
Messages
30
Reactions
0
#14
Plutôt curieux elle le cache je m'en rapelle comme si c'était hier , elle l'a dit sur le forum dofus.britania.ws (je déterre les archives).
 

Kyu

Staff
Membre du personnel
Inscrit
4 Octobre 2009
Messages
327
Reactions
8
#15
Sur internet on n'est ni fille ni garçon.

Souvenez vous en.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#16
Captain Kheops a dit:
Plutôt curieux elle le cache je m'en rapelle comme si c'était hier , elle l'a dit sur le forum dofus.britania.ws (je déterre les archives).
Elle a une voix bien grave pour une femme.

EDIT: Petite confusion de ma part :p
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#17
Désolé de remonter ce vieux topic mais je me dois d'intervenir et briser un mythe car non je ne suis pas une fille, désolé messieurs !
 

Kyu

Staff
Membre du personnel
Inscrit
4 Octobre 2009
Messages
327
Reactions
8
#18
Mon cœur est brisé à tout jamais.
 
Inscrit
12 Juillet 2015
Messages
3
Reactions
2
#20
bouh2 a dit:
Désolé de remonter ce vieux topic mais je me dois d'intervenir et briser un mythe car non je ne suis pas une fille, désolé messieurs !
Le jour de noel, quel cadeau, et quel mythe brisé..

Sinon Stump utilise en effet la reflection pour ajouter un id de message (key) et une délégué de methode (qui correspond au handler) (Value) lors de l'initialisation de l'émulateur afin de pouvoir géré chaques packets a la main..

En résumé (tres tres gros résumé, un truc comme ça):

Code:
public static Dictionary<int,Delegate> Handlers = new Dictionarry<int,Delegate>();
public static void Initialize()
{
          foreach (var type in Assembly.GetType())
            {
                foreach (MethodInfo method in type.GetMethods())
                {
                    var attribute  = method.GetCustomAttribute(typeof(MONATTRIBUT)))
                    if (attribute != null)
                    {
                          Handlers.Add(attribute.MessageId,method.CreateDelegate());
                    }
                }
            }
}
Pour gérer un message, il deserialize le message afin d'obtenir l'id et appelle le delegué de l'handler correspondant a ce message
 
Haut Bas