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
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.
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
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.
Merci à toute l'équipe de forum Developpez de Delphi.