Page 1 sur 1

Question réseau pour multijoueurs

Publié : sam. 15/nov./2014 13:47
par Fig
Bonjour à tous.

Je suis confronté à la programmation réseau pour du multijoueur (8 max) via internet.

Je souhaiterai savoir comment vous vous organiseriez pour gérer un début de partie, d'un point de vue réseau...

Je n'ai des connaissances que très général sur le truc, j'ai une idée de comment faire mais comme je sais qu'il y a ici des experts dans différents domaines, je pense que ça ira plus vite en demandant.

Le truc qui bute pour moi c'est notamment la recherche des différents joueurs en début de partie.

En début de partie on peut décider de rejoindre une partie existante ou de créer une partie soit même
Autant que possible je souhaite éviter d'avoir besoin d'une armée de serveur. Le minum sera le mieux et si je peux m'en passer ça serait le top.
Mais je ne vois pas comment gérer la liste des joueurs en ligne sans un serveur, dont l'adresse serait connu, et qui les références.

Une idée ? (je ne souhaite pas de code évidemment, juste un algo/une explication du protocole de communication que vous utiliseriez)

Re: Question réseau pour multijoueurs

Publié : sam. 15/nov./2014 14:38
par G-Rom
j'ai codé une lib pour cela, cherche tornado sur le forum.

@++

Re: Question réseau pour multijoueurs

Publié : sam. 15/nov./2014 15:03
par Fig
Je ne savais pas que ça avait déjà été fait.
Je parcours actuellement ton wiki, merci pour le partage de ton travail.

Re: Question réseau pour multijoueurs

Publié : sam. 15/nov./2014 15:42
par Fig
Si je comprends bien il s'agit d'un réseau en étoile autour du serveur...

J'ai quelques questions toutefois. la première:

Admettons que je souhaite envoyer un paquet du client A au client B.

Dans l'instruction clientAddPacket(*packet, *client) qui envoie le paquet au serveur, *client est le client qui envoie ou le client destination ?
Si c'est le client qui envoie, il faut que mon paquet encapsule dans le paquet le client destination, pour que le serveur puisse renvoyer le message au client destination (?)

Re: Question réseau pour multijoueurs

Publié : sam. 15/nov./2014 15:59
par G-Rom
Extrait du wiki :
Contrairement au serveur , les clients ne peuvent pas communiquer entre eux directement, tout passe par l'autorité, le serveur.
Tu envois donc ton paquet ou serveur , qui lui renverra au client que tu aura choisi ( via ton protocole de communication ) , tu tag un paquet avec des valeurs spéciale,
ex :

Code : Tout sélectionner

Structure message
  destination.l
  info.l
EndStructure


*packet = createPacket()

MonMessage.message
MonMessage\destination = 1 ; joueur 1
MonMessage\info = 255      ; ce que tu veut...

pushPacket(*packet, @MonMessage, #TYPE_STRUCT, SizeOf(MonMessage)) 

Re: Question réseau pour multijoueurs

Publié : sam. 15/nov./2014 16:26
par Fig
OK, ça c'est clair.

Ca me semble pas mal du tout.
Je vais faire quelques essais et voir ce que ça donne...
Je dois gérer une "pulsation" qui donne le rythme de jeu entre tous les joueurs et synchroniser tout ça avec les lags... On va rigoler, je sens ^^.

Re: Question réseau pour multijoueurs

Publié : sam. 15/nov./2014 18:12
par G-Rom
Je te conseil cette littérature sur le multijoueur : https://developer.valvesoftware.com/wik ... anguage=fr

Re: Question réseau pour multijoueurs

Publié : sam. 22/nov./2014 22:15
par Fig
Il semble que tu te serve du protocole UDP.
Gère tu la perte de paquet et les doublons ?

tu indiques qu'udp peut transmettre un maximum de 2048octets mais que certains sont utilisés donc qu'on ne peut pas se servir de l'intégralité des 2048octets.
Peux tu donner une idée du nombre d'octets libre ?

Re: Question réseau pour multijoueurs

Publié : dim. 23/nov./2014 12:44
par G-Rom
tu as la fonction getPacketSize(*p.sPacket) qui te donne la taille du paquet incluant les données internes.

Re: Question réseau pour multijoueurs

Publié : mar. 25/nov./2014 16:47
par Fig
On ne va pas se mentir, la grosse galère pour les tests c'est de faire ça sur plusieurs pc... Hyper HC c'est bien joli mais pfff installer windows... pffff