00001
00002
00003
00004
00005
00006
00007
00008 class SessionMaster extends Object transient;
00009
00010 var array<Session> Sessions;
00011
00012
00013 function Session getSession(string hash, optional bool bCreateNew)
00014 {
00015 local int i;
00016
00017 for (i = 0; i < sessions.length; i++) if (Sessions[i].GetHash() == hash) return Sessions[i];
00018 if (bCreateNew) return createSession();
00019 return none;
00020 }
00021
00022
00023 function bool destroySession(Session session)
00024 {
00025 local int i;
00026 local string Hash;
00027
00028 Hash = Session.GetHash();
00029 for (i = 0; i < sessions.length; i++)
00030 if (Sessions[i].GetHash() == Hash)
00031 {
00032
00033 Sessions.Remove(i, 1);
00034 return true;
00035 }
00036
00037 return false;
00038 }
00039
00040
00041 private function Session createSession()
00042 {
00043 local Session TempS;
00044
00045 TempS = new class'Session';
00046 if (TempS.SetHash(CreateSessionHash())) Sessions[Sessions.Length] = TempS;
00047
00048 return TempS;
00049 }
00050
00051
00052 function string createSessionHash()
00053 {
00054 local int i;
00055 local string temphash;
00056
00057 do {
00058 temphash = Right("00000"$string(Rand(65536)), 5)$Right("00000"$string(Rand(65536)), 5);
00059 for (i = 0; i < sessions.length; i++)
00060 if (Sessions[i].GetHash() == temphash) break;
00061 } until (i == sessions.length);
00062 return temphash;
00063 }