You've already forked lazarus-ccr
Soap header sample : client and server. See readme.txt for more informations.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@536 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
86
wst/trunk/samples/soap_headers/client/client_calc.pas
Normal file
86
wst/trunk/samples/soap_headers/client/client_calc.pas
Normal file
@ -0,0 +1,86 @@
|
||||
program client_calc;
|
||||
{$mode objfpc}{$H+}
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
soap_formatter, synapse_http_protocol,
|
||||
calcservice, calcservice_proxy, base_service_intf;
|
||||
var
|
||||
theProxy : ICalcService;
|
||||
callContext : ICallContext;
|
||||
loginHeader : TLoginHeader;
|
||||
sessionHeader : TSessionHeader;
|
||||
sessionToken : string;
|
||||
|
||||
procedure PrepareAndSendSessionHeader();
|
||||
var
|
||||
k, c : Integer;
|
||||
begin
|
||||
callContext := theProxy as ICallContext;
|
||||
c := callContext.GetHeaderCount(AllHeaderDirection);
|
||||
if ( c > 0 ) then begin
|
||||
for k := 0 to Pred(c) do begin
|
||||
if callContext.GetHeader(k).InheritsFrom(TSessionHeader) then begin
|
||||
sessionToken := TSessionHeader(callContext.GetHeader(k)).SessionToken;
|
||||
Writeln; WriteLn(' Your session token is : ',sessionToken); WriteLn;
|
||||
sessionHeader := TSessionHeader.Create();
|
||||
sessionHeader.SessionToken := sessionToken;
|
||||
// Delete the Login Header
|
||||
callContext.ClearHeaders(hdOut);
|
||||
loginHeader := nil{the object no longer exists};
|
||||
//Add the session token
|
||||
callContext.AddHeader(sessionHeader,True{Let the CallContext free the object});
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
a, b : Integer;
|
||||
op, c : Char;
|
||||
strBuffer : string;
|
||||
begin
|
||||
SYNAPSE_RegisterHTTP_Transport();
|
||||
theProxy := wst_CreateInstance_ICalcService();
|
||||
loginHeader := TLoginHeader.Create();
|
||||
WriteLn('Calculator Client demo');
|
||||
Write(' Enter your user name : ');
|
||||
ReadLn(strBuffer);
|
||||
loginHeader.UserName := strBuffer;
|
||||
Write(' Enter your password : ');
|
||||
ReadLn(strBuffer);
|
||||
loginHeader.Password := strBuffer;
|
||||
WriteLn();
|
||||
sessionHeader := nil;
|
||||
try
|
||||
repeat
|
||||
if ( sessionHeader = nil ) then begin
|
||||
// login the first time
|
||||
loginHeader.mustUnderstand := 1;
|
||||
loginHeader.Direction := hdOut;
|
||||
(theProxy as ICallContext).AddHeader(loginHeader,True{Let the CallContext free the object});
|
||||
end;
|
||||
Write('Enter first operand : '); ReadLn(a);
|
||||
Write('Enter second operand : '); ReadLn(b);
|
||||
Write('Enter operator ( + or - ) : '); ReadLn(op);
|
||||
case op of
|
||||
'+' : WriteLn(a,' + ',b,' = ',theProxy.Add(a,b));
|
||||
'-' : WriteLn(a,' - ',b,' = ',theProxy.Substract(a,b));
|
||||
else WriteLn('Unknown operator : ',op);
|
||||
end;
|
||||
if ( sessionHeader = nil ) then begin
|
||||
{Now prepare the session header}
|
||||
PrepareAndSendSessionHeader();
|
||||
end;
|
||||
WriteLn(''); Write(' Continue (y/n) ? : '); ReadLn(c);
|
||||
WriteLn('')
|
||||
until ( c <> 'y' );
|
||||
except
|
||||
on e : Exception do begin
|
||||
WriteLn;
|
||||
WriteLn('An exception occurs >> ');
|
||||
Write(e.Message);
|
||||
end;
|
||||
end;
|
||||
end.
|
||||
|
Reference in New Issue
Block a user