J'essaie de faire dialoguer un serveur en purebasic avec un client qui n'est pas purebasic (dans mon cas le client est en AGK).
C'est un serveur pour du jeu (et donc, le "client" est l'application qui sert au joueur pour jouer (application réalisée avec AGK (pour android)).
voici le code de mon serveur (adapté de l'exemple purebasic :
Code : Tout sélectionner
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6832
memoiretampon = 2048
*Buffer = AllocateMemory(memoiretampon)
winw = 800
winh= 600
If OpenWindow(0,0,0,winw,winh,"server",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
EditorGadget(0,10,10,winw-20,winh-20)
; If CreateNetworkServer(0, Port,#PB_Network_UDP|#PB_Network_IPv4)
If CreateNetworkServer(0, Port)
txt$+"Server : Server created (Port "+Str(Port)+")."+Chr(13)
SetGadgetText(0, txt$)
Repeat
event = WaitWindowEvent(1)
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case #PB_NetworkEvent_Connect
txt$+"Server : A new client has connected !"+Chr(13)
SetGadgetText(0, txt$)
msg = SendNetworkString(ClientID, "salut") ; mon client ne reçoit rien.
Case #PB_NetworkEvent_Data
result = ReceiveNetworkData(ClientID, *Buffer, memoiretampon)
Debug Str(result)+" / "+Str(memoiretampon)
; SendNetworkData(ClientID
txt$+"Server : Client "+Str(ClientID)+" has send a packet !"+Chr(13)
txt$+"message (utf8) : "+PeekS(*Buffer, result, #PB_UTF8)+Chr(13)
netresult.s = PeekS(*Buffer, result, #PB_Ascii)
txt$+"message : "+netresult +Chr(13)
txt$+"message (#PB_Unicode) : "+PeekS(*Buffer, result, #PB_Unicode)+Chr(13)
txt$+"message (#PB_Ascii ) : "+PeekS(*Buffer, result, #PB_Ascii)+Chr(13)
SetGadgetText(0, txt$)
Case #PB_NetworkEvent_Disconnect
txt$ + "Server : Client "+Str(ClientID)+" has closed the connection..."+Chr(13)
SetGadgetText(0, txt$)
EndSelect
EndIf
If event=#PB_Event_CloseWindow
quit = 1
ElseIf event = #PB_Event_SizeWindow
ResizeGadget(0,#PB_Ignore, #PB_Ignore,WindowWidth(0)-20,WindowHeight(0)-20)
EndIf
Until Quit = 1
MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
CloseNetworkServer(0)
Else
MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
End
EndIf
Et je reçois bien les infos :
- un client s'est connecté
- un client a envoyé un packet
- le client 324839483993 s'est déconnecté.
Donc, ça fonctionne presque, car lorsque j'essaie de lire le message avec PeekS(), ça ne marche pas, je n'obtiens pas le message que j'ai envoyé mais juste 1 caractère genre "|" ou un carré.
Je n'arrive pas à comprendre ce que je dois mettre pour que ça marche.
Si vous avez une idée du problème, ça m'aiderait grandement.
ps : j'ai testé avec les sockets avec AGK ou avec l'exemple de la doc :
https://www.appgamekit.com/documentatio ... etwork.htm
Les sockets :
https://www.appgamekit.com/documentatio ... player.htm
Enfin, ça semble pouvoir fonctionner, mais pour le moment, je n'y arrive pas tout à fait ^^.
Dans les 2 cas, j'ai bien les messages de connection, reception d'un message client et deconnexion. Mais je n'arrive pas à avoir le contenu du message client recu.