Salut tous le monde je veux que vous me donniez votre avis aussi vos recommandations ou suggestions sur cette petite application de chat afin de l'optimiser et la rendre robuste et efficace. J'utilise le composant Indy version 9.00.10.
Voila le code source de client et serveur
Client
Serveur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls, XPMan, IdAntiFreezeBase, IdAntiFreeze; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Button1: TButton; Button2: TButton; IdTCPClient1: TIdTCPClient; Shape1: TShape; Memo1: TMemo; Timer1: TTimer; Label3: TLabel; Edit4: TEdit; Edit3: TEdit; Button3: TButton; XPManifest1: TXPManifest; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin IdTCPClient1.Port:= strtoint(edit2.text); IdTCPClient1.Host:=Edit1.Text; if (edit1.Text<>'') and (edit2.Text<>'') and (edit4.Text <>'') then begin IdTCPClient1.connect; Shape1.Brush.Color := clblue; button1.Enabled:=false; button2.Enabled:=true; button3.Enabled:=true; edit3.Enabled:=true; edit3.SetFocus; end; end; procedure TForm1.Button2Click(Sender: TObject); begin IdTCPClient1.Disconnect; Shape1.Brush.Color := clred; button1.Enabled:=true; button3.Enabled:=false; edit3.Enabled:=false; end; procedure TForm1.Button3Click(Sender: TObject); begin IdTCPClient1.WriteLn(edit4.text+': '+edit3.Text); memo1.Lines.Append('Moi: '+edit3.Text); edit3.Text:=''; edit3.SetFocus; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if idtcpclient1.connected= true then if IdTCPClient1.InputBuffer.Size=0 then begin IdTCPClient1.ReadFromStack(True,0,False); while IdTCPClient1.InputBuffer.Size > 0 do memo1.Lines.Append(IdTCPClient1.ReadLn+chr(13)); end; end; procedure TForm1.FormCreate(Sender: TObject); begin memo1.Clear; end; procedure TForm1.Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_return) then begin IdTCPClient1.WriteLn(edit4.text+': '+edit3.Text); memo1.Lines.Append('Moi: '+edit3.Text); edit3.Text:=''; edit3.SetFocus; end; end; end.
Merci à toute l'équipe de forum Developpez de Delphi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPServer, ExtCtrls, StdCtrls, XPMan; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit; Button1: TButton; Button2: TButton; Shape1: TShape; IdTCPServer1: TIdTCPServer; Memo1: TMemo; Button3: TButton; Edit3: TEdit; XPManifest1: TXPManifest; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure IdTCPServer1Execute(AThread: TIdPeerThread); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin IdTCPServer1.DefaultPort:= strtoint(edit1.Text); IdTCPServer1.Active := true; Shape1.Brush.Color := clblue; button2.Enabled:=true; button1.Enabled:=false; button3.Enabled:=true; edit3.Enabled:=true; edit3.SetFocus; end; procedure TForm1.Button2Click(Sender: TObject); begin IdTCPServer1.Active := false; Shape1.Brush.Color := clred; button2.Enabled:=false; button1.Enabled:=true; button3.Enabled:=false; edit3.Enabled:=false; end; procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); var text:string; begin text :=athread.Connection.readln(); memo1.Lines.add(text); end; procedure TForm1.Button3Click(Sender: TObject); var Count: Integer; List : TList; begin List := IdTCPServer1.Threads.LockList; try for Count := 0 to List.Count -1 do begin TIdPeerThread(List.Items[Count]).Connection.WriteLn(edit2.text+': '+edit3.Text+chr(13)); end; finally IdTCPServer1.threads.UnlockList; memo1.Lines.add('Moi: '+edit3.Text); edit3.Text:=''; edit3.SetFocus; end; end; procedure TForm1.FormCreate(Sender: TObject); begin memo1.Clear; end; procedure TForm1.Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Count: Integer; List : TList; begin if (Key=VK_return) then begin List := IdTCPServer1.Threads.LockList; try for Count := 0 to List.Count -1 do begin TIdPeerThread(List.Items[Count]).Connection.WriteLn(edit2.text+': '+edit3.Text+chr(13)); end; finally IdTCPServer1.threads.UnlockList; memo1.Lines.add('Moi: '+edit3.Text); edit3.Text:=''; edit3.SetFocus; end; end; end; end.
Partager