Je suis en train de concevoir un serveur de jeu avec des capacités de script. La conception générale va comme ceci:Conception client/serveur pilotée par événement avec C++
Client connects to Server,
Server initializes Client,
Server sends Client to EventManager (separate thread, uses libevent),
EventManager receives receive Event from Client socket,
Client manages what it received via callbacks.
Maintenant, la dernière partie est ce qui est le plus difficile pour moi maintenant.
Actuellement mon design me permet d'une classe qui hérite Client
pour créer callbacks à des événements spécifiques reçus. Ces rappels sont gérés dans une liste et le tampon reçu passe par un processus d'analyse chaque fois qu'un élément est reçu. Si le tampon est valide, le rappel est appelé là où il agit sur ce qui est dans le tampon. Une chose à noter est que les rappels peuvent descendre au moteur de script, à quel point rien n'est sûr de ce qui peut arriver.
Chaque fois qu'un rappel se termine, le courant tampon de réception doit être remis à zéro, etc. ont actuellement aucune Callbacks capacité de retourner une valeur, car comme indiqué précédemment, tout peut arriver.
Ce qui se passe est que lorsque quelque part dans quelque chose de rappel dit this-> disconnect(), je veux déconnecter immédiatement le Client
, retirez-le de la EventManager
, et enfin retirer de la Server
, où il devrait également obtenir enfin mémoire destruite et libre. Cependant, j'ai encore du Code en cours d'exécution après la fin du rappel dans le Client, donc je ne peux pas libérer de mémoire.
Que devrais-je changer dans la conception? Dois-je avoir un événement chronométré dans le Server
qui vérifie quels Client
s sont libres de détruire? Cela créerait-il des frais supplémentaires dont je n'ai pas besoin? Serait-il toujours correct après la fin du rappel pour exécuter du code minimal sur la pile (return -1;
) ou non?
Je n'ai aucune idée de ce qu'il faut faire, mais je suis ouvert pour des révisions de conception complètes.
Merci d'avance.
Cela nécessitera le moins de changements du système actuel, donc j'opte pour cela. Je vais toujours considérer les suggestions des autres. Merci! – Chaosteil