6 \brief PythonHTTP non-inline non-template implementation */
8 //#include "PythonHTTP.hh"
9 //#include "PythonHTTP.ih"
12 #include <boost/python.hpp>
13 #include <QNetworkAccessManager>
14 #include <QNetworkRequest>
15 #include <QNetworkReply>
18 //#include "PythonHTTP.mpp"
20 ///////////////////////////////cc.p////////////////////////////////////////
22 namespace py = boost::python;
29 void post(QString const & url, QByteArray const & data, boost::python::object callback);
30 void get(QString const & url, boost::python::object callback);
33 QNetworkAccessManager mgr_;
36 class ReplyHandler : public QObject
40 explicit ReplyHandler(boost::python::object callback, QNetworkReply * reply);
41 virtual ~ReplyHandler();
47 boost::python::object callback_;
48 QNetworkReply * reply_;
51 class TimeoutHandler : public QObject
55 explicit TimeoutHandler(boost::python::object callback, unsigned msecs);
61 boost::python::object callback_;
65 void timeout(boost::python::object callback, unsigned msecs)
67 new TimeoutHandler(callback, msecs);
71 prefix_ void Manager::post(QString const & url, QByteArray const & data,
72 boost::python::object callback)
75 req.setUrl(QUrl(url));
76 QNetworkReply * reply (mgr_.post(req, data));
77 new ReplyHandler(callback, reply);
80 prefix_ void Manager::get(QString const & url, boost::python::object callback)
83 req.setUrl(QUrl(url));
84 QNetworkReply * reply (mgr_.get(req));
85 new ReplyHandler(callback, reply);
88 prefix_ ReplyHandler::ReplyHandler(boost::python::object callback, QNetworkReply * reply)
89 : callback_ (callback), reply_ (reply)
91 connect(reply_,SIGNAL(finished()),this,SLOT(finished()));
94 prefix_ ReplyHandler::~ReplyHandler()
97 prefix_ void ReplyHandler::finished()
99 callback_(reply_->error() == QNetworkReply::NoError, reply_->readAll());
100 reply_->deleteLater();
104 prefix_ TimeoutHandler::TimeoutHandler(boost::python::object callback, unsigned msecs)
105 : callback_ (callback)
107 timer_.setSingleShot(true);
109 connect(&timer_, SIGNAL(timeout()), this, SLOT(timeout()));
112 prefix_ void TimeoutHandler::timeout()
118 BOOST_PYTHON_MODULE(_httpapi)
120 py::class_<Manager, boost::noncopyable>("Manager")
121 .def("post", &Manager::post)
122 .def("get", &Manager::get)
125 py::def("timeout", &timeout);
128 #include "PythonHTTP.moc"
130 ///////////////////////////////cc.e////////////////////////////////////////
132 //#include "PythonHTTP.mpp"
137 // indent-tabs-mode: nil