2007-05-05 19:05:01 +00:00
|
|
|
program user_client_console;
|
|
|
|
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
|
|
|
|
uses
|
2007-07-14 23:17:03 +00:00
|
|
|
Classes, SysUtils, TypInfo, {$IFDEF WINDOWS}ActiveX,{$ENDIF}
|
2007-05-05 19:05:01 +00:00
|
|
|
user_service_intf_proxy,
|
2007-12-29 00:58:19 +00:00
|
|
|
same_process_protocol, synapse_tcp_protocol, synapse_http_protocol, library_protocol,
|
2009-05-25 16:13:54 +00:00
|
|
|
// same_process_protocol, indy_tcp_protocol, indy_http_protocol, library_protocol,
|
|
|
|
// same_process_protocol, ics_tcp_protocol, ics_http_protocol, library_protocol,
|
2007-12-29 00:58:19 +00:00
|
|
|
soap_formatter, binary_formatter, json_formatter,
|
2008-01-08 17:26:19 +00:00
|
|
|
user_service_intf, xmlrpc_formatter, service_intf;
|
2007-05-05 19:05:01 +00:00
|
|
|
|
|
|
|
var
|
|
|
|
UserServiceInst : UserService;
|
|
|
|
|
|
|
|
procedure ShowUser(AUser : TUser);
|
|
|
|
begin
|
|
|
|
if ( AUser <> nil ) then begin
|
|
|
|
WriteLn(' Name = ',AUser.UserName);
|
|
|
|
WriteLn(' Category = ',GetEnumName(TypeInfo(TUserCategory),Ord(AUser.Category)));
|
|
|
|
WriteLn(' e-Mail = ',AUser.eMail);
|
|
|
|
WriteLn(' Preferences = ',AUser.Preferences);
|
2007-07-12 14:46:45 +00:00
|
|
|
WriteLn(' Note');
|
|
|
|
WriteLn(' Header = ',AUser.Note.Header);
|
|
|
|
WriteLn(' Author = ',AUser.Note.Author);
|
|
|
|
WriteLn(' Date = ',AUser.Note.Date);
|
2007-05-05 19:05:01 +00:00
|
|
|
end else begin
|
|
|
|
WriteLn('<Empty User>');
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure ShowUserArray(AArray : TUserArray);
|
|
|
|
var
|
|
|
|
i, c : Integer;
|
|
|
|
usr : TUser;
|
|
|
|
begin
|
|
|
|
if ( AArray <> nil ) then begin
|
|
|
|
c := AArray.Length;
|
|
|
|
for i := 0 to Pred(c) do begin
|
|
|
|
usr := AArray[i];
|
|
|
|
WriteLn();
|
|
|
|
WriteLn(Format('User[%d] : ',[(i+1)]));
|
|
|
|
ShowUser(usr);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure HandleShowAll();
|
|
|
|
var
|
|
|
|
userArray : TUserArray;
|
|
|
|
begin
|
|
|
|
userArray := UserServiceInst.GetList();
|
|
|
|
try
|
|
|
|
if ( userArray <> nil ) and ( userArray.Length > 0 ) then begin
|
|
|
|
ShowUserArray(userArray);
|
|
|
|
end else begin
|
|
|
|
WriteLn('Empty Array.');
|
|
|
|
end;
|
|
|
|
finally
|
|
|
|
FreeAndNil(userArray);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
2007-06-28 23:33:38 +00:00
|
|
|
type TAddType = ( atAdd, atUpdate );
|
|
|
|
procedure HandleAdd(const AType :TAddType);
|
|
|
|
const CAPTIONS : array[TAddType] of string = ( 'Adding a user :', 'Updating a user :' );
|
2007-05-05 19:05:01 +00:00
|
|
|
function ReadItem(const APrompt : string; const ANonNull : Boolean):string ;
|
|
|
|
begin
|
|
|
|
Result := '';
|
|
|
|
Write(APrompt);
|
|
|
|
ReadLn(Result);
|
|
|
|
Result := Trim(Result);
|
|
|
|
if ANonNull and ( Length(Result) = 0 ) then
|
|
|
|
Raise Exception.Create('Invalid User Name!');
|
|
|
|
end;
|
|
|
|
var
|
|
|
|
usr : TUser;
|
|
|
|
buff : string;
|
|
|
|
begin
|
|
|
|
buff := '';
|
2007-06-28 23:33:38 +00:00
|
|
|
WriteLn(CAPTIONS[AType]);
|
2007-05-05 19:05:01 +00:00
|
|
|
try
|
|
|
|
usr := TUser.Create();
|
|
|
|
try
|
|
|
|
usr.UserName := ReadItem('Enter user name : ',True);
|
|
|
|
buff := UpperCase(ReadItem('Enter user Category( A : Admin; N : normal ) : ',True));
|
|
|
|
if ( buff[1] = 'A' ) then
|
|
|
|
usr.Category:= Admin
|
|
|
|
else
|
|
|
|
usr.Category:= Normal;
|
|
|
|
usr.eMail := ReadItem('Enter user e-mail : ',False);
|
|
|
|
usr.Preferences := ReadItem('Enter user Preferences : ',False);
|
2009-05-25 16:13:54 +00:00
|
|
|
buff := UpperCase(ReadItem('Do you want to add some notes : ',False));
|
|
|
|
if ( Length(buff) > 0 ) and ( buff[1] = 'Y' ) then begin
|
2007-07-12 14:46:45 +00:00
|
|
|
usr.Note.Header := ReadItem('Enter user Note.Header : ',False);
|
|
|
|
usr.Note.Author := ReadItem('Enter user Note.Author : ',False);
|
|
|
|
usr.Note.Date := ReadItem('Enter user Note.Date : ',False);
|
|
|
|
end;
|
2007-06-28 23:33:38 +00:00
|
|
|
if ( AType = atUpdate ) then
|
|
|
|
UserServiceInst.Update(usr)
|
|
|
|
else
|
|
|
|
UserServiceInst.Add(usr);
|
2007-05-05 19:05:01 +00:00
|
|
|
finally
|
|
|
|
FreeAndNil(usr);
|
|
|
|
end;
|
|
|
|
except
|
|
|
|
on e : Exception do begin
|
|
|
|
WriteLn(e.Message);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure HandleFindUser();
|
|
|
|
var
|
|
|
|
user : TUser;
|
|
|
|
buff : string;
|
|
|
|
begin
|
|
|
|
Write('Enter User Name : ');
|
|
|
|
ReadLn(buff);
|
|
|
|
user := UserServiceInst.Find(buff);
|
|
|
|
try
|
|
|
|
ShowUser(user);
|
|
|
|
finally
|
|
|
|
FreeAndNil(user);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
2007-06-28 23:33:38 +00:00
|
|
|
procedure HandleDeleteUser();
|
|
|
|
var
|
|
|
|
buff : string;
|
|
|
|
begin
|
|
|
|
Write('Enter User Name : ');
|
|
|
|
ReadLn(buff);
|
|
|
|
UserServiceInst.Delete(buff);
|
|
|
|
end;
|
|
|
|
|
|
|
|
type
|
|
|
|
TTransportType = ( ttLibrary, ttTCP, ttHTTP );
|
2007-12-29 17:21:48 +00:00
|
|
|
TFormatType = ( ftBinary, ftSoap, ftXmlRPC, ftJSON_10, ftJSON_11 );
|
2007-06-28 23:33:38 +00:00
|
|
|
var
|
|
|
|
TransportType : TTransportType;
|
|
|
|
FormatValue : TFormatType;
|
|
|
|
procedure CreateProxy();
|
2007-05-05 19:05:01 +00:00
|
|
|
const ADDRESS_MAP : array[TTransportType] of string = (
|
|
|
|
'LIB:FileName=..\library_server\lib_server.dll;target=UserService',
|
2007-12-29 00:58:19 +00:00
|
|
|
//'LIB:FileName=C:\Programmes\D7\etatcivil\partages\wst\samples\library_server\lib_server.dll;target=UserService',
|
2007-07-20 20:26:40 +00:00
|
|
|
//'TCP:Address=172.16.82.31;Port=1234;target=UserService',
|
2007-05-05 19:05:01 +00:00
|
|
|
'TCP:Address=127.0.0.1;Port=1234;target=UserService',
|
2008-12-17 21:29:09 +00:00
|
|
|
//'http:Address=http://127.0.0.1:8888/wst/services/lib_server/UserService'
|
2010-01-29 15:30:24 +00:00
|
|
|
'http:Address=http://127.0.0.1:8080/wst/services/UserService'
|
2007-05-05 19:05:01 +00:00
|
|
|
);
|
2007-12-29 17:21:48 +00:00
|
|
|
FORMAT_MAP : array[TFormatType] of string =( 'binary', 'soap', 'xmlrpc', 'json', 'json' );
|
2007-05-05 19:05:01 +00:00
|
|
|
var
|
2007-12-29 17:21:48 +00:00
|
|
|
buffTransport, buffFormat : string;
|
2007-05-05 19:05:01 +00:00
|
|
|
begin
|
2007-06-28 23:33:38 +00:00
|
|
|
if ( TransportType = ttHTTP ) then
|
2007-12-29 17:21:48 +00:00
|
|
|
buffTransport := Format('%s/?format=%s',[ADDRESS_MAP[TransportType],FORMAT_MAP[FormatValue]])
|
2007-06-28 23:33:38 +00:00
|
|
|
else
|
2007-12-29 17:21:48 +00:00
|
|
|
buffTransport := ADDRESS_MAP[TransportType];
|
2007-06-28 23:33:38 +00:00
|
|
|
if ( TransportType = ttLibrary ) then
|
2007-12-29 17:21:48 +00:00
|
|
|
buffTransport := StringReplace(buffTransport,'\',DirectorySeparator,[rfReplaceAll, rfIgnoreCase]);
|
|
|
|
buffFormat := FORMAT_MAP[FormatValue] + ':';
|
|
|
|
if ( FormatValue = ftJSON_11 ) then
|
|
|
|
buffFormat := Format('%sversion=%s',[buffFormat,'1.1']);
|
2007-05-05 19:05:01 +00:00
|
|
|
UserServiceInst := TUserService_Proxy.Create(
|
|
|
|
'UserService',
|
2007-12-29 17:21:48 +00:00
|
|
|
buffFormat,
|
|
|
|
buffTransport
|
2007-05-05 19:05:01 +00:00
|
|
|
);
|
|
|
|
end;
|
|
|
|
|
2007-06-28 23:33:38 +00:00
|
|
|
procedure ReadTransportType();
|
2007-05-05 19:05:01 +00:00
|
|
|
var
|
|
|
|
buff : string;
|
|
|
|
begin
|
|
|
|
WriteLn();
|
|
|
|
WriteLn('Select a transport protocol : ');
|
|
|
|
WriteLn(' L : Library, the lib_server project must have been built');
|
|
|
|
WriteLn(' T : TCP, the tcp_server must have been built');
|
|
|
|
WriteLn(' H : HTTP, the http_server must have been built');
|
|
|
|
WriteLn();
|
|
|
|
Write('Your selection : ');
|
|
|
|
while True do begin
|
|
|
|
ReadLn(buff);
|
|
|
|
buff := UpperCase(Trim(buff));
|
|
|
|
if ( Length(buff) > 0 ) and ( buff[1] in ['L','T', 'H'] ) then begin
|
|
|
|
case buff[1] of
|
2007-06-28 23:33:38 +00:00
|
|
|
'L' : TransportType := ttLibrary;
|
|
|
|
'T' : TransportType := ttTCP;
|
|
|
|
'H' : TransportType := ttHTTP;
|
|
|
|
end;
|
|
|
|
Break;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure ReadFormatType();
|
|
|
|
var
|
|
|
|
buff : string;
|
|
|
|
begin
|
|
|
|
WriteLn();
|
|
|
|
WriteLn('Select a messaging format : ');
|
|
|
|
WriteLn(' B : binary ( binary_formatter.pas )');
|
2007-12-29 17:21:48 +00:00
|
|
|
WriteLn(' J : JSON-RPC 1.0 ( json_formatter.pas )');
|
|
|
|
WriteLn(' K : JSON-RPC 1.1 ( json_formatter.pas )');
|
2007-06-28 23:33:38 +00:00
|
|
|
WriteLn(' S : soap ( soap_formatter.pas )');
|
|
|
|
WriteLn(' X : XmlRpc ( xmlrpc_formatter.pas )');
|
|
|
|
WriteLn();
|
|
|
|
Write('Your selection : ');
|
|
|
|
while True do begin
|
|
|
|
ReadLn(buff);
|
|
|
|
buff := UpperCase(Trim(buff));
|
2007-12-29 17:21:48 +00:00
|
|
|
if ( Length(buff) > 0 ) and ( buff[1] in ['B', 'J', 'K', 'S', 'X'] ) then begin
|
2007-06-28 23:33:38 +00:00
|
|
|
case buff[1] of
|
|
|
|
'B' : FormatValue := ftBinary;
|
2007-12-29 17:21:48 +00:00
|
|
|
'J' : FormatValue := ftJSON_10;
|
|
|
|
'K' : FormatValue := ftJSON_11;
|
2007-06-28 23:33:38 +00:00
|
|
|
'S' : FormatValue := ftSoap;
|
|
|
|
'X' : FormatValue := ftXmlRPC;
|
2007-05-05 19:05:01 +00:00
|
|
|
end;
|
|
|
|
Break;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
var
|
|
|
|
strBuffer : string;
|
|
|
|
begin
|
2007-07-14 23:17:03 +00:00
|
|
|
{$IFDEF WINDOWS}
|
|
|
|
CoInitialize(nil);
|
|
|
|
try
|
|
|
|
{$ENDIF}
|
2008-01-08 17:26:19 +00:00
|
|
|
{$IF DECLARED(SetHeapTraceOutput)}
|
|
|
|
SetHeapTraceOutput('heaptrace.txt');
|
|
|
|
{$IFEND}
|
2007-07-14 23:17:03 +00:00
|
|
|
SYNAPSE_RegisterTCP_Transport();
|
|
|
|
SYNAPSE_RegisterHTTP_Transport();
|
2009-05-25 16:13:54 +00:00
|
|
|
// INDY_RegisterTCP_Transport();
|
|
|
|
// INDY_RegisterHTTP_Transport();
|
|
|
|
// ICS_RegisterTCP_Transport();
|
|
|
|
// ICS_RegisterHTTP_Transport();
|
2007-07-14 23:17:03 +00:00
|
|
|
LIB_Register_Transport();
|
|
|
|
WriteLn('Sample Application using Web Services Toolkit');
|
|
|
|
ReadFormatType();
|
|
|
|
ReadTransportType();
|
|
|
|
CreateProxy();
|
|
|
|
WriteLn('Menu :');
|
|
|
|
WriteLn(' L : Show the user list');
|
|
|
|
WriteLn(' A : Add a new user');
|
|
|
|
WriteLn(' U : Update a user');
|
|
|
|
WriteLn(' D : Delete a user');
|
|
|
|
WriteLn(' F : Find a new');
|
|
|
|
WriteLn(' C : Change the communication protocol');
|
|
|
|
WriteLn(' Z : Change the messaging format');
|
|
|
|
WriteLn(' X : Exit');
|
|
|
|
WriteLn();
|
|
|
|
Write('Choose a item : ');
|
|
|
|
while True do begin
|
|
|
|
strBuffer := '';
|
|
|
|
ReadLn(strBuffer);
|
|
|
|
strBuffer := UpperCase(Trim(strBuffer));
|
|
|
|
if ( Length(strBuffer) > 0 ) then begin
|
|
|
|
case strBuffer[1] of
|
|
|
|
'L' : HandleShowAll();
|
|
|
|
'A' : HandleAdd(atAdd);
|
|
|
|
'U' : HandleAdd(atUpdate);
|
|
|
|
'D' : HandleDeleteUser();
|
|
|
|
'F' : HandleFindUser();
|
|
|
|
'C' :
|
|
|
|
begin
|
|
|
|
ReadTransportType();
|
|
|
|
CreateProxy();
|
|
|
|
end;
|
|
|
|
'Z' :
|
|
|
|
begin
|
|
|
|
ReadFormatType();
|
|
|
|
CreateProxy();
|
|
|
|
end;
|
|
|
|
'X' : Break;
|
|
|
|
end;
|
|
|
|
WriteLn();
|
|
|
|
Write('Choose a item : ');
|
2007-05-05 19:05:01 +00:00
|
|
|
end;
|
|
|
|
end;
|
2007-07-14 23:17:03 +00:00
|
|
|
{$IFDEF WINDOWS}
|
|
|
|
finally
|
|
|
|
CoUninitialize();
|
2007-05-05 19:05:01 +00:00
|
|
|
end;
|
2007-07-14 23:17:03 +00:00
|
|
|
{$ENDIF}
|
2007-05-05 19:05:01 +00:00
|
|
|
end.
|
|
|
|
|