

Code : Tout sélectionner
Procedure acceuil_client(lecture)
If CreateNetworkServer(0,14804,#PB_Network_TCP)
Repeat
eve=NetworkServerEvent()
While eve=0
Delay(1)
eve=NetworkServerEvent()
Wend
Select eve
Case 1;nouveau client connecté
joueur_nombre=joueur_nombre+1
value=cherche_sock(0)
Joueur(value)\compte_sock=EventClient()
GetHttp("http://kraessor.free.fr/GAME/gestion_connecte.php?operation=true");ajoute un connecté sur le site web
Case 2;nouvelle envoie de données
LockMutex(traite)
*s=AllocateMemory(1000)
ReceiveNetworkData(EventClient(),*s+4,1000)
Delay(10)
joueuralpha=EventClient()
CreateThread(@traitement(), *s)
Case 3;nouvelle envoie de fichier sa peut servir pour la suite ^^
Case 4;client qui se déconnecte
joueur_nombre=joueur_nombre-1
value=cherche_sock(EventClient())
Joueur(value)\compte_sock=0
EndSelect
Until quitter=1
CloseNetworkServer(0)
EndIf
EndProcedure
Code : Tout sélectionner
Procedure traitement(*s)
*my = AllocateMemory(2000)
CopyMemory(*s+6,*my,2000)
FreeMemory(*s)
JoueurNET=joueuralpha
UnlockMutex(traite)
ID = PeekB(*my)
Sock=cherche_sock(JoueurNET)
Debug "donné recus ; "+Str(ID)
*free=*my
*my+1
Select ID
Case 1 ;un joueur quitte le serveur !
sock=cherche_sock(JoueurNET)
monde$=Joueur(sock)\position_map
pseudo.s=Joueur(sock)\compte_pseudo
yy=Joueur(sock)\position_y
xx=Joueur(sock)\position_x
GetHttp("http://kraessor.free.fr/GAME/set_deplacement.php?monde="+monde$+"&x="+Str(xx)+"&y="+Str(yy)+"&name="+pseudo+"&hauteur=0")
Case 3 ;connection au serveur d'un nouveau joueur
nomperso$=PeekS(*my);pseudo
Joueur(Sock)\compte_pseudo=nomperso$
*my=*my+MemoryStringLength(*my)+1
PeekS(*my);version du client-inutile pour le moment peut etre supprimer ?
site$="http://kraessor.free.fr/GAME/"
;chargement des principals informations concernant le compte du joueur
Joueur(Sock)\compte_pseudo=nomperso$
Joueur(Sock)\compte_id=Val(GetHttp(site$+"info.php?alpha=id&pseudo="+nomperso$))
joueurid=Joueur(Sock)\compte_id
Joueur(Sock)\position_map=GetHttp(site$+"info.php?alpha=niveau&id="+Str(joueurid))
Joueur(Sock)\position_x=Val(GetHttp(site$+"info.php?alpha=x&id="+Str(joueurid)))
Joueur(Sock)\position_y=Val(GetHttp(site$+"info.php?alpha=y&id="+Str(joueurid)))
compte_silver$=GetHttp(site$+"info_compte.php?alpha=silver&id="+Str(joueurid))
;compte silver système
If compte_silver$<>"" And compte_silver$<>"non"
Joueur(Sock)\compte_niveau="oui"
Else
Joueur(Sock)\compte_niveau="non"
EndIf
;envoie d'un message pour configuré le joueur au départ
*buffer=AllocateMemory(2000)
*pointeur=*buffer
*pointeur+1
PokeB(*pointeur,5)
*pointeur+1
PokeB(*pointeur,5)
*pointeur+1
info$="position_set("+Str(Joueur(Sock)\position_x)+","
info$+Str(Joueur(Sock)\position_y)+",'"+Joueur(Sock)\position_map+"');"
info$+"info_set('"+Str(Joueur(Sock)\compte_id)+"','"+Joueur(Sock)\compte_niveau+"');"
PokeS(*pointeur,info$)
SendNetworkData(JoueurNET, *buffer, 2000)
alpha+1
FreeMemory(*buffer)
*buffer=AllocateMemory(2000)
;envoie d'un message pour popup de départ
*pointeur=*buffer
PokeB(*pointeur,8)
*pointeur+1
PokeB(*pointeur,1)
*pointeur+1
draw$="draw_text(x+5,y+20,'Décembre arrive à Blendra##Et oui, lhiver est arrivé,#La météo est donc passé au blanc#La temperature a chutée');";
PokeS(*pointeur,"Nouveauté")
*pointeur+MemoryStringLength(*pointeur)
PokeS(*pointeur,draw$)
*pointeur+MemoryStringLength(*pointeur)
PokeS(*pointeur,"")
*pointeur+MemoryStringLength(*pointeur)
SendNetworkData(JoueurNET,*buffer,MemorySize(*buffer))
Case 4 ;un joueur parle dans le chat
message$=PeekS(*my)
Debug "message reçus"
sock=cherche_sock(JoueurNET)
Debug "ID ; "+Str(sock)
pseudo.s=Joueur(sock)\compte_pseudo
map.s=Joueur(sock)\position_map
alpha=0
*buffer=AllocateMemory(2000)
*pointeur=*buffer
*pointeur+1
PokeB(*pointeur,7)
*pointeur+1
PokeB(*pointeur,7)
*pointeur+1
PokeS(*pointeur,pseudo+" : "+message$)
Debug pseudo+" : "+message$
Repeat
If Joueur(alpha)\position_map=map And Joueur(alpha)\compte_sock<>0
SendNetworkData(Joueur(alpha)\compte_sock, *buffer, 2000)
Debug alpha
EndIf
alpha+1
Until alpha=5000
FreeMemory(*buffer)
EndSelect
EndProcedure
Code : Tout sélectionner
#buffer_length = 1000
total_lus.l = 0
Repeat
octets_lus.l = ReceiveNetworkData(EventClient(), *s, #buffer_length)
total_lus + octets_lus
*s + octets_lus
Until octets_lus = #buffer_length
; Replace le pointeur au début de la zone mémoire
*s - total_lus