| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | /**  @file  @author Stefan Frings*/#include "httpsession.h"#include <QDateTime>#include <QUuid>using namespace stefanfrings;HttpSession::HttpSession(bool canStore){    if (canStore)    {        dataPtr=new HttpSessionData();        dataPtr->refCount=1;        dataPtr->lastAccess=QDateTime::currentMSecsSinceEpoch();        dataPtr->id=QUuid::createUuid().toString().toLocal8Bit();#ifdef SUPERVERBOSE        qDebug("HttpSession: (constructor) new session %s with refCount=1",dataPtr->id.constData());#endif    }    else    {        dataPtr=nullptr;    }}HttpSession::HttpSession(const HttpSession& other){    dataPtr=other.dataPtr;    if (dataPtr)    {        dataPtr->lock.lockForWrite();        dataPtr->refCount++;#ifdef SUPERVERBOSE        qDebug("HttpSession: (constructor) copy session %s refCount=%i",dataPtr->id.constData(),dataPtr->refCount);#endif        dataPtr->lock.unlock();    }}HttpSession& HttpSession::operator= (const HttpSession& other){    HttpSessionData* oldPtr=dataPtr;    dataPtr=other.dataPtr;    if (dataPtr)    {        dataPtr->lock.lockForWrite();        dataPtr->refCount++;#ifdef SUPERVERBOSE        qDebug("HttpSession: (operator=) session %s refCount=%i",dataPtr->id.constData(),dataPtr->refCount);#endif        dataPtr->lastAccess=QDateTime::currentMSecsSinceEpoch();        dataPtr->lock.unlock();    }    if (oldPtr)    {        int refCount;        oldPtr->lock.lockForWrite();        refCount=--oldPtr->refCount;#ifdef SUPERVERBOSE        qDebug("HttpSession: (operator=) session %s refCount=%i",oldPtr->id.constData(),oldPtr->refCount);#endif        oldPtr->lock.unlock();        if (refCount==0)        {            qDebug("HttpSession: deleting old data");            delete oldPtr;        }    }    return *this;}HttpSession::~HttpSession(){    if (dataPtr) {        int refCount;        dataPtr->lock.lockForWrite();        refCount=--dataPtr->refCount;#ifdef SUPERVERBOSE        qDebug("HttpSession: (destructor) session %s refCount=%i",dataPtr->id.constData(),dataPtr->refCount);#endif        dataPtr->lock.unlock();        if (refCount==0)        {            qDebug("HttpSession: deleting data");            delete dataPtr;        }    }}const QByteArray& HttpSession::getId() const{    static const QByteArray nullId;    return (dataPtr) ? dataPtr->id : nullId;}bool HttpSession::isNull() const {    return dataPtr==nullptr;}void HttpSession::set(const QByteArray& key, const QVariant& value){    if (dataPtr)    {        dataPtr->lock.lockForWrite();        dataPtr->values.insert(key,value);        dataPtr->lock.unlock();    }}void HttpSession::remove(const QByteArray& key){    if (dataPtr)    {        dataPtr->lock.lockForWrite();        dataPtr->values.remove(key);        dataPtr->lock.unlock();    }}QVariant HttpSession::get(const QByteArray& key) const{    QVariant value;    if (dataPtr)    {        dataPtr->lock.lockForRead();        value=dataPtr->values.value(key);        dataPtr->lock.unlock();    }    return value;}bool HttpSession::contains(const QByteArray& key) const{    bool found=false;    if (dataPtr)    {        dataPtr->lock.lockForRead();        found=dataPtr->values.contains(key);        dataPtr->lock.unlock();    }    return found;}QMap<QByteArray,QVariant> HttpSession::getAll() const{    QMap<QByteArray,QVariant> values;    if (dataPtr)    {        dataPtr->lock.lockForRead();        values=dataPtr->values;        dataPtr->lock.unlock();    }    return values;}qint64 HttpSession::getLastAccess() const{    qint64 value=0;    if (dataPtr)    {        dataPtr->lock.lockForRead();        value=dataPtr->lastAccess;        dataPtr->lock.unlock();    }    return value;}void HttpSession::setLastAccess(){    if (dataPtr)    {        dataPtr->lock.lockForWrite();        dataPtr->lastAccess=QDateTime::currentMSecsSinceEpoch();        dataPtr->lock.unlock();    }}
 |