unit UserAgent; interface uses SysUtils, ObserverPattern, ApplicationContext, UserServerService; // Resource strings are stored as resources and linked into the executable or // library so that they can be modified without recompiling the program. resourcestring USER_SERVER_URL = 'http://cacheaccept2010:57772/csp/dev1/WS.Sys.Toegang.UserServer.cls'; APPLICATION_NAME = 'vhintra'; DOMAIN_NAME = '1'; type TUserAgent = class private FUserServerSoap: UserServerService.UserServerSoap; procedure RegistreerLoginGegevens(UserContext: TUserContext; pxLogInObj: pxLogIn); procedure RegistreerMislukteLogin(UserContext: TUserContext; pxStatusObj: pxStatus); procedure RegistreerLogout(UserContext: TUserContext); procedure RegistreerMislukteLogout(UserContext: TUserContext; pxStatusObj: pxStatus); public Constructor Create(); procedure GebruikerAanmelden(GebruikersNaam: string; Wachtwoord: string; UserContext: TUserContext); procedure GebruikerAfmelden(UserContext: TUserContext); end; implementation constructor TUserAgent.Create(); begin FUserServerSoap := UserServerService.GetUserServerSoap(false, USER_SERVER_URL, nil); end; procedure TUserAgent.GebruikerAanmelden(GebruikersNaam: string; Wachtwoord: string; UserContext: TUserContext); var LogInData: UserServerService.LogIn; LogInResponseObj: UserServerService.LogInResponse; begin LogInData := nil; LogInResponseObj := nil; try // Request LogInData := UserServerService.LogIn.Create(); LogInData.Application_ := APPLICATION_NAME; LogInData.GebruikersNaam := GebruikersNaam; LogInData.Wachtwoord := Wachtwoord; LogInData.Domein := DOMAIN_NAME; LogInData.pxLogIn := nil; // Ongebruikt LogInResponseObj := FUserServerSoap.LogIn(LogInData); // Response if LogInResponseObj.LogInResult = nil then begin // Gelukt RegistreerLoginGegevens(UserContext, LogInResponseObj.pxLogIn); end else begin // Mislukt RegistreerMislukteLogin(UserContext, LogInResponseObj.LogInResult); end; finally LogInData.Free(); LogInResponseObj.Free(); end; end; procedure TUserAgent.RegistreerLoginGegevens(UserContext: TUserContext; pxLogInObj: pxLogIn); begin // Andere velden juist zetten UserContext.IsOK := True; UserContext.ErrorMessage := ''; UserContext.InternalErrorMessage := ''; UserContext.SessionKey := pxLogInObj.SessionKey; UserContext.GebruikersNaam := pxLogInObj.GebruikersNaam; UserContext.NotifyChanged(); end; procedure TUserAgent.RegistreerMislukteLogin(UserContext: TUserContext; pxStatusObj: pxStatus); begin // Ander velden leegmaken UserContext.SessionKey := ''; UserContext.GebruikersNaam := ''; UserContext.IsOK := pxStatusObj.IsOK; UserContext.ErrorMessage := pxStatusObj.Message_; UserContext.InternalErrorMessage := pxStatusObj.InternalMessage; UserContext.NotifyChanged(); end; procedure TUserAgent.GebruikerAfmelden(UserContext: TUserContext); var LogOutData: UserServerService.LogOut; LogOutResponseObj: UserServerService.LogOutResponse; begin LogOutData := nil; LogOutResponseObj := nil; try // Skip als de gebruikers nooit was ingelogd if UserContext.SessionKey = '' then exit; // Request LogOutData := UserServerService.LogOut.Create(); LogOutData.SessionKey := UserContext.SessionKey; LogOutResponseObj := FUserServerSoap.LogOut(LogOutData); // Response if LogOutResponseObj.LogOutResult = nil then begin // Gelukt RegistreerLogout(UserContext); end else begin // Mislukt RegistreerMislukteLogout(UserContext, LogOutResponseObj.LogOutResult); end; finally LogOutData.Free(); LogOutResponseObj.Free(); end; end; procedure TUserAgent.RegistreerLogout(UserContext: TUserContext); begin UserContext.IsOK := True; UserContext.ErrorMessage := ''; UserContext.InternalErrorMessage := ''; UserContext.SessionKey := ''; UserContext.GebruikersNaam := ''; UserContext.NotifyChanged(); end; procedure TUserAgent.RegistreerMislukteLogout(UserContext: TUserContext; pxStatusObj: pxStatus); begin UserContext.IsOK := pxStatusObj.IsOK; UserContext.ErrorMessage := pxStatusObj.Message_; UserContext.InternalErrorMessage := pxStatusObj.InternalMessage; UserContext.NotifyChanged(); end; end.