From: naru Date: Sun, 14 Nov 2004 17:16:23 +0000 (+0000) Subject: Terminate後は受信イベント(OnSLPPEvent)を発生させないように変更 X-Git-Tag: YC_F~18 X-Git-Url: http://git.osdn.net/view?p=winbottle%2Fwinbottle.git;a=commitdiff_plain;h=f9dd39637c61dbe9072d8fcbfa4b2d10cee1719f Terminate後は受信イベント(OnSLPPEvent)を発生させないように変更 --- diff --git a/sakurasuite/IdSLPP20.pas b/sakurasuite/IdSLPP20.pas index f6c53d5..b84a399 100644 --- a/sakurasuite/IdSLPP20.pas +++ b/sakurasuite/IdSLPP20.pas @@ -67,13 +67,12 @@ type procedure SetOnConnectFailed(const Value: TNotifyEvent); public constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Connect(const ATimeout: Integer = IdTimeoutDefault); override; procedure ConnectServer(const ATimeout: Integer = IdTimeoutDefault); procedure Disconnect; override; procedure DoOnSlppEvent; procedure DoOnConnect; procedure DoOnConnectFailed; + procedure DoOnDisconnect; property SLPP20ReadThread: TIdSLPP20ReadThread read FSLPPThread; property LastReadTime: Int64 read FLastReadTime write SetLastReadTime; property LastReadTimeInterval: integer read GetLastReadTimeInterval; @@ -105,11 +104,7 @@ end; { TIdSLPP20 } -procedure TIdSLPP20.Connect(const ATimeout: Integer); -begin - inherited Connect(ATimeout); -end; - +// Do NOT call TIdSLPP20.Connect outside of this unit. procedure TIdSLPP20.ConnectServer; begin try @@ -129,22 +124,15 @@ begin ProxyPass := ''; end; -destructor TIdSLPP20.Destroy; -begin - inherited; -end; - procedure TIdSLPP20.Disconnect; begin inherited Disconnect; if Assigned(FSLPPThread) then begin + // The thread will be destroyed eventually FSLPPThread.Terminate; - // FSLPPThread.WaitFor; FSLPPThread := nil; end; - if Assigned(FOnDisconnect) then begin - OnDisconnect(self); - end; + DoOnDisconnect; end; procedure TIdSLPP20.DoOnConnect; @@ -227,6 +215,12 @@ begin FProxyPass := Value; end; +procedure TIdSLPP20.DoOnDisconnect; +begin + if Assigned(FOnDisconnect) then + FOnDisconnect(Self); +end; + { TIdSLPP20ReadThread } constructor TIdSLPP20ReadThread.Create(AClient: TIdSLPP20); @@ -239,7 +233,7 @@ end; procedure TIdSLPP20ReadThread.Execute; var Line: String; - EncodedPassword,PlainPassword: String; + EncodedPassword, PlainPassword: String; Base64Encoder: TIdEncoderMIME; begin try @@ -256,9 +250,12 @@ begin if FClient.ProxyUser <> '' then begin if FClient.ProxyPass <> '' then begin PlainPassword := FClient.ProxyUser + ':' + FClient.ProxyPass; - Base64Encoder.Create(nil); - EncodedPassword := Base64Encoder.Encode(PlainPassword); - FreeAndNil(Base64Encoder); + Base64Encoder := TIdEncoderMIME.Create(nil); + try + EncodedPassword := Base64Encoder.Encode(PlainPassword); + finally + Base64Encoder.Free; + end; end; end; @@ -289,12 +286,11 @@ begin FReceivedLog.SaveToFile(ExtractFilePath(Application.ExeName)+'slpp20_debug.log'); end; if not FClient.ReadLnTimedOut then FClient.LastReadTime := getTickCount; - if Length(Line) = 0 then begin - if FRecvData.Count > 0 then begin + if Length(Line) = 0 then begin // ‹ós‚ª‚â‚Á‚Ä‚«‚Ä + if FRecvData.Count > 0 then begin // ‰½‚©‚ª“Í‚¢‚Ä‚¢‚éê‡ FClient.CheckForDisconnect; //Ø’fŒã‚Ì’†“r”¼’[‚ȃf[ƒ^‘—M‚ð–h‚® - while Parse do begin + if Parse and not Terminated then Synchronize(FClient.DoOnSlppEvent); - end; FRecvData.Clear; end; end else begin @@ -307,7 +303,8 @@ begin end; end; - if ( FClient.Connected ) then FClient.Disconnect; + if FClient.Connected then + FClient.Disconnect; FreeAndNil(FReceivedLog); FreeAndNil(FRecvData); end;