Files
lazarus-ccr/wst/trunk/samples/soap_headers/client/client_calc.pas
2008-08-27 17:50:39 +00:00

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.