mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|   @file
 | |
|   @author Stefan Frings
 | |
| */
 | |
| 
 | |
| #ifndef HTTPSESSION_H
 | |
| #define HTTPSESSION_H
 | |
| 
 | |
| #include <QByteArray>
 | |
| #include <QVariant>
 | |
| #include <QReadWriteLock>
 | |
| #include "httpglobal.h"
 | |
| 
 | |
| namespace stefanfrings {
 | |
| 
 | |
| /**
 | |
|   This class stores data for a single HTTP session.
 | |
|   A session can store any number of key/value pairs. This class uses implicit
 | |
|   sharing for read and write access. This class is thread safe.
 | |
|   @see HttpSessionStore should be used to create and get instances of this class.
 | |
| */
 | |
| 
 | |
| class DECLSPEC HttpSession {
 | |
| 
 | |
| public:
 | |
| 
 | |
|     /**
 | |
|       Constructor.
 | |
|       @param canStore The session can store data, if this parameter is true.
 | |
|       Otherwise all calls to set() and remove() do not have any effect.
 | |
|      */
 | |
|     HttpSession(bool canStore=false);
 | |
| 
 | |
|     /**
 | |
|       Copy constructor. Creates another HttpSession object that shares the
 | |
|       data of the other object.
 | |
|     */
 | |
|     HttpSession(const HttpSession& other);
 | |
| 
 | |
|     /**
 | |
|       Copy operator. Detaches from the current shared data and attaches to
 | |
|       the data of the other object.
 | |
|     */
 | |
|     HttpSession& operator= (const HttpSession& other);
 | |
| 
 | |
| 
 | |
|     /**
 | |
|       Destructor. Detaches from the shared data.
 | |
|     */
 | |
|     virtual ~HttpSession();
 | |
| 
 | |
|     /** Get the unique ID of this session. This method is thread safe. */
 | |
|     QByteArray getId() const;
 | |
| 
 | |
|     /**
 | |
|       Null sessions cannot store data. All calls to set() and remove() 
 | |
|       do not have any effect.This method is thread safe.
 | |
|     */
 | |
|     bool isNull() const;
 | |
| 
 | |
|     /** Set a value. This method is thread safe. */
 | |
|     void set(const QByteArray& key, const QVariant& value);
 | |
| 
 | |
|     /** Remove a value. This method is thread safe. */
 | |
|     void remove(const QByteArray& key);
 | |
| 
 | |
|     /** Get a value. This method is thread safe. */
 | |
|     QVariant get(const QByteArray& key) const;
 | |
| 
 | |
|     /** Check if a key exists. This method is thread safe. */
 | |
|     bool contains(const QByteArray& key) const;
 | |
| 
 | |
|     /**
 | |
|       Get a copy of all data stored in this session.
 | |
|       Changes to the session do not affect the copy and vice versa.
 | |
|       This method is thread safe.
 | |
|     */
 | |
|     QMap<QByteArray,QVariant> getAll() const;
 | |
| 
 | |
|     /**
 | |
|       Get the timestamp of last access. That is the time when the last
 | |
|       HttpSessionStore::getSession() has been called.
 | |
|       This method is thread safe.
 | |
|     */
 | |
|     qint64 getLastAccess() const;
 | |
| 
 | |
|     /**
 | |
|       Set the timestamp of last access, to renew the timeout period.
 | |
|       Called by  HttpSessionStore::getSession().
 | |
|       This method is thread safe.
 | |
|     */
 | |
|     void setLastAccess();
 | |
| 
 | |
| private:
 | |
| 
 | |
|     struct HttpSessionData {
 | |
| 
 | |
|         /** Unique ID */
 | |
|         QByteArray id;
 | |
| 
 | |
|         /** Timestamp of last access, set by the HttpSessionStore */
 | |
|         qint64 lastAccess;
 | |
| 
 | |
|         /** Reference counter */
 | |
|         int refCount;
 | |
| 
 | |
|         /** Used to synchronize threads */
 | |
|         QReadWriteLock lock;
 | |
| 
 | |
|         /** Storage for the key/value pairs; */
 | |
|         QMap<QByteArray,QVariant> values;
 | |
| 
 | |
|     };
 | |
| 
 | |
|     /** Pointer to the shared data. */
 | |
|     HttpSessionData* dataPtr;
 | |
| 
 | |
| };
 | |
| 
 | |
| } // end of namespace
 | |
| 
 | |
| #endif // HTTPSESSION_H
 |