1
0
KF2-Dev-Scripts/WebAdmin/Classes/SessionHandler.uc
2020-12-13 18:01:13 +03:00

79 lines
1.5 KiB
Ucode

/**
* Default session handler implementation
*
* Copyright 2008 Epic Games, Inc. All Rights Reserved
*
* @author Michiel 'elmuerte' Hendriks
*/
class SessionHandler extends Object implements(ISessionHandler) dependson(WebAdminUtils);
`define WITH_BROKEN_RAND
struct SessionKV
{
var string id;
var Session s;
};
var protected array<SessionKV> sessions;
function ISession create()
{
local SessionKV skv;
`if(`WITH_BROKEN_RAND)
local WebAdminUtils.DateTime dt;
local int i;
`endif
`if(`WITH_BROKEN_RAND)
// seed the broken rand function
class'WebAdminUtils'.static.getDateTime(dt, timestamp());
for (i = 0; i < dt.second+dt.minute+dt.day; i++)
{
rand(0xffff);
}
`endif
skv.s = new(Self) class'Session';
skv.id = skv.s.getId();
sessions.AddItem(skv);
//`Log("Created a new session with id: "$skv.id,,'WebAdmin');
return skv.s;
}
function ISession get(string id)
{
local int idx;
idx = sessions.Find('id', id);
if (idx > -1)
{
//`Log("Found session with id: "$id,,'WebAdmin');
return sessions[idx].s;
}
return none;
}
function bool destroy(ISession session)
{
local int idx;
idx = sessions.Find('s', Session(session));
if (idx > -1)
{
session.reset();
//`Log("Destroyed session with id: "$sessions[idx].id,,'WebAdmin');
sessions.remove(idx, 1);
return true;
}
return false;
}
function destroyAll()
{
local int i;
for (i = 0; i < sessions.length; i++)
{
sessions[i].s.reset();
}
sessions.Remove(0, sessions.Length);
}