OSDN Git Service

Terminate後は受信イベント(OnSLPPEvent)を発生させないように変更
authornaru <bottle@mikage.to>
Sun, 14 Nov 2004 17:16:23 +0000 (17:16 +0000)
committernaru <bottle@mikage.to>
Sun, 14 Nov 2004 17:16:23 +0000 (17:16 +0000)
sakurasuite/IdSLPP20.pas

index f6c53d5..b84a399 100644 (file)
@@ -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  // \8bó\8ds\82ª\82â\82Á\82Ä\82«\82Ä
+        if FRecvData.Count > 0 then begin  // \89½\82©\82ª\93Í\82¢\82Ä\82¢\82é\8fê\8d\87
           FClient.CheckForDisconnect; //\90Ø\92f\8cã\82Ì\92\86\93r\94¼\92[\82È\83f\81[\83^\91\97\90M\82ð\96h\82®
-          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;