You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@536 8e941d3f-bd1b-0410-a28a-d453659cc2b4
87 lines
2.6 KiB
ObjectPascal
87 lines
2.6 KiB
ObjectPascal
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.
|
|
|