source: SMSSender/lib/libdatatypes/src/synchttp.h @ 67:578192d6fe64

3.0
Last change on this file since 67:578192d6fe64 was 67:578192d6fe64, checked in by Sämy Zehnder <saemy.zehnder@…>, 12 years ago
  • added synchttp
  • backup before removing these diamond interfaces...
File size: 3.1 KB
Line 
1/***************************************************************************
2 *   Copyright (C) 2005 by Iulian M                                        *
3 *   eti@erata.net                                                         *
4 ***************************************************************************/
5#ifndef ETKSYNCHTTP_H
6#define ETKSYNCHTTP_H
7
8#include <QHttp>
9#include <QEventLoop>
10#include <QBuffer>
11
12/**
13 * Provide a synchronous api over QHttp
14 * Uses a QEventLoop to block until the request is completed
15 * @author Iulian M <eti@erata.net>
16*/
17class SyncHTTP: public QHttp
18{
19        Q_OBJECT
20        public:
21                /// structors
22                SyncHTTP( QObject * parent = 0 )
23                :QHttp(parent),requestID(-1),status(false){}
24
25                SyncHTTP( const QString & hostName, quint16 port = 80, QObject * parent = 0 )
26                :QHttp(hostName,port,parent),requestID(-1),status(false){}
27
28                virtual ~SyncHTTP(){}
29
30                /// send GET request and wait until finished
31                bool syncGet ( const QString & path, QIODevice * to = 0 )
32                {
33                        ///connect the requestFinished signal to our finished slot
34                        connect(this,SIGNAL(requestFinished(int,bool)),SLOT(finished(int,bool)));
35                        /// start the request and store the requestID
36                        requestID = get(path, to );
37                        /// block until the request is finished
38                        loop.exec();
39                        /// return the request status
40                        return status;
41                }
42
43                /// send POST request and wait until finished
44                bool syncPost ( const QString & path, QIODevice * data, QIODevice * to = 0 )
45                {
46                        ///connect the requestFinished signal to our finished slot
47                        connect(this,SIGNAL(requestFinished(int,bool)),SLOT(finished(int,bool)));
48                        /// start the request and store the requestID
49                        requestID = post(path, data , to );
50                        /// block until the request is finished
51                        loop.exec();
52                        /// return the request status
53                        return status;
54                }
55
56                bool syncPost ( const QString & path, const QByteArray& data, QIODevice * to = 0 )
57                {
58                        /// create io device from QByteArray
59                        QBuffer buffer;
60                        buffer.setData(data);
61                        return syncPost(path,&buffer,to);
62                }
63
64            bool syncRequest(const QHttpRequestHeader &header, QIODevice *device=0, QIODevice *to=0) {
65            ///connect the requestFinished signal to our finished slot
66            connect(this,SIGNAL(requestFinished(int,bool)),SLOT(finished(int,bool)));
67            /// start the request and store the requestID
68            requestID = request(header, device, to);
69            /// block until the request is finished
70            loop.exec();
71            /// return the request status
72            return status;
73            }
74            bool syncRequest(const QHttpRequestHeader &header, const QByteArray &data, QIODevice *to=0) {
75            /// create io device from QByteArray
76            QBuffer buffer;
77            buffer.setData(data);
78            return syncRequest(header,&buffer,to);
79            }
80
81
82        protected slots:
83                virtual void finished(int idx, bool err)
84                {
85                        /// check to see if it's the request we made
86                        if(idx!=requestID)
87                                return;
88                        /// set status of the request
89                        status = !err;
90                        /// end the loop
91                        loop.exit();
92                }
93
94        private:
95                /// id of current request
96                int requestID;
97                /// error status of current request
98                bool status;
99                /// event loop used to block until request finished
100                QEventLoop loop;
101};
102
103#endif
Note: See TracBrowser for help on using the repository browser.