|
<< Click to Display Table of Contents >> Navigation: Demos > 15 > Delphi > MultipleSessionsNoCookie > ServerController.pas |
unit ServerController;
interface
uses
SysUtils, Classes, IWServerControllerBase, IWBaseForm, HTTPApp,
// For OnNewSession Event
UserSessionUnit, IWApplication, IWAppForm, IW.Browser.Browser,
IW.HTTP.Request, IW.HTTP.Reply;
type
TIWServerController = class(TIWServerControllerBase)
procedure IWServerControllerBaseNewSession(ASession: TIWApplication);
procedure IWServerControllerBaseCreate(Sender: TObject);
procedure IWServerControllerBaseDestroy(Sender: TObject);
procedure IWServerControllerBaseConfig(Sender: TObject);
procedure IWServerControllerBaseBackButton(var VResyncInfo: TIWResyncInfo);
private
{ Private declarations }
FUserIds: TStringList;
procedure AddSampleUsers;
public
{ Public declarations }
property UserIds: TStringList read FUserIds;
end;
function UserSession: TIWUserSession;
function IWServerController: TIWServerController;
implementation
{$R *.dfm}
uses
IWInit, IWGlobal,
IW.Common.SysTools,
uUserList, // sample data structure which takes care of user login
IW.Content.Handlers, IW.Content.Base, IW.Content.Form, IWForm; // Content handler support
function IWServerController: TIWServerController;
begin
Result := TIWServerController(GServerController);
end;
function UserSession: TIWUserSession;
begin
Result := TIWUserSession(WebApplication.Data);
end;
{ TIWServerController }
procedure TIWServerController.IWServerControllerBaseNewSession(
ASession: TIWApplication);
begin
ASession.Data := TIWUserSession.Create(nil, ASession);
end;
procedure TIWServerController.IWServerControllerBaseCreate(Sender: TObject);
begin
FUserIds := TStringList.Create;
end;
procedure TIWServerController.IWServerControllerBaseDestroy(Sender: TObject);
begin
FUserIds.Free;
end;
procedure TIWServerController.IWServerControllerBaseConfig(Sender: TObject);
function _CreateContentHandler(const aFormClassName: string): TContentBase;
begin
Result := TContentForm.Create(aFormClassName); // form class name is used instead of form class!
Result.RequiresSession := True;
Result.CanStartSession := True;
end;
var
contentHandler: TContentForm;
begin
AddSampleUsers;
THandlers.Add('', 'table1', _CreateContentHandler('TFrmView1'));
THandlers.Add('', 'table2', _CreateContentHandler('TFrmView2'));
end;
procedure TIWServerController.AddSampleUsers;
var
i: Integer;
User: TUser;
begin
// not using a critical section because this runs from the main thread, once.
// If you modify this code, have this in mind!
for i := 1 to 10 do
begin
User := TUser.Create;
User.Id := NewGuidEncode64; // unique ID for each user
User.Name := 'User' + IntToStr(i);
User.Pw := 'user' + IntToStr(i);
TUserList.Instance.Add(User);
end;
end;
procedure TIWServerController.IWServerControllerBaseBackButton(var VResyncInfo: TIWResyncInfo);
begin
VResyncInfo.ExecuteForm := True;
VResyncInfo.SetActiveForm := True;
end;
initialization
TIWServerController.SetServerControllerClass;
end.