rewritten: sessions management
(Session, SessionContainer, SessionManager) now a Session object don't copy all fields in its copy constructor (only id) the rest fields are set after the object is inserted in SessionContainer added: after successfully login a session id is changed added: plugin.Call() methods with a first argument a pointer to a Session object git-svn-id: svn://ttmath.org/publicrep/winix/trunk@823 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
@@ -51,33 +51,19 @@ bool SessionParser::Parse(SessionContainer & container)
|
||||
file format, each rows:
|
||||
session_id(long) user_id(long) remember_me(0|1) time(long) last_time(long)
|
||||
*/
|
||||
|
||||
long user_id;
|
||||
|
||||
session.Clear();
|
||||
last = file.get();
|
||||
|
||||
log << log2 << "SP: reading sessions from the session file" << logend;
|
||||
|
||||
while( true )
|
||||
{
|
||||
session.id = ReadLong();
|
||||
long id = ReadLong();
|
||||
|
||||
if( file.eof() )
|
||||
break;
|
||||
|
||||
user_id = ReadLong();
|
||||
session.remember_me = ReadLong();
|
||||
session.time = ReadLong();
|
||||
session.last_time = ReadLong();
|
||||
|
||||
if( MakeSession(user_id) )
|
||||
{
|
||||
users->IncrementLoggedUsers();
|
||||
container.PushBack(session);
|
||||
log << log2 << "SP: read session id: " << session.id << " for user: " << session.puser->name << logend;
|
||||
}
|
||||
|
||||
long user_id = ReadLong();
|
||||
MakeSession(id, user_id, container);
|
||||
SkipLine();
|
||||
}
|
||||
|
||||
@@ -87,22 +73,37 @@ return true;
|
||||
}
|
||||
|
||||
|
||||
bool SessionParser::MakeSession(long user_id)
|
||||
void SessionParser::MakeSession(long id, long user_id, SessionContainer & container)
|
||||
{
|
||||
User * puser = users->GetUser(user_id);
|
||||
|
||||
if( !puser )
|
||||
{
|
||||
log << log1 << "SP: there is no a user with id: " << user_id << " (skipped)" << logend;
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
session.puser = puser;
|
||||
session.new_session = true;
|
||||
session.tm_time = Time(session.time);
|
||||
session.tm_last_time = Time(session.last_time);
|
||||
SessionContainer::Iterator i = container.AddSession(id);
|
||||
|
||||
return true;
|
||||
if( i != container.End() )
|
||||
{
|
||||
i->Clear();
|
||||
i->id = id;
|
||||
i->puser = puser;
|
||||
i->new_session = true;
|
||||
i->remember_me = ReadLong();
|
||||
i->time = ReadLong();
|
||||
i->last_time = ReadLong();
|
||||
i->tm_time = Time(i->time);
|
||||
i->tm_last_time = Time(i->last_time);
|
||||
|
||||
users->IncrementLoggedUsers();
|
||||
log << log2 << "SP: read session id: " << id << " for user: " << puser->name << logend;
|
||||
}
|
||||
else
|
||||
{
|
||||
log << log1 << "SP: session with id: " << id << " already exists (skipping)" << logend;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user