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;
{ 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
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;
FProxyPass := Value;
end;
+procedure TIdSLPP20.DoOnDisconnect;
+begin
+ if Assigned(FOnDisconnect) then
+ FOnDisconnect(Self);
+end;
+
{ TIdSLPP20ReadThread }
constructor TIdSLPP20ReadThread.Create(AClient: TIdSLPP20);
procedure TIdSLPP20ReadThread.Execute;
var Line: String;
- EncodedPassword,PlainPassword: String;
+ EncodedPassword, PlainPassword: String;
Base64Encoder: TIdEncoderMIME;
begin
try
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;
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
end;
end;
- if ( FClient.Connected ) then FClient.Disconnect;
+ if FClient.Connected then
+ FClient.Disconnect;
FreeAndNil(FReceivedLog);
FreeAndNil(FRecvData);
end;