procedure Isolate(AProc: TBrookHTTPRequestIsolatedProc;
AUserData: Pointer = nil);{$IFNDEF FPC}overload;{$ENDIF}virtual;
{ Isolates a request from the main event loop to an own dedicated thread,
bringing it back when the request finishes.
@param(AProc[in] Anonymous Procedure to handle requests and responses
isolated from the main event loop.)
@param(AUserData[in] User-defined data.) }
procedure Isolate(const AProc: TBrookHTTPRequestIsolatedAnonymousProc;
AUserData: Pointer = nil); overload; virtual;
{ TBrookHTTPReqIsolatedProcHolder }
TBrookHTTPReqIsolatedProcHolder<T> = class
private
FProc: T;
FUserData: Pointer;
public
constructor Create(const AProc: T; AUserData: Pointer);
property Proc: T read FProc;
property UserData: Pointer read FUserData;
end;
{ TBrookHTTPReqIsolatedProcHolder }
constructor TBrookHTTPReqIsolatedProcHolder<T>.Create(const AProc: T;
AUserData: Pointer);
begin
inherited Create;
FProc := AProc;
FUserData := AUserData;
end;
procedure TBrookHTTPRequest.Isolate(AProc: TBrookHTTPRequestIsolatedProc;
AUserData: Pointer);
var
VHolder: TBrookHTTPReqIsolatedProcHolder<TBrookHTTPRequestIsolatedProc>;
begin
SgLib.Check;
SetIsIsolated(True);
VHolder := TBrookHTTPReqIsolatedProcHolder<
TBrookHTTPRequestIsolatedProc>.Create(AProc, AUserData);
try
SgLib.CheckLastError(sg_httpreq_isolate(FHandle,
DoRequestIsolatedProcCallback, VHolder));
except
VHolder.Free;
raise;
end;
end;