Network client server code et questions ;)
Publié : dim. 13/avr./2008 13:39
Bonjour
Voilà j'ai un mini chat qui fonctionne mais je suis un peu perdus sur divers points.
Un thread et une procedure, quelle est la difference ?
Ensuite comment créer une boucle pour chaque client sur le server car après il faut quand même récupérer les event
Voilà le code exemple retravaillé un petit peu :
Chat 0.0001 ^^
Dîtes moi tout ce qui ne va pas, les amelioration à apporter ou autre
merci beaucoup d'avance
------------------------------------------------
Voilà j'ai un mini chat qui fonctionne mais je suis un peu perdus sur divers points.
Un thread et une procedure, quelle est la difference ?
Ensuite comment créer une boucle pour chaque client sur le server car après il faut quand même récupérer les event

Voilà le code exemple retravaillé un petit peu :
Chat 0.0001 ^^
Dîtes moi tout ce qui ne va pas, les amelioration à apporter ou autre

merci beaucoup d'avance
Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; Network (Client)
;
; Le psychopathe
;
; ------------------------------------------------------------
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Listview_0
#String_0
#Button_0
EndEnumeration
Global envois
envois = 0
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 481, 250, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ListViewGadget(#Listview_0, 10, 10, 460, 200)
StringGadget(#String_0, 10, 220, 300, 20, "")
ButtonGadget(#Button_0, 330, 220, 140, 20, "Envoyer")
EndIf
EndIf
EndProcedure
Procedure ReceiveData(Connection)
BufferSize = 1024
*Buffer = AllocateMemory(BufferSize)
Result = ReceiveNetworkData(Connection, *Buffer, BufferSize)
If PeekS(*buffer) = "reçu"
envois = envois - 1
If envois > 0
AddGadgetItem(#Listview_0, -1,"Information : Le message n'a pas pu être envoyé")
envois = 0
EndIf
Else
AddGadgetItem(#Listview_0, -1,PeekS(*Buffer))
EndIf
FreeMemory(*Buffer)
EndProcedure
open_window_0()
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6831
ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
SendNetworkString(ConnectionID, "Newclient")
envois = envois +1
If ConnectionID
Repeat
SEvent = NetworkClientEvent(ConnectionID)
If SEvent
Select SEvent
Case #PB_NetworkEvent_Data
ReceiveData(ConnectionID)
EndSelect
EndIf
EventID = WindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_0
SendNetworkString(ConnectionID, GetGadgetText(#String_0))
AddGadgetItem(#Listview_0, -1, "Moi : " + GetGadgetText(#String_0))
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
CloseNetworkConnection(ConnectionID)
Else
MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
End
Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; Network (server)
;
; Le psychopathe
;
; ------------------------------------------------------------
;
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6831
Global ID, ClientID, NewList client.l()
Procedure ReceiveData(ClientID)
BufferSize = 1024
*Buffer = AllocateMemory(BufferSize)
Result = ReceiveNetworkData(ClientID, *Buffer, BufferSize)
SendNetworkString(ClientID,"reçu")
If PeekS(*buffer) = "Newclient"
AddElement(client())
client() = ClientID
EndIf
ResetList(client())
While NextElement(client())
Debug ClientID
Debug client()
If ClientID <> client()
SendNetworkString(client(),"client " + Str(ClientID) + " : "+ PeekS(*buffer))
EndIf
Wend
FreeMemory(*Buffer)
EndProcedure
If CreateNetworkServer(0, Port)
MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 1
MessageRequester("PureBasic - Server", "A new client has connected !", 0)
Case 2
ReceiveData(ClientID)
Case 3
MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
Case 4
MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
EndSelect
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