You've already forked lazarus-ccr
172 lines
5.7 KiB
ObjectPascal
172 lines
5.7 KiB
ObjectPascal
![]() |
{*********************************************************}
|
||
|
{* FlashFiler: Client plugin engine *}
|
||
|
{*********************************************************}
|
||
|
|
||
|
(* ***** BEGIN LICENSE BLOCK *****
|
||
|
* Version: MPL 1.1
|
||
|
*
|
||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||
|
* the License. You may obtain a copy of the License at
|
||
|
* http://www.mozilla.org/MPL/
|
||
|
*
|
||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||
|
* for the specific language governing rights and limitations under the
|
||
|
* License.
|
||
|
*
|
||
|
* The Original Code is TurboPower FlashFiler
|
||
|
*
|
||
|
* The Initial Developer of the Original Code is
|
||
|
* TurboPower Software
|
||
|
*
|
||
|
* Portions created by the Initial Developer are Copyright (C) 1996-2002
|
||
|
* the Initial Developer. All Rights Reserved.
|
||
|
*
|
||
|
* Contributor(s):
|
||
|
*
|
||
|
* ***** END LICENSE BLOCK ***** *)
|
||
|
|
||
|
{$I ffdefine.inc}
|
||
|
|
||
|
unit FFClPlug;
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses
|
||
|
Classes,
|
||
|
FFDB,
|
||
|
FFLLBase,
|
||
|
FFLLComm;
|
||
|
|
||
|
type
|
||
|
TffClientPluginEngine = class(TffBasePluginEngine)
|
||
|
protected
|
||
|
FSession : TffSession;
|
||
|
FTimeout : Longint;
|
||
|
|
||
|
procedure cpSetSession(aSession : TffSession);
|
||
|
|
||
|
function ProcessRequest(aMsgID : Longint;
|
||
|
aTimeout : Longint;
|
||
|
aRequestData : Pointer;
|
||
|
aRequestDataLen : Longint;
|
||
|
aRequestDataType : TffNetMsgDataType;
|
||
|
var aReply : Pointer;
|
||
|
var aReplyLen : Longint;
|
||
|
aReplyType : TffNetMsgDataType) : TffResult;
|
||
|
|
||
|
function ProcessRequestNoReply(aMsgID : Longint;
|
||
|
aTimeout : Longint;
|
||
|
aRequestData : Pointer;
|
||
|
aRequestDataLen : Longint ) : TffResult;
|
||
|
public
|
||
|
|
||
|
constructor Create(aOwner : TComponent); override;
|
||
|
destructor Destroy; override;
|
||
|
|
||
|
procedure FFNotificationEx(const aOp : Byte; aFrom : TffComponent;
|
||
|
const aData : TffWord32); override;
|
||
|
{ Method used to detect loss of connection. }
|
||
|
|
||
|
|
||
|
published
|
||
|
|
||
|
property Timeout : Longint
|
||
|
read FTimeout write FTimeout default 10000;
|
||
|
|
||
|
property Session : TffSession
|
||
|
read FSession write cpSetSession;
|
||
|
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
uses
|
||
|
SysUtils,
|
||
|
Windows,
|
||
|
FFLLReq,
|
||
|
FFSrBDE;
|
||
|
|
||
|
{===TffClientPluginEngine============================================}
|
||
|
constructor TffClientPluginEngine.Create(aOwner : TComponent);
|
||
|
begin
|
||
|
inherited;
|
||
|
FTimeout := 10000;
|
||
|
end;
|
||
|
{--------}
|
||
|
destructor TffClientPluginEngine.Destroy;
|
||
|
begin
|
||
|
if FSession <> nil then begin
|
||
|
FSession.FFRemoveDependent(Self);
|
||
|
FSession := nil;
|
||
|
end;
|
||
|
inherited;
|
||
|
end;
|
||
|
{--------}
|
||
|
procedure TffClientPluginEngine.cpSetSession(aSession : TffSession);
|
||
|
begin
|
||
|
if FSession = aSession then
|
||
|
Exit;
|
||
|
|
||
|
FFNotifyDependents(ffn_Deactivate);
|
||
|
if Assigned(FSession) then begin
|
||
|
FSession.FFRemoveDependent(Self);
|
||
|
FSession := nil;
|
||
|
end;
|
||
|
|
||
|
FSession := aSession;
|
||
|
if Assigned(FSession) then
|
||
|
FSession.FFAddDependent(Self);
|
||
|
end;
|
||
|
{--------}
|
||
|
procedure TffClientPluginEngine.FFNotificationEx(const aOp : Byte;
|
||
|
aFrom : TffComponent;
|
||
|
const aData : TffWord32);
|
||
|
begin
|
||
|
if (aFrom = FSession) then
|
||
|
if ((aOp = ffn_Destroy) or (aOp = ffn_Remove)) then begin
|
||
|
FFNotifyDependents(ffn_Deactivate);
|
||
|
FSession := nil;
|
||
|
end else if (aOp = ffn_Deactivate) then
|
||
|
FFNotifyDependents(ffn_Deactivate);
|
||
|
end;
|
||
|
{----------}
|
||
|
type
|
||
|
TffSessionCracker = class(TffSession);
|
||
|
{----------}
|
||
|
function TffClientPluginEngine.ProcessRequest(aMsgID : longInt;
|
||
|
aTimeout : longInt;
|
||
|
aRequestData : Pointer;
|
||
|
aRequestDataLen : longInt;
|
||
|
aRequestDataType : TffNetMsgDataType;
|
||
|
var aReply : Pointer;
|
||
|
var aReplyLen : longInt;
|
||
|
aReplyType : TffNetMsgDataType
|
||
|
) : TffResult;
|
||
|
begin
|
||
|
Result := TffSessionCracker(FSession).ProcessRequest(aMsgID,
|
||
|
aTimeout,
|
||
|
aRequestData,
|
||
|
aRequestDataLen,
|
||
|
aRequestDataType,
|
||
|
aReply,
|
||
|
aReplyLen,
|
||
|
aReplyType);
|
||
|
end;
|
||
|
{----------}
|
||
|
function TffClientPluginEngine.ProcessRequestNoReply(aMsgID : Longint;
|
||
|
aTimeout : Longint;
|
||
|
aRequestData : Pointer;
|
||
|
aRequestDataLen : Longint
|
||
|
) : TffResult;
|
||
|
begin
|
||
|
Result := TffSessionCracker(FSession).ProcessRequestNoReply(aMsgID,
|
||
|
aTimeout,
|
||
|
aRequestData,
|
||
|
aRequestDataLen);
|
||
|
end;
|
||
|
{====================================================================}
|
||
|
|
||
|
end.
|