crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSessionManager commitData
thanatos_404
  опции профиля:
сообщение 29.6.2012, 13:19
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 8.4.2010
Пользователь №: 1609

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени! У меня есть 2 вопроса.
1) при логауте commitData вызывается 2 раза
2) в commitData вызывается метод, который отправляет запрос к веб-серверу для завершения сессии. И после начала выполнения post'a приложение закрывается, не дождавшись ответа от сервера. Куда смотреть в этом случае?
код TBApplication
class TBApplication : public QtSingleApplication
{
    Q_OBJECT
public:
    TBApplication(int argc, char *argv[])
        :QtSingleApplication(argc,argv)
    {
    }

    void commitData(QSessionManager &sm)
    {
        qDebug()<<"TBApplication::commitData";
        if(sm.isPhase2())
        {
            sm.requestPhase2();
            qDebug()<<"TBApplication::Phase 2";
        }
        if(User::instance()->sessionId()!="")
        {
            qDebug()<<"TBApplication::Session not clear";
            ApplicationController::kill();
            sm.requestPhase2();
        }
        else
        {
            qDebug()<<"TBApplication::Session is clear";
            return;
        }
    }
};


В методе kill вызываетсся метод terminateSession
session->terminateSession(User::instance()->sessionId(),true);

Кот метода terminateSession
 QNetworkRequest request;
    QMap<QString,QVariant> params;
    this->quit = quit;
    QByteArray data;
    params.insert("id",session_id);
    request = performRequest("terminate", params, data);
    QNetworkReply *reply = sslManager->post(request,data);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 29.6.2012, 13:39
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Попробуйте в конец функции terminateSession добавить вот такое.
QEventLoop loop;
    connect(this, SIGNAL(rejected()), &loop, SLOT(quit()));
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();

    if (reply->isFinished())
    {
        ...
    }


Сообщение отредактировал sidsukana - 29.6.2012, 13:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 8:29