![]() |
|
|
![]()
|
|
| nullpoint |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
Всем привет. Подскажите как правильнее сделать.
Есть небольшое приложение. Создаю сокет, авторизуюсь на сервере и отсылаю серверу команду. В зависимости от содержания ответа сервера выполняю действия. Проблема в том, что команда серверу может отсылаться автоматически по срабатыванию таймера, а также при нажатии на кнопку на форме. Если команда отсылается автоматически и в ответе сервера есть необходимые данные выполняются одни действия, а если нажимается кнопка и ответ сервера нас удовлетворяет, то другие. Сейчас реализовал это таким образом: завел глобальную переменную, если нажмается кнопка приравниваю переменную единице, если автоматически отсылается команда - приравниваю двойке. Как более правильно реализовать данный функционал?
Еще хотел бы разобраться с авторизацией и разбором ответа от сервера. Сейчас после авторизации нет проверки прошла ли авторизация успешно. В случае успешной авторизации от сервера приходит ответ Response: Success. Как использовать слот и для разбора ответа на авторизацию и для разбора ответа на команду. Сейчас приходит в голову только такой же вариант с переменной: при отправке команды авторизации приравнивать ее какому-нибудь числу, в слоте смотреть чему она равна и в зависимости от этого делать разбор авторизации или ответа на другую команду, а затем переменную обнулять. Но как я говорил, мне кажется это плохая идея. |
||||
|
|||||
| Vasya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 5.7.2003 Репутация: нет Всего: нет |
Может случиться так, что автоматическая отправка и нажатие кнопки совпадут и глобальная переменная тут теряет смысл. Мне кажется, при срабатывании таймера и при нажатии на кнопку нужно создавать новое подключение, соответственно соединить сигналы чтения из сокета с разнымы слотами. И там , после получения ответа, удалить сокет. И никаких глобальных переменных.
Например, для авторизации создаем новое соеденение, соеденяем сигнал чтения из сокета с слотом обработки ответа запроса на авторизацию, передаем пароль, ждем ответа, обрабатываем ответ, удаляем сокет. Это сообщение отредактировал(а) Vasya - 19.10.2014, 22:00 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Альтернатива тому, что сделано - обрабатывать чтение сокета в отдельной нити вместо таймеров.
Боле ивилизованно текущую версию программы можно оформить как автомат состояний, т.е. вместо int k1:
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |