so_4: Список модификаций

4.3.2

2006.01.03

Изменена схема генерации сообщения msg_client_disconnected для SOP каналов: сначала канал целенаправлено отсылает msg_channel_destroyed агенту-коммуникатору, а сообщение msg_client_disconnected отсылает уже сам коммуникатор при обработке msg_channel_destroyed. Такая схема позволяет коммуникатору успеть обработать msg_sop_package вычитанные из канала перед его закрытием.

4.3.1.1

2005.06.02

При дерегистрации кооперации с серверным коммуникационным каналом теперь для каждого из существовавших соединений отсылается сообщение msg_client_disconnected.

4.3.1

2004.10.26

Портированная на Tandem версия.

4.3.0

2004.09.22..

Переход на mxx_ru.

Отказ от использования memcheck_2.

Изменена схема именования dll: теперь создаваемые dll называются so.4.3.*, so.disp.qt_ui.4.3.*, so.disp.win_ui.4.3.* и т.д.

4.2.7.8

2004.07.14

Функции, которые были добавлены в файл so_4/socket/h/os_dependent.hpp в версии 4.2.7.7 объявлены inline, чтобы не вызывать проблем при линковке (проблема была выявлена в so_agent_lib_1).

4.2.7.7

2004.07.14

В класс so_4::socket::socket_t добавлены методы enable_nonblocking() и disable_nonblocking(), которые позволяют переводить сокет в не блокирующий или блокирующий режим.

4.2.7.6

2004.07.12

Сообщениями msg_client_connected, msg_client_disconnected теперь владеют и транспортные агенты для SOP-каналов. Этими же сообщениями продолжает владеть агент-коммуникатор. В момент разрыва/восстановления соединения сообщения msg_client_connected, msg_client_disconnected рассылаются от имени как агента-коммуникатора, так и от имени транспортных агентов.

В состав примеров включен тест high_traffic.

4.2.7.5

2004.07.07

Добавлены функции so_4::disp::active_obj::make_active(), so_4::disp::active_group::make_member().

4.2.7.4

2004.06.29

Исправлена ошибка из-за которой нельзя было использовать более одного макроса SOL4_STATE_MERGE или SOL4_STATE_EXCLUDE_EVENT в описании состояния (не были учтены особенности препроцессора C++).

Исправлена ошибка краха приложения, если в одном состоянии указатать нескоько макросов SOL4_STATE_MERGE, а в одном из них -- не известное имя состояния.

4.2.7.3

2004.06.22

Добавлена проверка на то, чтобы имя регистрируемой кооперации не было пустым.

В сообщение об ошибке, связанной с пустым именем агента, добавляется имя кооперации, в которой пытаются зарегистрировать этого агента.

В случае невозможности создания серверного сокета или невозможности коннекта клиентским сокетом в текстовое описание ошибки добавляется IP-адрес, с которым возникают проблемы.

4.2.7.2

2004.06.17

Переход на threads_1.3.1 (с поддержкой micro_time). Теперь при печати сообщения об ошибке через макрос LOG_ERR сообщению предшествует время.

4.2.7.1

2004.06.16

На платформе Win32 при выполнении операции bind для сокета не устанавливается опция SO_REUSEADDR. Под Unix эта опция позволяла быстро переиспользовать серверный сокет после его закрытия. Но, оказалось, что по Win32 эта опция позволяет создать ДВА СЕРВЕРНЫХ сокета для ОДНОГО адреса ОДНОВРЕМЕННО, что невозможно под Unix. Поэтому под Win32 эта опция теперь не устанавливается, т.к. проблемы быстрого переиспользования серверного сокета под Win32 нет.

4.2.7 "Базардюзю"

2004.04.22...

Реализовано понятие insend-событий. Подробнее см. so_4: Версия 4.2.7. Insend-события.

Hook-и подписки доработаны для поддержки возможности подписки insend-событий.

Агент-коммуникатор обрабатывает сообщение о появлении нового глобального агента при помощи insend-события. В результате появляется возможность отсылать сообщения глобального агента сразу после возврата из so_4::api::make_global_agent().

Введена поддержка взаимоотношений "родитель-потомок" для коопераций. Подробнее см. so_4: Версия 4.2.7. Дочерние кооперации.

В класс so_4::rt::comm::msg_raw_package добавлены конструктор и оператор копирования.

Добавлен пример sample/parent_insend/main.cpp.

Исправлен приоритет события so_3::rt::comm::a_communicator_t::evt_set_filter() (в некоторых случаях сообщения, передаваемые через SOP, терялись из-за того, что агент комуникатор обрабатывал установку фильтра на SOP-канал с милимальным приоритетом). Ошибка выявлена в so_4.2.6.3 после выделения ветви 4.2.7

Реализована автоматическая компрессия SOP трафика с использованием библиотеки zlib (http://www.zlib.org). Подробнее см. so_4: Версия 4.2.7. Компрессия SOP-трафика.

Реализована возможность назначения входящих фильтров серверным SOP-каналам. Подробнее см. so_4: Версия 4.2.7. Входящие фильтры для серверных каналов.

Реализована кооперация для работы с динамическими агентами, которые производны так же от QObject. Подробнее см. so_4: Версия 4.2.7. Динамическая кооперация для Qt-агентов.

Устранена ошибка из-за которой в нити простейшего таймера возможно было образование бесконечного цикла (при периодах повторения переодических сообщений, меньших 250 миллисекунд).

Реализован контроль за тем, чтобы в описании состояния агента указывались только имена известных событий (т.е. событий, описанных в самом классе агента или унаследованных из базовых классов). Если в описании состояния агента обнаруживается имя неизвестного события, то класс агента объявляется некорректным. Регистрация агентов этого класса не возможна. Так же некорректными объявляются все классы агентов, которые произведены от данного класса.

Реализована возможность слияния описаний состояний, что облегчает перекрытие унаследованных состояний при наследовании. Подробнее см. so_4: Версия 4.2.7. Слияние содержимого состояний.

4.2.6.3

2004.04.17

Исправлена проблема ping-ования каналов, в которых совсем нет трафика. Подробнее см. so_4: Версия 4.2.6.3. Проблема пингования каналов.

4.2.6.2

2004.02.18

Реализовано установки опции SO_REUSEADDR для серверных сокетов.

4.2.6.1

2004.01.09, 2004.01.13

Реализован диспетчер для Qt. См. so_4::disp::qt_ui.

Реализовано понятие слушателей состояния агента в виде класса so_4::rt::agent_state_listener_t и методов so_4::rt::agent_t::so_add_nondestroyable_listener(), so_4::rt::agent_t::so_add_destroyable_listener().

4.2.6 "Домбай"

2003.12.29-2004.01.06

В класс so_4::rt::agent_t добавлен конструктор, получающий в качестве параметра объект std::string.

Добавлен заголовочный файл so_4/h/destroy_timer_flags.hpp и перечисление so_4::destroy_timer_flags_t.

Добавлена функция so_4::disp::one_thread::create_disp(), в которой можно определить, должен ли диспетчер уничтожать объект таймера в своем деструкторе. Добавлена функция so_4::disp::active_obj::create_disp(), в которой можно определить, должен ли диспетчер уничтожать объект таймера в своем деструкторе. Подробнее см. so_4: Версия 4.2.6. Автоматическое уничтожение таймера диспетчером.

Добавлен заголовочный файл so_4/h/destroy_disp_flags.hpp и перечисление so_4::destroy_disp_flags_t.

Добавлена функция so_4::api::start(), в которой можно определить, должен ли уничтожаться диспетчер перед возвратом из start(). Подробнее см. so_4: Версия 4.2.6. Автоматическое уничтожение диспетчера.

В класс so_4::rt::agent_t добавлены методы so_subscribe(), облегчающие подписку событий агентов. Подробнее см. so_4: Версия 4.2.6. Упрощение подписки агентов.

Для типа so_4::rt::comm_channel_t добавлен оператор сдвига в std::ostream (формат см. в so_4::rt::comm_channel_t::dump()).

Реализована поддержка т.н. "объектов, время жизни которых контролируется динамической кооперацией" (см. so_4: Версия 4.2.6. Использование динамических объектов в динамических кооперациях).

Реализована поддержка свойств агентов, которые уничтожаются в деструкторе агента. Подробнее см. so_4: Версия 4.2.6. Автоматически уничтожаемые свойства агентов.

Реализованы функции so_4::api::send_msg_safely(). Подробнее см. so_4: Версия 4.2.6. Упрощение отсылки сообщений.

Для решения проблемы упреждающей подписки введено понятие hook-ов подписки. Реализованы классы so_4::rt::subscr_hook_t, so_4::rt::def_subscr_hook_t и функции so_4::rt::def_subscr_hook(). Подробнее см. so_4: Версия 4.2.6. Hook-и подписки агентов.

Реализован диспетчер с активными группами. Подробнее см. so_4: Версия 4.2.6. Диспетчер с активными группами.

В классы so_4::rt::agent_coop_t, so_4::rt::dyn_agent_coop_t добавлены конструкторы, которые получают в качестве имени кооперации ссылку на объект std::string.

Для увеличения скорости взаимодействия по SOP при получении SOP-пакета so_4::sop::send_msg_info_t ответ отправителю (so_4::sop::send_msg_resp_info_t) отсылается только, если отсылка сообщения завершилась с ошибкой. Это приводит к тому, что при успешной отсылке сообщений через SOP существенно уменьшается объем SOP трафика.

В коммуникационных агентах реализована поддержка порогов входных и выходных потоков. Подробнее см. so_4: Версия 4.2.6. Пороги ввода-вывода.

Увеличено число допустимых форматов обработчиков событий и для их описания добавлен макрос SOL4_EVENT_STC(). Подробнее см. so_4: Версия 4.2.6. Форматы обработчиков событий.

Внимание:
Некоторые примеры могут не компилироваться компилятром Visual C++.
При выполнении операции shutdown диспетчер с активными объектами не выводит сообщения "<agent>: thread for this active object is not exists".

Добавлен заголовочный файл so_4/h/version.hpp и макрос __SO_4_VERSION__, который содержит номер версии SObjectizer-а.

Максимальный размер буферов ввода-вывода для коммуникационных каналов установлен в 512Kb.

В класс so_4::socket::socket_t добавлен метод so_4::socket::socket_t::write(), который возвращает количество записанных в сокет байт.

В соотвествие с новой версией приведены примеры:

Добавлены примеры:

4.2.5

2003.10.05

Исправлена ошибка, которая в случае диспетчера с активными агентами могла приводить к краху приложения при завершении работы SObjectizer-а (в случае, если в очередях событий активных агентов оставалось большое количество элементов).

Данная версия была протестирована на двух-процессорной машине под управлением Windows 2000.

4.2.4.3

2003.10.01

Добавлена возможность использовать механизм io_channels для работы с пользовательскими, непрозрачными для SObjectizer (raw), данными.

4.2.4.2

2003.09.22

Добавлена проверка корректности имен агентов: агент с пустым именем не может быть зарегистрирован.

В поток ошибок отображаются уведомления о некорректных экземплярах сообщений.

Максимальный размер буферов ввода-вывода для поддержки SOP протокола выставле, по умолчанию в 1 Mb.

4.2.4.1

2003.07.29

Устранена ошибка компиляции файла so_4/timer_thread/simple/unix/timer_thread.cpp компилятором gcc v.3.2.2.

4.2.4

2003.06.10

Адаптация к cls_2 v.2.6.

Реализован механизм переодического ping-ования коммуникационных каналов при длительном отсутствии активности в них. Сейчас, если в канале нет SOP-пакетов в течении 60 секунд в канал переодически будет отсылаться ping-пакет. Если за следующие 60 секунд в канал не поступит ни одного SOP-пакета, то канал будет принудительно закрыт. В нормальном варианте в ответ на ping-пакет сразу же отсылается ping-ответ.

Агент so_4::rt::comm::a_socksrv_t унаследован от so_4::rt::comm::a_srv_channel_t.

Агент so_4::rt::comm::a_sockcln_t унаследован от so_4::rt::comm::a_cln_channel_t.

Реализован агент so_4::rt::comm::a_cln_channel_t.

Добавлена реализация физического клиентского канала на основе TCP/IP сокетов.

Добавлена реализация физического серверного канала на основе TCP/IP сокетов.

Реализован агент so_4::rt::comm::a_srv_channel_t.

Добавлены интерфейсы so_4::rt::comm::io_channel_t, so_4::rt::comm::client_factory_t, so_4::rt::comm::server_channel_t.

4.2.3.2

2003.05.31

Добавлен пример работы с SObjectizer из Qt: sample/distribute/qt_client.

4.2.3.1

2003.05.25

Устранено несколько ошибок, связанных с компиляцией Borland C++ 5.6 (C++Builder 6).

4.2.3

2003.02.26-2003.03.28-2003.04.03-2003.04.08-2003.04.16-2003.04.21...

Приоритет события so_4::rt::comm::a_communicator_t::evt_set_filter установлен в 1, чтобы быть выше приоритета события so_4::rt::comm::a_communicator_t::evt_sop_package.

Исправлена ошибка: при регистрации глобального агента не проверялась корректность класса агента. Ошибка проявилась в случае, когда информация о взаимоотношениях классов агентов устарела, но еще не была обновлена. Но в этот момент был зарегистрирован глобальный агент. Поскольку информация о взаимоотношения была ошибочной, в описании класса этого агента не было полного списка сообщений. Поэтому на сообщения данного агента никому не удалось подписаться.

Проект so_4/disp/win_ui теперь является самостоятельным проектом. Он не включается в состав so_4 при формировании дистрибутива исходных текстов. Для использования so_4/disp/win_ui в файл required.4xx нужно добавить имя so_4/disp/win_ui.

Адаптация к oess_1.0.6 (используется только проект oess_1/stdsn и все необходимые ему проекты).

Исправлена ошибка: значения so_4::rt::comm_buf_t не правильно считывались из SOP-пакетов. Ошибка была выявлена в SObjectizer v.4.2.2.4.

Исправлена ошибка: не работал механизм рассылки сообщений so_msg_state (макрос SOL4_CHANGE_STATE_NOTIFY()) после реализации наследования для агентов. Ошибка была выявлена в SObjectizer v.4.2.2.3.

Устранена опасность краха системы при изъятии класса глобального агента из системного словаря в момент, когда агент-коммуникатор подписывается на сообщения глобального агента этого типа.

Реализована отсылка сообщения so_4::rt::comm::msg_client_connected, которым владеет агент-коммуникатор.

Добавлен пример sample/filter, показывающий работу с SOP-фильтрами.

Утилита so_send_stdin адаптирована к использованию SOP-фильтров (сразу после подключения к серверу отсылается фильтр, который разрешает обработку любых сообщений).

Реализованы фильтры для SOP-соединений. Клиентскому сокету может быть назначен объект, реализующий интерфейс so_4::sop::filter_t, который будет выполнять роль фильтра. Фильтрация осуществляется по именам глобальных агентов без учета имени конкретного сообщения.

Изменен способ организации очереди заявок в классах пространства имен so_4::disp::reuse (используются cond_var_t из threads_1).

Для защиты ядра вместо простого объекта mutex применяется синхронизирующий объект "много читателей, один писатель".

Вместо собственных средств поддержки многопоточности применен проект threads_1.

Добавлена возможность автоматического восстановления связи по SOP протоколу для агента so_4::rt::comm::a_sockcln_t. Для этих целей предназначен интерфейс so_4::rt::comm::a_sockcln_t::disconnect_handler_t. Демонстрация этой возможности осуществлена в примере sample/distribute.

Класс package_header_t был перенесен из пространства имен so_4::rt::comm::impl в so_4::sop и сделан экспортируемым классом.

Исправлен макрос so_4_make_rc так, что теперь его можно применять и вне SObjectizer-а.

4.2.2.3

2003.02.21

Исправлена ошибка: системный словарь не перестраивался после добавления классов агентов во время работы SObjectizer-а. Например, при ручной загрузке DLL, содержащей агентов.

Изменен файл so_4/dev/so_4/globals.4xx.

Изменен файл so_4/dev/locals.4xx.

Удалены каталоги so_4/dev/distr-ver, so_4/dev/distr-ver-make. Файл make_src_distr.4xx помещен в каталог so_4/dev/so_4.

Введена поддержка событий, имеющих формат:

void
evt_handler(
  const so_4::rt::event_data_t & data,
  const msg_type * cmd );
Для чего введен макрос SOL4_EVENT_WITH_INCIDENT_TYPE(). Для описываемых подобным образом событий при подписке осуществляется контроль за реальным типом указываемого инцидента.

4.2.2

2003.02.13

Реализация наследования для агентов.

В классы представления адресов сокетов добавлен виртуальный метод to_string для получения строкового представления адреса сокета.

Исправлена ошибка передачи значений {string-stream ...} в so_send_stdin. Ошибка выявлена в 4.2.1.

4.2.1

2003.02.03

Адаптация к Borland C++ 5.6 (C++Builder 6).

Переход на cls-2/2.4. Изъят код auto_ptr_2.

4.2.0

2003.01.10

SOP протокол стал двоичным. Реализован с использованием oess_1::stdsn.

Измена структура каталогов. Каталоги so_4/sample и so_4/test вынесены на один уровень выше. Теперь это просто каталоги sample и test.

Изменена система формирования дистрибутивов.

4.1.3.2

2002.12.12

1. Переработана программа so_send_stdin (реализована команда для организации паузы в одну секунду, контролируется состояние сокета перед записью и чтением).

4.1.3.1

2002.11.12

1. Исправлена ошибка, вызваная тем, что деструктор socket_t не был объявлен виртуальным.

4.1.3

2002.10.26

1. Гарантируется, что при дерегистрации динамической кооперации сначала уничтожаются агенты, а только затем объект-кооперация.

2. Исправлена ошибка, вызваная тем, что деструктор agent_coop_t не был объявлен виртуальным.

3. DLL SObjectizer-а теперь называется: so_4.1.3.dll.

4.1.2

2002.10.11

1. Устранена ошибка в so_4::rt::impl::std_sys_dict_t::remove_class: описание класса агента реально из словаря системы не удалялось, хотя все проверки выполнялись. Это проявлялось при выгрузке DLL, в которых описывались классы агентов.

2. DLL SObjectizer-а теперь называется: so_4.1.2.dll.

4.1.1

2002.08.12

1. Устранена проблема диспетчеризации событий с одинаковыми инцидентами, но обрабатываемыми в различных состояниях.

2. Изъят api-вызов change_agent_state. Для изменения состояния агента введен public-метод agent_t::so_change_state. Этот метод может быть вызван только на контексте нити диспетчера, на которой в данный момент исполняется обработчик какого-либо события агента.

3. Реальный агент не может быть сделан глобальным. Нельзя зарегистрировать реального агента, если есть глобальный агент с таким же именем.

4. Таймерная нить выделена в отдельное понятие. Для создания объекта диспетчера теперь необходимо самостоятельно создать объект-таймерную нить и передать ссылку на этот объект в диспетчер. В So-4.1.1 реализован простейший объект-таймерная нить (so_4/timer_thread/simple).

5. Реализован диспетчер с активными объектами (so_4/disp/active_obj).

6. Утилита send_stdin получила название so_send_stdin и стала стандартной частью So-4.

7. Изменена структура каталогов so_4 (so_4/timer_thread, so_4/disp, so_4/sample, so_4/test).

8. Изменены имена классов и констант из пространства имен so_4::mutex.

9. Изменены имена классов и констант из пространства имен so_4::socket.

10. So-4.1 переписан с использованием новых стандартных заголовочных файлов C++.

11. В пространство имен so_4::socket добавлен вызов sys_errno для определения системного кода ошибки при работе с сокетами (возвращает код errno под UNIX, WSAGetLastError под Win32).

12. Изменена система генерации дистрибутивов So-4.

4.0.1.1

2002.07.23

Устранена ошибка реализации метода so_4::rt::impl::_msg_wrapper_t:: unsubscribe_all (после очистки подписки само множество указателей подписчиков не очищалось). В некоторых случаях в множестве указателей на подписчиков оказывались указатели на уже удаленные объекты, что приводило к аварийному завершению программы.


Документация по SObjectizer. Последние изменения: Thu Jan 12 10:52:50 2006. Создано системой  doxygen 1.4.6-NO
Hosted by uCoz