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
 |