Bonjour,
Voilà, je souhaite concevoir une mini application ( serveur et client deux programmes distincts ), où chaque client pourrai bouger un personnage sur l'écran en 2D, et il verrait aussi les autres personnages des autres clients bouger.
Je l'ai commencé et ça marche, une fois sur deux ( erreur de segmentation, et j'en passe ).
Donc je cherche juste quelqu'un pouvant m'aider pour les bases d'un programme réseau ( juste l'algorithmie, manière de coder... la syntaxe je connais déjà ).
Pour la librairie, j'utilise SDL_net.
Bon voilà comment j'ai procédé :
Serveur :
le programme principale tourne en boucle, attendant la connexion de client.
Lorsqu'un client se connecte, on l'ajoute dans un vecteur de type Client.
La classe Client contient donc le socket, l'id du client, et un attribut Personnage ( coordonnée, sprite... ).
Le serveur possède deux threads.
- Un pour l'envoi des informations aux clients :
Il tourne en boucle, en parcourant le vecteur Client, et à chaque fois en leur envoyant tous les personnages de chaque client connecté.
SDLNet_TCP_Send( liste_clients[i].getSocket(), &( liste_clients[j].getPerso() ), sizeof( Personnage ) );
- Un autre thread pour la reception des données
Une boucle parcourant le vecteur Client pour récuperer le type Personnage de chaque socket des clients. Et mise à jour du personnage dans le tableau.
Coté serveur, ça va.
Maintenant coté client :
Le moteur du jeu, on voit notre bonhomme de notre jeu et tout bouger.
2 variables globales : Notre Perso, et un vecteur Perso pour les autres clients.
Et pareil que le serveur, deux threads :
Un où on emet sans cesse notre perso au serveur.
Un autre où on recoit et construit notre vecteur des Persos des autres clients.
J'utilise aussi des mutexs, comme par exemple, quand on parcoure la liste des Personnages pour les afficher, faire en sorte de bloquer le thread s'occupant de la reception pour pas en même temps écrire dans le vecteur en même temps qu'on le lit...
Voilà mais bon, je sais que c'est pas parfait, et je n'adopte pas la bonne manière de coder pour ce genre d'application, c'est pour ça que je demande l'aide ou autres pour pouvoir m'inspirer...
Partager