Voila chef!
Client :
Code : Tout sélectionner
;-Init Variables
Enumeration
#clientinfo
#client
#info
#msg
#send
#users
#enter
#txt1
#txt2
#txt3
#clientname
#ip
#port
#ok
#kill
#textepseudo
#ComboBox_0
#pseudo
EndEnumeration
text.s
cr.s
clientname.s
name.s
IP.s
check .s
check=Chr(159)
maxbuffer.l=1000
*Buffer=AllocateMemory(maxbuffer)
adresseip$ = InputRequester("option connexion", "veuillez entree l'adresse ip du serveur",adresseip$)
pseudo$ = InputRequester("pseudo", "choisissez un pseudo",pseudo$)
space$ = Space(2)
;-Init Network
InitNetwork()
ConnectionID = OpenNetworkConnection(adresseip$, 6588)
If ConnectionID = 0
MessageRequester("erreur", "purechat reseau n'a pas pu se connecter au serveur",#MB_ICONERROR)
End
EndIf
hWnd=OpenWindow(#client,0,0,800,620,"purechat reseau",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
If hWnd=0 Or CreateGadgetList(hWnd)=0:End:EndIf
EditorGadget(#info,10,10,600,515)
EditorGadget(#pseudo,620,10,172,515)
DisableGadget(#pseudo, 1)
StringGadget(#msg,10,560,665,40,"")
TextGadget(#textepseudo, 11, 603,774,15,"connecter en tant que : "+ pseudo$)
ButtonGadget(#send,690,565,100,30,"envoyer")
AddKeyboardShortcut(#client,#PB_Shortcut_Return,#enter)
SetActiveGadget(#msg)
Repeat
CEvent.l=NetworkClientEvent(ConnectionID)
EventID=WindowEvent()
If CEvent Or EventID
If EventID=#PB_Event_CloseWindow
quit=1
EndIf
If EventID=#PB_Event_Menu
Select EventMenu()
Case #enter
sendmessage=1
EndSelect
EndIf
If EventID=#PB_Event_Gadget
Select EventGadget()
Case #send
sendmessage=1
EndSelect
EndIf
Select CEvent
Case 2
length=ReceiveNetworkData(ConnectionID,*Buffer,maxbuffer)
text=PeekS(*Buffer,length)
pos=FindString(text,":",1)
AddGadgetItem(#info,-1,text)
SendMessage_(GadgetID(#info),#EM_LINESCROLL,0,2)
FlashWindow_(hWnd,1)
Case 3
ReceiveNetworkFile(ConnectionID,"users."+Str(port))
ClearGadgetItemList(#users)
If ReadFile(0,"users."+Str(port))
While Eof(0)=0
name=ReadString(0)
AddGadgetItem(#users,-1,pseudo$)
Wend
CloseFile(0)
EndIf
EndSelect
If sendmessage=1
sendmessage=0
oldtime=ElapsedMilliseconds()
text=Chr(139)+space$+pseudo$+space$+"dit"+space$+Chr(155)+space$+(texte$)+GetGadgetText(#msg)
PokeS(*Buffer,text,Len(text))
SendNetworkData(ConnectionID,*Buffer,Len(text))
SetGadgetText(#msg,"")
SetActiveGadget(#msg)
EndIf
Else
Delay(10)
EndIf
Until quit
CloseNetworkConnection(ConnectionID)
End
; IDE Options = PureBasic v3.94 (Windows - x86)
; CursorPosition = 42
; FirstLine = 17
; Folding = -
; UseIcon = ..\..\..\Documents and Settings\D1K\Mes documents\Axialis Librarian\Icons\purechat reseau.ico
; Executable = ..\..\..\Documents and Settings\D1K\Bureau\purechat reseau.exe
Server :
Code : Tout sélectionner
;-Init Variables
Enumeration
#server
#info
#msg
#send
#users
#enter
#clientinfo
#txt1
#port
#ok
#textepseudo
#ComboBox_0
#textepseudo_1
#pseudo
EndEnumeration
pseudo$ = InputRequester("pseudo", "choisissez un pseudo",pseudo$)
space$ = Space(2)
clientname.s
text.s
cr.s
check.s
check=Chr(159)
maxbuffer.l=1000
*Buffer=AllocateMemory(maxbuffer)
Structure userinfo
id.l
time.l
name.s
EndStructure
NewList user.userinfo()
;-Init Network
If InitNetwork() = 0
MessageRequester("Erreur", "le serveur n'a pas pu etre cree", #MB_ICONERROR)
End
EndIf
If CreateNetworkServer(0, 6588)
If OpenWindow(#server,1,0,800,620,"purechat reseau",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#server))
EditorGadget(#info,10,10,600,515)
EditorGadget(#pseudo,620,10,172,515)
DisableGadget(#pseudo, 1)
StringGadget(#msg,10,560,665,40,"")
TextGadget(#textepseudo, 11, 603,774,15,"connecter en tant que : "+ pseudo$)
ButtonGadget(#send,690,565,100,30,"envoyer")
AddKeyboardShortcut(#server,#PB_Shortcut_Return,#enter)
SetActiveGadget(#msg)
EndIf
;-Main Program
Repeat
SEvent.l=NetworkServerEvent()
EventID=WindowEvent()
If SEvent Or EventID
If EventID=#PB_Event_Menu
Select EventMenu()
Case #pseudo
AddGadgetItem(#pseudo,-1,pseudo$)
Case #enter
sendmessage=1
EndSelect
EndIf
If EventID=#PB_Event_Gadget
Select EventGadget()
Case #send
sendmessage=1
;SendNetworkString(ClientID, pseudo$)
EndSelect
EndIf
If SEvent
ClientID=EventClient()
ResetList(user())
While NextElement(user())
If ClientID=user()\id
LastElement(user())
EndIf
Wend
Select SEvent
Case 1
AddElement(user())
user()\id=ClientID
user()\time=ElapsedMilliseconds()
Case 2
length=ReceiveNetworkData(ClientID,*Buffer,maxbuffer)
text.s=PeekS(*Buffer,length)
If Left(text,1)=check
user()\name=Mid(text,2,Len(text))
clientname=user()\name
Else
text=clientname+""+text
EndIf
;SetRichEditText(#info,-1,-1,text+cr)
AddGadgetItem(#info,-1,text)
SendMessage_(GadgetID(#info),#EM_LINESCROLL,0,2)
PokeS(*Buffer,text,Len(text))
ResetList(user())
While NextElement(user())
If ElapsedMilliseconds()-user()\time>600000
CloseNetworkConnection(user()\id)
DeleteElement(user())
fix=1
Else
If user()\id=ClientID
user()\time=ElapsedMilliseconds()
EndIf
SendNetworkData(user()\id,*Buffer,Len(text))
EndIf
Wend
Case 4
;SetRichEditText(#info,-1,-1,text+cr)
AddGadgetItem(#info,-1,text)
SendMessage_(GadgetID(#info),#EM_LINESCROLL,0,2)
PokeS(*Buffer,text,Len(text))
ResetList(user())
While NextElement(user())
SendNetworkData(user()\id,*Buffer,Len(text))
Wend
ResetList(user())
While NextElement(user())
If user()\id=ClientID
DeleteElement(user())
LastElement(user())
EndIf
Wend
CloseNetworkConnection(ClientID)
EndSelect
EndIf
If sendmessage=1
sendmessage=0
text=Chr(139)+space$+pseudo$+space$+"dit"+space$+Chr(155)+space$+(texte$)+GetGadgetText(#msg)
; SetRichEditText(#info,-1,-1,text+cr)
AddGadgetItem(#info,-1,text)
SendMessage_(GadgetID(#info),#EM_LINESCROLL,0,2)
PokeS(*Buffer,text,Len(text))
ResetList(user())
While NextElement(user())
SendNetworkData(user()\id,*Buffer,Len(text))
Wend
SetGadgetText(#msg,"")
SetActiveGadget(#msg)
EndIf
Else
Delay(10)
EndIf
Until EventID=#PB_Event_CloseWindow
CloseNetworkServer(0)
EndIf
EndIf
End
; IDE Options = PureBasic 4.10 Beta 1 (Windows - x86)
; CursorPosition = 21
; FirstLine = 21
; Folding = -
; Executable = ..\..\..\Documents and Settings\D1K\Bureau\purechat reseau s.exe