Files
lazarus-ccr/components/flashfiler/sourcelaz/ffclplug.pas

172 lines
5.7 KiB
ObjectPascal
Raw Normal View History

{*********************************************************}
{* 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.