Page 1 sur 1

Server/client

Publié : lun. 30/mai/2011 13:23
par blendman
salut

En ce moment, je regarde un peu le principe d'un server/client en pb, histoire de comprendre comment tout cela fonctionne :). Ça a l'air plutôt simple, pour les bases.
J'ai fait un petit tchat tout simple.
Mais je n'ai pas réussi à envoyer un message à plusieurs clients en même temps.

Savez-vous ce que je devrais faire pour que tous les clients reçoivent le message du joueur qui a écrit ?

En gros, j'ai repris l'exemple fourni dans la doc de pb, et j'ai ajouté un petit tchat (avec keyboardinkey()).

Et au niveau du server, j'ai changé ça :

Code : Tout sélectionner

Case #PB_NetworkEvent_Data
   If ReceiveNetworkData(ClientID, *Buffer, 1000)         
       ;ForEach playerlist()  
         ;If SendNetworkData(playerlist()\id, *Buffer, 1000) ; <<<<<<<<<<<<< ici, j'ai une erreur ima (invalid memory acces)
          If SendNetworkData(ClientID, *Buffer, 1000) ;<<<<<<<<<<<<<<<<<<<< ici, ça marche mais chaque jouer ne recoit que son message
          EndIf
       ;Next
       FreeMemory(*buffer)
       *buffer = AllocateMemory(1000)            
    EndIf  


J'ai essayé en créant une structure toute simple pour gérer les clients dans une list et utiliser cette liste dans cet "case", mais ça ne marche pas (voir mon code en commenté).

La structure que j'ai essayé et la liste :

Code : Tout sélectionner

Structure client
  id.w
  nom$
EndStructure

Global NewList playerlist.client()
Une idée de ce que je devrais faire pour que tous les joueurs reçoivent le message posté par un des joueurs ?

Merci.

Re: Server/client

Publié : lun. 30/mai/2011 13:30
par Fred
Le 'foreach' avait l'air bien, tu mets quoi dans ton champ \id ?

Re: Server/client

Publié : lun. 30/mai/2011 13:40
par djes

Re: Server/client

Publié : lun. 30/mai/2011 13:47
par blendman
Fred a écrit :Le 'foreach' avait l'air bien, tu mets quoi dans ton champ \id ?
je viens de comprendre, c'est mon id.w qui pose problème (trop court)), en faisant id.l ça marche.

je mettais l'eventclient() (ou clientID de l'exemple).

avec cette structure :

Code : Tout sélectionner

Structure client
  id.l
  nom$
EndStructure
ça fonctionne nickel :).

Merci ;).

Tiens, une question, à propos de jeu en ligne et de server de jeu, créé en purebasic.
Combien de joueurs connectés en même penses-tu que l'on puisse avoir avec notre jeu (3arks) ?
En considérant que le serveur 'physique sera un bon serveur, plutôt performant) et que le server (éxécutable conçu en pure) devrait être plutôt bien programmé (c'est Strombretrooper qui s'en charge, il est beaucoup plus balèze que moi :)).
Peut-on envisager entre 2000 et 3000 joueurs connectés en même temps, ou vaut-il mieux que l'on parte sur 500/1000 joueurs connectés en même temps, et jouant en même temps (jeu de type RPG en ligne, multi-joueurs, en 2D) ? :D

Re: Server/client

Publié : lun. 30/mai/2011 14:42
par djes
Evite les .l au profit des .i, sauf pour des structures définies par d'autres qui réclament explicitement des .l

Re: Server/client

Publié : lun. 30/mai/2011 15:00
par blendman
djes a écrit :Evite les .l au profit des .i, sauf pour des structures définies par d'autres qui réclament explicitement des .l
ah ? pourtant, avec les systèmes 64, les .i prennent 2 fois plus d'octets que les .l.
Pourquoi plutôt des .i ?

Re: Server/client

Publié : lun. 30/mai/2011 15:34
par djes
Plusieurs raisons :
Le .i prend le format 'natif' du processeur en cours. La taille n'a pas autant d'importance que la rapidité de traitement.
Cela permet aussi d'avoir un code plus portable, en réduisant le risque d'erreurs de compilation quand tu changeras de machine.
Je pourrais encore développer mais ce serait un peu long (problèmes avec les nombres signés, alignement des données, etc.)

Re: Server/client

Publié : lun. 30/mai/2011 15:36
par Fred
mais les ID sont des pointeurs -> si tu compiles en 64 bit, ca marchera plus avec les .l . Sinon j'ai eu des echos d'une boite qui gere un server de jeu massivement multi joueur (client web) et ca marche sans probableme. 1000 me parait pas tres gros, mais je ne peux pas vraiment te dire, ca va dependre de beaucoup de parametres

Re: Server/client

Publié : lun. 30/mai/2011 16:49
par G-Rom
1000 ? faut pas rêver , comment veut tu synchronisé 1000 joueurs à la seconde près avec un seul serveur ?
les serveurs de mmo sont bien plus complexe , il doivent certainement utilisé des grappes de serveurs qui gère au max 256 joueurs chacun.
enfin , si tu arrives à faire tourner plus de mille joueurs dans un seul serveur , fait breveté ton code :D , je rigole , tiens nous au courant , je suis curieux de savoir.

Re: Server/client

Publié : lun. 30/mai/2011 17:24
par blendman
G-Rom a écrit :1000 ? faut pas rêver , comment veut tu synchronisé 1000 joueurs à la seconde près avec un seul serveur ?
les serveurs de mmo sont bien plus complexe , il doivent certainement utilisé des grappes de serveurs qui gère au max 256 joueurs chacun.
enfin , si tu arrives à faire tourner plus de mille joueurs dans un seul serveur , fait breveté ton code :D , je rigole , tiens nous au courant , je suis curieux de savoir.
c'est pas moi qui vais le faire, heureusement :D, si c'était moi, ce serait pas plus de 50 joueurs synchro ;)