You've already forked lazarus-ccr
TTest_TIntfPoolItem TTest_TSimpleItemFactory TTest_XmlRpcFormatterExceptionBlock TTest_SoapFormatterExceptionBlock Record serialization test git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@243 8e941d3f-bd1b-0410-a28a-d453659cc2b4
265 lines
7.7 KiB
ObjectPascal
265 lines
7.7 KiB
ObjectPascal
{
|
|
This unit has been produced by ws_helper.
|
|
Input unit name : "calculator".
|
|
This unit name : "calculator_binder".
|
|
Date : "15/08/2007 16:34:20".
|
|
}
|
|
unit calculator_binder;
|
|
{$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF}
|
|
interface
|
|
|
|
uses SysUtils, Classes, base_service_intf, server_service_intf, calculator;
|
|
|
|
type
|
|
|
|
|
|
TCalculator_ServiceBinder = class(TBaseServiceBinder)
|
|
protected
|
|
procedure AddIntHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
|
procedure DivIntHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
|
procedure DoAllOperationsHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
|
procedure DoOperationHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
|
public
|
|
constructor Create();
|
|
end;
|
|
|
|
TCalculator_ServiceBinderFactory = class(TInterfacedObject,IItemFactory)
|
|
private
|
|
FInstance : IInterface;
|
|
protected
|
|
function CreateInstance():IInterface;
|
|
public
|
|
constructor Create();
|
|
destructor Destroy();override;
|
|
end;
|
|
|
|
procedure Server_service_RegisterCalculatorService();
|
|
|
|
Implementation
|
|
uses TypInfo, wst_resources_imp,metadata_repository;
|
|
|
|
{ TCalculator_ServiceBinder implementation }
|
|
procedure TCalculator_ServiceBinder.AddIntHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
|
var
|
|
cllCntrl : ICallControl;
|
|
objCntrl : IObjectControl;
|
|
hasObjCntrl : Boolean;
|
|
tmpObj : ICalculator;
|
|
callCtx : ICallContext;
|
|
strPrmName : string;
|
|
procName,trgName : string;
|
|
A : Integer;
|
|
B : Integer;
|
|
returnVal : TBinaryArgsResult;
|
|
begin
|
|
callCtx := AContext;
|
|
TObject(returnVal) := nil;
|
|
|
|
strPrmName := 'A'; AFormatter.Get(TypeInfo(Integer),strPrmName,A);
|
|
strPrmName := 'B'; AFormatter.Get(TypeInfo(Integer),strPrmName,B);
|
|
|
|
tmpObj := Self.GetFactory().CreateInstance() as ICalculator;
|
|
if Supports(tmpObj,ICallControl,cllCntrl) then
|
|
cllCntrl.SetCallContext(callCtx);
|
|
hasObjCntrl := Supports(tmpObj,IObjectControl,objCntrl);
|
|
if hasObjCntrl then
|
|
objCntrl.Activate();
|
|
try
|
|
returnVal := tmpObj.AddInt(A,B);
|
|
if Assigned(TObject(returnVal)) then
|
|
callCtx.AddObjectToFree(TObject(returnVal));
|
|
|
|
procName := AFormatter.GetCallProcedureName();
|
|
trgName := AFormatter.GetCallTarget();
|
|
AFormatter.Clear();
|
|
AFormatter.BeginCallResponse(procName,trgName);
|
|
AFormatter.Put('Result',TypeInfo(TBinaryArgsResult),returnVal);
|
|
AFormatter.EndCallResponse();
|
|
|
|
callCtx := nil;
|
|
finally
|
|
if hasObjCntrl then
|
|
objCntrl.Deactivate();
|
|
Self.GetFactory().ReleaseInstance(tmpObj);
|
|
end;
|
|
end;
|
|
|
|
procedure TCalculator_ServiceBinder.DivIntHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
|
var
|
|
cllCntrl : ICallControl;
|
|
objCntrl : IObjectControl;
|
|
hasObjCntrl : Boolean;
|
|
tmpObj : ICalculator;
|
|
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 ICalculator;
|
|
if Supports(tmpObj,ICallControl,cllCntrl) then
|
|
cllCntrl.SetCallContext(callCtx);
|
|
hasObjCntrl := Supports(tmpObj,IObjectControl,objCntrl);
|
|
if hasObjCntrl then
|
|
objCntrl.Activate();
|
|
try
|
|
returnVal := tmpObj.DivInt(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 TCalculator_ServiceBinder.DoAllOperationsHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
|
var
|
|
cllCntrl : ICallControl;
|
|
objCntrl : IObjectControl;
|
|
hasObjCntrl : Boolean;
|
|
tmpObj : ICalculator;
|
|
callCtx : ICallContext;
|
|
strPrmName : string;
|
|
procName,trgName : string;
|
|
A : Integer;
|
|
B : Integer;
|
|
returnVal : TBinaryArgsResultArray;
|
|
begin
|
|
callCtx := AContext;
|
|
TObject(returnVal) := nil;
|
|
|
|
strPrmName := 'A'; AFormatter.Get(TypeInfo(Integer),strPrmName,A);
|
|
strPrmName := 'B'; AFormatter.Get(TypeInfo(Integer),strPrmName,B);
|
|
|
|
tmpObj := Self.GetFactory().CreateInstance() as ICalculator;
|
|
if Supports(tmpObj,ICallControl,cllCntrl) then
|
|
cllCntrl.SetCallContext(callCtx);
|
|
hasObjCntrl := Supports(tmpObj,IObjectControl,objCntrl);
|
|
if hasObjCntrl then
|
|
objCntrl.Activate();
|
|
try
|
|
returnVal := tmpObj.DoAllOperations(A,B);
|
|
if Assigned(TObject(returnVal)) then
|
|
callCtx.AddObjectToFree(TObject(returnVal));
|
|
|
|
procName := AFormatter.GetCallProcedureName();
|
|
trgName := AFormatter.GetCallTarget();
|
|
AFormatter.Clear();
|
|
AFormatter.BeginCallResponse(procName,trgName);
|
|
AFormatter.Put('Result',TypeInfo(TBinaryArgsResultArray),returnVal);
|
|
AFormatter.EndCallResponse();
|
|
|
|
callCtx := nil;
|
|
finally
|
|
if hasObjCntrl then
|
|
objCntrl.Deactivate();
|
|
Self.GetFactory().ReleaseInstance(tmpObj);
|
|
end;
|
|
end;
|
|
|
|
procedure TCalculator_ServiceBinder.DoOperationHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
|
|
var
|
|
cllCntrl : ICallControl;
|
|
objCntrl : IObjectControl;
|
|
hasObjCntrl : Boolean;
|
|
tmpObj : ICalculator;
|
|
callCtx : ICallContext;
|
|
strPrmName : string;
|
|
procName,trgName : string;
|
|
A : Integer;
|
|
B : Integer;
|
|
AOperation : TCalc_Op;
|
|
returnVal : TBinaryArgsResult;
|
|
begin
|
|
callCtx := AContext;
|
|
TObject(returnVal) := nil;
|
|
|
|
strPrmName := 'A'; AFormatter.Get(TypeInfo(Integer),strPrmName,A);
|
|
strPrmName := 'B'; AFormatter.Get(TypeInfo(Integer),strPrmName,B);
|
|
strPrmName := 'AOperation'; AFormatter.Get(TypeInfo(TCalc_Op),strPrmName,AOperation);
|
|
|
|
tmpObj := Self.GetFactory().CreateInstance() as ICalculator;
|
|
if Supports(tmpObj,ICallControl,cllCntrl) then
|
|
cllCntrl.SetCallContext(callCtx);
|
|
hasObjCntrl := Supports(tmpObj,IObjectControl,objCntrl);
|
|
if hasObjCntrl then
|
|
objCntrl.Activate();
|
|
try
|
|
returnVal := tmpObj.DoOperation(A,B,AOperation);
|
|
if Assigned(TObject(returnVal)) then
|
|
callCtx.AddObjectToFree(TObject(returnVal));
|
|
|
|
procName := AFormatter.GetCallProcedureName();
|
|
trgName := AFormatter.GetCallTarget();
|
|
AFormatter.Clear();
|
|
AFormatter.BeginCallResponse(procName,trgName);
|
|
AFormatter.Put('Result',TypeInfo(TBinaryArgsResult),returnVal);
|
|
AFormatter.EndCallResponse();
|
|
|
|
callCtx := nil;
|
|
finally
|
|
if hasObjCntrl then
|
|
objCntrl.Deactivate();
|
|
Self.GetFactory().ReleaseInstance(tmpObj);
|
|
end;
|
|
end;
|
|
|
|
|
|
constructor TCalculator_ServiceBinder.Create();
|
|
begin
|
|
inherited Create(GetServiceImplementationRegistry().FindFactory('ICalculator'));
|
|
RegisterVerbHandler('AddInt',{$IFDEF FPC}@{$ENDIF}AddIntHandler);
|
|
RegisterVerbHandler('DivInt',{$IFDEF FPC}@{$ENDIF}DivIntHandler);
|
|
RegisterVerbHandler('DoAllOperations',{$IFDEF FPC}@{$ENDIF}DoAllOperationsHandler);
|
|
RegisterVerbHandler('DoOperation',{$IFDEF FPC}@{$ENDIF}DoOperationHandler);
|
|
end;
|
|
|
|
|
|
{ TCalculator_ServiceBinderFactory }
|
|
|
|
function TCalculator_ServiceBinderFactory.CreateInstance():IInterface;
|
|
begin
|
|
Result := FInstance;
|
|
end;
|
|
|
|
constructor TCalculator_ServiceBinderFactory.Create();
|
|
begin
|
|
FInstance := TCalculator_ServiceBinder.Create() as IInterface;
|
|
end;
|
|
|
|
destructor TCalculator_ServiceBinderFactory.Destroy();
|
|
begin
|
|
FInstance := nil;
|
|
inherited Destroy();
|
|
end;
|
|
|
|
|
|
procedure Server_service_RegisterCalculatorService();
|
|
Begin
|
|
GetServerServiceRegistry().Register('ICalculator',TCalculator_ServiceBinderFactory.Create() as IItemFactory);
|
|
End;
|
|
|
|
initialization
|
|
|
|
{$i calculator.wst}
|
|
|
|
{$IF DECLARED(Register_calculator_ServiceMetadata)}
|
|
Register_calculator_ServiceMetadata();
|
|
{$IFEND}
|
|
|
|
End.
|