OSDN Git Service

Fix proxy bug
[winbottle/winbottle.git] / bottleclient / HttpThread.pas
1 unit HttpThread;
2
3 interface
4
5 uses
6   Classes, IdHttp, IdException, SysUtils, Dialogs;
7
8 type
9   THTTPDownloadThread = class(TThread)
10   private
11     { Private \90é\8c¾ }
12     FHost: String;
13     FURL: String;
14     FPost: String;
15     FRecvString: String;
16     FProxyServer: String;
17     FProxyPort: integer;
18     FOnSuccess: TNotifyEvent;
19     FOnConnectionFailed: TNotifyEvent;
20     FLastErrorMessage: String;
21     procedure SetProxyPort(const Value: integer);
22     procedure SetProxyServer(const Value: String);
23     procedure SetOnConnectionFailed(const Value: TNotifyEvent);
24     procedure SetOnSuccess(const Value: TNotifyEvent);
25   protected
26     procedure Execute; override;
27     procedure DoSuccess;
28     procedure DoConnectionFailed;
29   public
30     constructor Create(const Host, URL, Post: String); reintroduce;
31     property RecvString: String read FRecvString;
32     property ProxyServer: String read FProxyServer write SetProxyServer;
33     property ProxyPort: integer read FProxyPort write SetProxyPort;
34     property OnConnectionFailed: TNotifyEvent read FOnConnectionFailed write SetOnConnectionFailed;
35     property OnSuccess: TNotifyEvent read FOnSuccess write SetOnSuccess;
36     property LastErrorMessage: String read FLastErrorMessage;
37   end;
38
39 implementation
40
41 {\92\8d\88Ó: 
42   \88Ù\82È\82é\83X\83\8c\83b\83h\82ª\8f\8a\97L\82·\82é VCL \82Ì\83\81\83\\83b\83h/\8aÖ\90\94/\83v\83\8d\83p\83e\83B\82ð
43   \95Ê\82Ì\83X\83\8c\83b\83h\82Ì\92\86\82©\82ç\88µ\82¤\8fê\8d\87\81A\94r\91¼\8f\88\97\9d\82Ì\96â\91è\82ª\94­\90\82µ\82Ü\82·\81B
44
45   \83\81\83C\83\93\83X\83\8c\83b\83h\82Ì\8f\8a\97L\82·\82é\83I\83u\83W\83F\83N\83g\82É\91Î\82µ\82Ä\82Í Synchronize
46   \83\81\83\\83b\83h\82ð\8eg\82¤\8e\96\82ª\82Å\82«\82Ü\82·\81B\91¼\82Ì\83I\83u\83W\83F\83N\83g\82ð\8eQ\8fÆ\82·\82é\82½\82ß
47   \82Ì\83\81\83\\83b\83h\82ð\83X\83\8c\83b\83h\83N\83\89\83X\82É\92Ç\89Á\82µ\81ASynchronize \83\81\83\\83b\83h\82Ì
48   \88ø\90\94\82Æ\82µ\82Ä\93n\82µ\82Ü\82·\81B
49
50   \82½\82Æ\82¦\82Î\81AUpdateCaption \83\81\83\\83b\83h\82ð\88È\89º\82Ì\82æ\82¤\82É\92è\8b`\82µ\81A
51
52     procedure THTTPDownloadThread.UpdateCaption;
53     begin
54       Form1.Caption := 'THTTPDownloadThread \83X\83\8c\83b\83h\82©\82ç\8f\91\82«\8a·\82¦\82Ü\82µ\82½';
55     end;
56
57   Execute \83\81\83\\83b\83h\82Ì\92\86\82Å Synchronize \83\81\83\\83b\83h\82É\93n\82·\82±\82Æ\82Å\83\81\83C
58   \83\93\83X\83\8c\83b\83h\82ª\8f\8a\97L\82·\82é Form1 \82Ì Caption \83v\83\8d\83p\83e\83B\82ð\88À\91S\82É\95Ï
59   \8dX\82Å\82«\82Ü\82·\81B
60
61       Synchronize(UpdateCaption);
62 }
63
64 { THTTPDownloadThread }
65
66 constructor THTTPDownloadThread.Create(const Host, URL, Post: String);
67 begin
68   inherited Create(true);
69   FHost := Host;
70   FURL := URL;
71   FPost := Post;
72 end;
73
74 procedure THTTPDownloadThread.DoConnectionFailed;
75 begin
76   FOnConnectionFailed(self);
77 end;
78
79 procedure THTTPDownloadThread.DoSuccess;
80 begin
81   FOnSuccess(self);
82 end;
83
84 procedure THTTPDownloadThread.Execute;
85 var Http: TIdHTTP;
86     TmpStr: TStringStream;
87 begin
88   Http := nil;
89   TmpStr := nil;
90   try
91     try
92       Http := TIdHTTP.Create(nil);
93       Http.Host := FHost;
94       Http.ProxyParams.ProxyServer := ProxyServer;
95       Http.ProxyParams.ProxyPort := ProxyPort;
96       if FPost = '' then begin
97         FRecvString := Http.Get(FURL);
98       end else begin
99         TmpStr := TStringStream.Create(FPost);
100         FRecvString := Http.Post(FURL, TmpStr);
101       end;
102       if Assigned(FOnSuccess) then Synchronize(DoSuccess);
103     except
104       on E:EIdException do begin
105         //ShowMessage(E.Message);
106         FLastErrorMessage := E.Message;
107         if Assigned(FOnConnectionFailed) then Synchronize(DoConnectionFailed);
108       end;
109     end;
110   finally
111     Http.Free;
112     if TmpStr <> nil then TmpStr.Free;
113   end;
114 end;
115
116 procedure THTTPDownloadThread.SetOnConnectionFailed(
117   const Value: TNotifyEvent);
118 begin
119   FOnConnectionFailed := Value;
120 end;
121
122 procedure THTTPDownloadThread.SetOnSuccess(const Value: TNotifyEvent);
123 begin
124   FOnSuccess := Value;
125 end;
126
127 procedure THTTPDownloadThread.SetProxyPort(const Value: integer);
128 begin
129   if Suspended then
130     FProxyPort := Value
131   else
132     raise EIdException.Create('Tried to change proxy without suspending');
133 end;
134
135 procedure THTTPDownloadThread.SetProxyServer(const Value: String);
136 begin
137   if Suspended then
138     FProxyServer := Value
139   else
140     raise EIdException.Create('Tried to change proxy without suspending');
141 end;
142
143 end.