winix/core/sessioncontainer.h

76 lines
1.5 KiB
C++
Executable File

/*
* This file is a part of Winix
* and is not publicly distributed
*
* Copyright (c) 2008-2010, Tomasz Sowa
* All rights reserved.
*
*/
#ifndef headerfilecmslucoresessioncontainer
#define headerfilecmslucoresessioncontainer
#include <list>
#include <map>
#include <ctime>
#include "session.h"
#include "lastcontainer.h"
#include "request.h"
#include "basethread.h"
#include "config.h"
class SessionContainer : public BaseThread
{
public:
// when deleting Sessions you should set request.session into the session object
// this allows to delete plugins session data
// because a session object has plugin_data object
// and in its destructor the plugin.Call(WINIX_SESSION_REMOVE) is called
typedef std::list<Session> Table;
typedef Table::iterator Iterator;
typedef std::map<long, Iterator> IndexId;
SessionContainer();
void SetRequest(Request * prequest);
void SetConfig(Config * pconfig);
void SetLastContainer(LastContainer * plast_container);
void Clear();
size_t Size();
Iterator Begin();
Iterator End();
Session & Back();
bool PushBack(const Session & session);
Iterator FindById(long);
private:
LastContainer * last_container;
Table table;
IndexId index_id;
Request * request;
Config * config;
//void DelFromIdIndex(Iterator iter);
virtual void Work();
bool IsSessionOutdated(const Session & s) const;
void DeleteSession(IndexId::iterator i);
// in FreeBSD implementation (GCC) list::size() has linear complexity
// so we use our own table_size with O(1)
size_t table_size;
};
#endif