1 unit Unit1;
2
3 interface
4
5 uses
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls, IdCustomTransparentProxy, IdSocks, IdBaseComponent,
8 IdComponent, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
9 IdTCPConnection, IdTCPClient, IdSync;
10
11 type
12
13 TReadingThread = class(TThread)
14 protected
15 FConn: TIdTCPConnection;
16 procedure Execute; override;
17 public
18 constructor Create(AConn: TIdTCPConnection); reintroduce;
19 end;
20
21 TLog = class(TIdSync)
22 protected
23 FMsg: String;
24 procedure DoSynchronize; override;
25 public
26 constructor Create(const AMsg: String);
27 class procedure AddMsg(const AMsg: String);
28 end;
29
30
31 TForm1 = class(TForm)
32 Memo1: TMemo;
33 Button1: TButton;
34 IdIOHandlerStack1: TIdIOHandlerStack;
35 client: TIdTCPClient;
36 IdSocksInfo1: TIdSocksInfo;
37 procedure Button1Click(Sender: TObject);
38 procedure clientConnected(Sender: TObject);
39 procedure clientDisconnected(Sender: TObject);
40 procedure FormCreate(Sender: TObject);
41
42 private
43 { Private declarations }
44 public
45 { Public declarations }
46 end;
47
48 var
49 Form1: TForm1;
50 rt: TReadingThread = nil;
51
52 implementation
53
54 {$R *.dfm}
55
56 constructor [Link](AConn: TIdTCPConnection);
57 begin
58 [Link]('DEBUG: [Link]'); // Debug
59
60 FConn := AConn;
61 inherited Create(False);
62 end;
63
64 procedure [Link];
65 begin
66 [Link]('DEBUG: [Link]'); // Debug
67
68 while not Terminated and [Link] do
69 begin
70 [Link]('DEBUG: [Link] - [Link]'); // Debug
71
72 [Link]([Link]);
73 end;
74 end;
75
76 constructor [Link](const AMsg: String);
77 begin
78 [Link]('DEBUG: [Link]'); // Debug
79
80 FMsg := AMsg;
81 inherited Create;
82 end;
83
84 procedure [Link];
85 var
86 cmd : string;
87 begin
88 [Link]('DEBUG: [Link]'); // Debug
89
90 cmd := copy(FMsg, 1, 1);
91
92 if cmd='PING' then
93 begin
94 [Link]('PONG');
95 end
96
97 end;
98
99 class procedure [Link](const AMsg: String);
100 begin
101 [Link]('DEBUG: [Link]'); // Debug
102
103 with Create(AMsg) do try
104 Synchronize;
105 finally
106 Free;
107 end;
108 end;
109
110 procedure [Link](Sender: TObject);
111 begin
112 [Link];
113 end;
114
115 procedure TForm1.Button1Click(Sender: TObject);
116 var
117 Host : String;
118 Port : Integer;
119 begin
120
121 Host := '[Link]';
122 Port := StrToInt('1234');
123
124 [Link] := Host;
125 [Link] := Port;
126
127 with client do
128 begin
129 try
130 Connect;
131 except
132 on E: Exception do
133 [Link]('Error: ' + [Link]);
134 end;
135 end;
136
137 end;
138
139 procedure [Link](Sender: TObject);
140 begin
141 [Link]('DEBUG: [Link]'); // Debug
142
143 rt := [Link](client);
144 end;
145
146 procedure [Link](Sender: TObject);
147 begin
148 [Link]('DEBUG: [Link]'); // Debug
149
150 if rt <> nil then
151 begin
152 [Link];
153 [Link];
154 FreeAndNil(rt);
155 end;
156 end;
157
158 end.