You've already forked lazarus-ccr
166 lines
4.4 KiB
ObjectPascal
166 lines
4.4 KiB
ObjectPascal
![]() |
{
|
||
|
This unit has been produced by ws_helper.
|
||
|
Input unit name : "calcservice".
|
||
|
This unit name : "calcservice_binder".
|
||
|
Date : "27/08/2008 16:47:32".
|
||
|
}
|
||
|
unit calcservice_binder;
|
||
|
{$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF}
|
||
|
interface
|
||
|
|
||
|
uses SysUtils, Classes, base_service_intf, server_service_intf, calcservice;
|
||
|
|
||
|
type
|
||
|
|
||
|
|
||
|
TCalcService_ServiceBinder = class(TBaseServiceBinder)
|
||
|
protected
|
||
|
procedure AddHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
||
|
procedure SubstractHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
||
|
public
|
||
|
constructor Create();
|
||
|
end;
|
||
|
|
||
|
TCalcService_ServiceBinderFactory = class(TInterfacedObject,IItemFactory)
|
||
|
private
|
||
|
FInstance : IInterface;
|
||
|
protected
|
||
|
function CreateInstance():IInterface;
|
||
|
public
|
||
|
constructor Create();
|
||
|
destructor Destroy();override;
|
||
|
end;
|
||
|
|
||
|
procedure Server_service_RegisterCalcServiceService();
|
||
|
|
||
|
Implementation
|
||
|
uses TypInfo, wst_resources_imp,metadata_repository;
|
||
|
|
||
|
{ TCalcService_ServiceBinder implementation }
|
||
|
procedure TCalcService_ServiceBinder.AddHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
||
|
var
|
||
|
cllCntrl : ICallControl;
|
||
|
objCntrl : IObjectControl;
|
||
|
hasObjCntrl : Boolean;
|
||
|
tmpObj : ICalcService;
|
||
|
callCtx : ICallContext;
|
||
|
strPrmName : string;
|
||
|
procName,trgName : string;
|
||
|
A : integer;
|
||
|
B : integer;
|
||
|
returnVal : integer;
|
||
|
begin
|
||
|
callCtx := AContext;
|
||
|
|
||
|
strPrmName := 'A'; AFormatter.Get(TypeInfo(integer),strPrmName,A);
|
||
|
strPrmName := 'B'; AFormatter.Get(TypeInfo(integer),strPrmName,B);
|
||
|
|
||
|
tmpObj := Self.GetFactory().CreateInstance() as ICalcService;
|
||
|
if Supports(tmpObj,ICallControl,cllCntrl) then
|
||
|
cllCntrl.SetCallContext(callCtx);
|
||
|
hasObjCntrl := Supports(tmpObj,IObjectControl,objCntrl);
|
||
|
if hasObjCntrl then
|
||
|
objCntrl.Activate();
|
||
|
try
|
||
|
returnVal := tmpObj.Add(A,B);
|
||
|
|
||
|
procName := AFormatter.GetCallProcedureName();
|
||
|
trgName := AFormatter.GetCallTarget();
|
||
|
AFormatter.Clear();
|
||
|
AFormatter.BeginCallResponse(procName,trgName);
|
||
|
AFormatter.Put('result',TypeInfo(integer),returnVal);
|
||
|
AFormatter.EndCallResponse();
|
||
|
|
||
|
callCtx := nil;
|
||
|
finally
|
||
|
if hasObjCntrl then
|
||
|
objCntrl.Deactivate();
|
||
|
Self.GetFactory().ReleaseInstance(tmpObj);
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
procedure TCalcService_ServiceBinder.SubstractHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
||
|
var
|
||
|
cllCntrl : ICallControl;
|
||
|
objCntrl : IObjectControl;
|
||
|
hasObjCntrl : Boolean;
|
||
|
tmpObj : ICalcService;
|
||
|
callCtx : ICallContext;
|
||
|
strPrmName : string;
|
||
|
procName,trgName : string;
|
||
|
A : integer;
|
||
|
B : integer;
|
||
|
returnVal : integer;
|
||
|
begin
|
||
|
callCtx := AContext;
|
||
|
|
||
|
strPrmName := 'A'; AFormatter.Get(TypeInfo(integer),strPrmName,A);
|
||
|
strPrmName := 'B'; AFormatter.Get(TypeInfo(integer),strPrmName,B);
|
||
|
|
||
|
tmpObj := Self.GetFactory().CreateInstance() as ICalcService;
|
||
|
if Supports(tmpObj,ICallControl,cllCntrl) then
|
||
|
cllCntrl.SetCallContext(callCtx);
|
||
|
hasObjCntrl := Supports(tmpObj,IObjectControl,objCntrl);
|
||
|
if hasObjCntrl then
|
||
|
objCntrl.Activate();
|
||
|
try
|
||
|
returnVal := tmpObj.Substract(A,B);
|
||
|
|
||
|
procName := AFormatter.GetCallProcedureName();
|
||
|
trgName := AFormatter.GetCallTarget();
|
||
|
AFormatter.Clear();
|
||
|
AFormatter.BeginCallResponse(procName,trgName);
|
||
|
AFormatter.Put('result',TypeInfo(integer),returnVal);
|
||
|
AFormatter.EndCallResponse();
|
||
|
|
||
|
callCtx := nil;
|
||
|
finally
|
||
|
if hasObjCntrl then
|
||
|
objCntrl.Deactivate();
|
||
|
Self.GetFactory().ReleaseInstance(tmpObj);
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
|
||
|
constructor TCalcService_ServiceBinder.Create();
|
||
|
begin
|
||
|
inherited Create(GetServiceImplementationRegistry().FindFactory('ICalcService'));
|
||
|
RegisterVerbHandler('Add',{$IFDEF FPC}@{$ENDIF}AddHandler);
|
||
|
RegisterVerbHandler('Substract',{$IFDEF FPC}@{$ENDIF}SubstractHandler);
|
||
|
end;
|
||
|
|
||
|
|
||
|
{ TCalcService_ServiceBinderFactory }
|
||
|
|
||
|
function TCalcService_ServiceBinderFactory.CreateInstance():IInterface;
|
||
|
begin
|
||
|
Result := FInstance;
|
||
|
end;
|
||
|
|
||
|
constructor TCalcService_ServiceBinderFactory.Create();
|
||
|
begin
|
||
|
FInstance := TCalcService_ServiceBinder.Create() as IInterface;
|
||
|
end;
|
||
|
|
||
|
destructor TCalcService_ServiceBinderFactory.Destroy();
|
||
|
begin
|
||
|
FInstance := nil;
|
||
|
inherited Destroy();
|
||
|
end;
|
||
|
|
||
|
|
||
|
procedure Server_service_RegisterCalcServiceService();
|
||
|
Begin
|
||
|
GetServerServiceRegistry().Register('ICalcService',TCalcService_ServiceBinderFactory.Create() as IItemFactory);
|
||
|
End;
|
||
|
|
||
|
initialization
|
||
|
|
||
|
{$i calcservice.wst}
|
||
|
|
||
|
{$IF DECLARED(Register_calcservice_ServiceMetadata)}
|
||
|
Register_calcservice_ServiceMetadata();
|
||
|
{$IFEND}
|
||
|
|
||
|
End.
|