Bonjour à tous ! Des petites nouvelles, suite à une longue réflexion et à l'aide de quelqu'un du forum qui se reconnaîtra s'il passe par là (merci encore) il y a un petit revirement de situation :
L'émulateur sera désormais divisé en micro-services.
Ça veut dire quoi d mikro servic ?
En gros chaque micro-service représentera une partie du jeu (Character, Item, Environment, Monster, NPC, etc) qui tourneront chacun séparément.
Il y aura donc 3 parties majeures :
- Login server (C# .NET Core 3.0), qui s'occupera de récupérer les sockets arrivants, traiter les messages (uniquement la partie header) et redirigera une requête HTTP à la partie majeure suivante - le middleman
- Le middleman (Rust), qui s'occupera de récupérer et dispatcher les requêtes HTTP qui seront sous cette forme :
POST /serialize/{gameServerId?}/{messageId} --data {JSONMessageContent} -> dispatcher vers login/game server
POST /deserialize/{messageId} --data {binaryMessageContent} -> dispatcher vers services
Il prendra en argument de lancement un protocole au format JSON qui correspond au protocole de Dofus (un outil et une doc seront fournie pour expliquer comment le générer si vous souhaitez changer la version compatible du client)
- Le(s) game server (C# .NET Core 3.0), qui prendra en charge les game clients
Ensuite il y aura les micro services, qui recevront des requêtes de ce genre :
POST /{gameServerId?}/{messageId} --data {JSONMessageContent}
Les micro services auront aussi le protocole JSON du client, ainsi qu'un autre qui sera le métier.
Les messages métiers seront définis par chacun des micro-services, accessibles séparément d'une éventuelle compilation (en fonction du langage utilisé pour le micro-service)
Il y aura des filtres possibles à spécifier dans la configuration de celui-ci si vous voulez faire vos propre override. Par défaut je fournirait un boilerplate en TypeScript, et un autre en C#.
Ça change quoi du coup ?
Beaucoup de choses. Par exemple si vous ajoutez une fonctionnalité, vous n'avez pas a redémarrer votre serveur au complet, simplement le(s) service(s) impactés.
C'est beaucoup plus flexible également, vous pouvez démarrer plusieurs fois le même service, et grâce à un système de load-balancing le serveur choisira automatiquement le moins occupé de tous pour effectuer les actions.
Tout ça est en développement depuis récemment seulement, ça ne sera pas pour tout de suite mais ça change beaucoup de choses à l'aventure car, incluant ça, je peux vous partager l'émulateur et quelques micro-services au compte-goutte sans pour autant vous donner tout.
Je déclare donc qu'une fois le premier micro-service terminé (Authentication) ainsi que les parties majeures, je releaserait l'émulateur en version 1, et vous aurez la possibilité d'ajouter les micro-services que vous voulez.
Le code déjà fait actuellement sera bien évidement réutilisé pour me faire gagner du temps.
Je fournirais assez de documentation pour que les courageux d'entre vous s'attaquent à faire vos propre services, et créer l'émulateur qui VOUS CONVIENT.
Voilà c'est tout, a+ les gens !