Название: QNetworkAccessManager. Правильно организовать работу с сетью.
Отправлено: SimpleSunny от Сентябрь 22, 2009, 13:39
Есть программа, которая посылает на сервер различные (GET, HEAD, POST) запросы и в зависимости от ответа сервера выполняет те или иные действия на сервере. Сейчас работа организована как-то так: C++ (Qt) enum TypeRequest{Req1, Req2, Req3}; TypeRequest typeRequest; void finished(QNetworkReply *reply) { switch (typeRequest) { case Req1 : do1(reply); break; case Req2 : do2(reply); break; case Req3 : do3(reply); break; } }
Есть ли более изящные методы организации работы?
Название: Re: QNetworkAccessManager. Правильно организовать работу с сетью.
Отправлено: BRE от Сентябрь 22, 2009, 15:08
Как вариант. C++ (Qt) class BaseRequest : public QObject { Q_OBJECT public: BaseRequest( QNetworkAccessManager *manager, QObject *parent = 0 ); // Запустить запрос bool start() { m_reply = build(); if( !m_reply ) return false; connect( m_reply, SIGNAL( finished() ), SLOT( slotFinished() ) ); return true; } protected: // Создать и выполнить запрос, вернуть объект reply virtual QNetworkReply *build() = 0; // Обработать ответ virtual void processReply( QNetworkReply *reply ) = 0; protected slots: void slotFinished() { processReply( m_reply ); } protected: QNetworkAccessManager *m_manager; QNetworkReply *m_reply; }; class Req1 : public BaseRequest { Q_OBJECT protected: QNetworkReply *build() { return m_manager->get( ... ); } void processReply( QNetworkReply *reply ) { // Обработали запрос } }; class Req2 : public BaseRequest { ... };
Для запуска запроса, нужно создать объект соответсвующего класса, настроить его и запустить start(). Когда будет получен ответ, сам объект запроса обработает его и если нужно разрушит (например вызвав deleteLater).
Название: Re: QNetworkAccessManager. Правильно организовать работу с сетью.
Отправлено: SimpleSunny от Сентябрь 24, 2009, 00:43
СПасибо. БУду вникать.
|