You've already forked lazarus-ccr
Use interface to manage object life cycle
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2575 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -22,9 +22,14 @@ uses
|
|||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
IObjectRef = interface
|
||||||
|
['{B62EC733-999D-4DEC-A69F-B7546A16F661}']
|
||||||
|
function GetObject() : TObject;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TFPWorkerObject }
|
{ TFPWorkerObject }
|
||||||
|
|
||||||
TFPWorkerObject = class
|
TFPWorkerObject = class(TInterfacedObject,IObjectRef)
|
||||||
private
|
private
|
||||||
FHTTPServerObject: TFPHTTPServer;
|
FHTTPServerObject: TFPHTTPServer;
|
||||||
FRootAddress : string;
|
FRootAddress : string;
|
||||||
@ -52,6 +57,8 @@ type
|
|||||||
Var ARequest : TFPHTTPConnectionRequest;
|
Var ARequest : TFPHTTPConnectionRequest;
|
||||||
Var AResponse : TFPHTTPConnectionResponse
|
Var AResponse : TFPHTTPConnectionResponse
|
||||||
);
|
);
|
||||||
|
protected
|
||||||
|
function GetObject() : TObject;
|
||||||
public
|
public
|
||||||
constructor Create();
|
constructor Create();
|
||||||
destructor Destroy(); override;
|
destructor Destroy(); override;
|
||||||
@ -70,7 +77,7 @@ type
|
|||||||
|
|
||||||
TServerListnerThread = class(TThread)
|
TServerListnerThread = class(TThread)
|
||||||
private
|
private
|
||||||
FWorkerObject : TFPWorkerObject;
|
FWorkerObject : IObjectRef;
|
||||||
public
|
public
|
||||||
constructor Create(AWorkerObject : TFPWorkerObject);
|
constructor Create(AWorkerObject : TFPWorkerObject);
|
||||||
procedure Execute(); override;
|
procedure Execute(); override;
|
||||||
@ -84,6 +91,7 @@ type
|
|||||||
TwstFPHttpListener = class(TwstListener)
|
TwstFPHttpListener = class(TwstListener)
|
||||||
private
|
private
|
||||||
FOptions : TListenerOptions;
|
FOptions : TListenerOptions;
|
||||||
|
FWorkerObjectRef : IObjectRef;
|
||||||
FWorkerObject : TFPWorkerObject;
|
FWorkerObject : TFPWorkerObject;
|
||||||
protected
|
protected
|
||||||
procedure SetOnNotifyMessage(const AValue : TListnerNotifyMessage);override;
|
procedure SetOnNotifyMessage(const AValue : TListnerNotifyMessage);override;
|
||||||
@ -141,14 +149,17 @@ end;
|
|||||||
constructor TServerListnerThread.Create(AWorkerObject : TFPWorkerObject);
|
constructor TServerListnerThread.Create(AWorkerObject : TFPWorkerObject);
|
||||||
begin
|
begin
|
||||||
FreeOnTerminate := True;
|
FreeOnTerminate := True;
|
||||||
FWorkerObject := AWorkerObject;
|
FWorkerObject := AWorkerObject as IObjectRef;
|
||||||
inherited Create(False);
|
inherited Create(False);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TServerListnerThread.Execute();
|
procedure TServerListnerThread.Execute();
|
||||||
|
var
|
||||||
|
locObject : TFPWorkerObject;
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
FWorkerObject.Start();
|
locObject := TFPWorkerObject(FWorkerObject.GetObject());
|
||||||
|
locObject.Start();
|
||||||
except
|
except
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -262,6 +273,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TFPWorkerObject.GetObject : TObject;
|
||||||
|
begin
|
||||||
|
Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TFPWorkerObject.SetHandleRequestInThread(const AValue : Boolean);
|
procedure TFPWorkerObject.SetHandleRequestInThread(const AValue : Boolean);
|
||||||
begin
|
begin
|
||||||
if FHTTPServerObject.Active then
|
if FHTTPServerObject.Active then
|
||||||
@ -326,7 +342,8 @@ constructor TwstFPHttpListener.Create(
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
inherited Create();
|
inherited Create();
|
||||||
FWorkerObject := TFPWorkerObject.Create();
|
FWorkerObjectRef := TFPWorkerObject.Create() as IObjectRef;
|
||||||
|
FWorkerObject := TFPWorkerObject(FWorkerObjectRef.GetObject());
|
||||||
FWorkerObject.RootAddress := AServerIpAddress;
|
FWorkerObject.RootAddress := AServerIpAddress;
|
||||||
FWorkerObject.ServerSoftware := AServerSoftware;
|
FWorkerObject.ServerSoftware := AServerSoftware;
|
||||||
FWorkerObject.ListeningPort := AListningPort;
|
FWorkerObject.ListeningPort := AListningPort;
|
||||||
@ -336,7 +353,7 @@ destructor TwstFPHttpListener.Destroy();
|
|||||||
begin
|
begin
|
||||||
if (FWorkerObject <> nil) then
|
if (FWorkerObject <> nil) then
|
||||||
Stop();
|
Stop();
|
||||||
FreeAndNil(FWorkerObject);
|
FWorkerObjectRef := nil;
|
||||||
inherited Destroy();
|
inherited Destroy();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user