![]() |
|
|
![]()
|
|
| chaos |
|
||||||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
Доброго времени суток!
оффтоп как и обещал начал заниматься проектом QCairngorm. начал только вчера Стоит следующая задача: попробовать реализовать EventSequence. Начну с описания что такое Event в моем проекте. Event(EventBase) не что иное как событие призывающее что-ли бо сделать. Наприер в вашем любимом ICQ клиенте кнопочка "войти в сеть"
дальше сообщение диспетчеризируется FrontController'у который создает конкретную Command для реализации действия. результатом команды будет вызов одного из двух ее методов: result или fail. дальше идет обновление модели в зависимости от ситуайии(result или fail), а дальше обновление конкретного вида(view) на основании изменений в модели. Дальше. Например для работы вашего ICQ клиента необходимо: установить подключение(ConnectEvent), проийти авторизацию(AuthEvent) и загрузить список контактов(LoadContactListEvent) делается это следующим образом
думаю тут все понятно. идея сделать как-нибудь так(в псевдокоде):
идея тоже думаю понятна. Возникает проблема: если например соединение не произошло, то модель не послала сигнал connected соответственно последовательность ивентов прирвется Вопросы которые пытаюсь решить 1. Что должна из себя представлять EventSequence(объет в стеке или куче)? думаю что в куче. 2. не сработал "триггер" для диспетчеризации следующего в последовательности ивента - как об этом узнать(как вариант сделать 2 тригера: на ошибку и если все хорошо)? 3. если последовательность прервалась(п.2), то как прибить EventSequence если он в куче Заранее благодарен за любую помощь Это сообщение отредактировал(а) chaos - 16.3.2010, 18:27 |
||||||
|
|||||||
| SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Может сделать фабрику объектов? Пользователь создает свою команду или цепь команд на основе некоторого базового класса в деструкторе которого извлекается результат операции и передается на фабрику, чтобы она могла принять решение об остановки очереди в случае fail или о добавлении следующей команды в очередь при положительность результате. Цепь можно организовать по аналогии с parent'ом QObject'a. Затем root'овый объект (самый первый элемент) регистрируется на фабрике объектов. Сама фабрика проходит по детям объекта и выстраивает зависимую очередь команд.
Фабрика может создавать экземпляры команд в куче, все эвенты Qt грохает сама после того как они были переданы объекту для обработки. В методе такого объекта можно выставлять результат команды, а сама команда будет в деструкторе сообщать фабрике об успешности операции как я писал выше. Псевдокод мог бы выглядеть так:
Как-то так, правда придется каждый раз делать копию объекта, чтобы поместить в очередь, ведь он потом удалиться, а на фабрике всегда иметь эталонный экземпляр, где можно изменить параметры. Еще вместо конкретных имен комманд можно регистрировать ID, завести enum'ы. Всё это мне напоминает State Machine Framework. Это сообщение отредактировал(а) SABROG - 17.3.2010, 00:21 |
||||||
|
|||||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, 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. |