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);
32 QNetworkAccessManager mgr_;
35 class ReplyHandler : public QObject
39 explicit ReplyHandler(boost::python::object callback, QNetworkReply * reply);
40 virtual ~ReplyHandler();
46 boost::python::object callback_;
47 QNetworkReply * reply_;
50 class TimeoutHandler : public QObject
54 explicit TimeoutHandler(boost::python::object callback, unsigned msecs);
60 boost::python::object callback_;
64 void timeout(boost::python::object callback, unsigned msecs)
66 new TimeoutHandler(callback, msecs);
70 prefix_ void Manager::post(QString const & url, QByteArray const & data,
71 boost::python::object callback)
74 req.setUrl(QUrl(url));
75 QNetworkReply * reply (mgr_.post(req, data));
76 new ReplyHandler(callback, reply);
79 prefix_ ReplyHandler::ReplyHandler(boost::python::object callback, QNetworkReply * reply)
80 : callback_ (callback), reply_ (reply)
82 connect(reply_,SIGNAL(finished()),this,SLOT(finished()));
85 prefix_ ReplyHandler::~ReplyHandler()
88 prefix_ void ReplyHandler::finished()
90 callback_(reply_->error() == QNetworkReply::NoError, reply_->readAll());
91 reply_->deleteLater();
95 prefix_ TimeoutHandler::TimeoutHandler(boost::python::object callback, unsigned msecs)
96 : callback_ (callback)
98 timer_.setSingleShot(true);
100 connect(&timer_, SIGNAL(timeout()), this, SLOT(timeout()));
103 prefix_ void TimeoutHandler::timeout()
109 BOOST_PYTHON_MODULE(_httpapi)
111 py::class_<Manager, boost::noncopyable>("Manager")
112 .def("post", &Manager::post)
115 py::def("timeout", &timeout);
118 #include "PythonHTTP.moc"
120 ///////////////////////////////cc.e////////////////////////////////////////
122 //#include "PythonHTTP.mpp"
127 // indent-tabs-mode: nil