Suite à tous les problèmes avec la lib network, je propose une première ébauche d'un chat.
Je souhaiterai que les plus avancés corrigent mes erreurs et me donnent des ficelles.
J'ai un bug quand un client se déconnecte et se reconnecte.
Sinon c'est normal que cela soit des request dans la boucle, je sais ça bloque mais c'est juste pour moi ^^
Allez assez parler que le code commence mdr
Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; Le psychopatathe
;
; chat v0.00000000001
; Serveur
; ------------------------------------------------------------
;
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")
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 ! " +Str(ClientID), 0)
AddElement(client())
client() = ClientID
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
Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; Le psychopatathe
;
; chat v0.00000000001
; Client
; ------------------------------------------------------------
;
Enumeration
#Window_0
EndEnumeration
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("128.89.35.9", Port)
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))
envois = envois +1
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
CloseNetworkConnection(ConnectionID)
Else
MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
End