> -- Илья Ермаков писал(а):
> Сергей, я бы хотел включить Вашу идею в готовящийся Advanced BlackBox Framework (с упоминаем авторства  ). Я предлагаю следующий интерфейс:
Круто! Я конечно обоими руками "за".

Только вроде слова Broadcast и Send обозначают ровно наоборот, чем то что тут написано, их надо взаимозаменить. Send - послать по конкретному адресу, а Broadcast - послать всем.

А, кажется, я понял. Вы писали, что у Вас уже используется Subscribe-механизм и, наверное, слово Send Вы уже использовали для него, так что это слово занято. Ничего страшного, ведь ещё есть слово "SendTo" - послать по указанному адресу.

Вот на счёт того что модуль может быть не загружен, это Вы очень правильно заметили. Стоит ли его загружать или не стоит? Кто должен решать? Может быть надо ввести дополнительный флаг forceLoad: BOOLEAN, если forceLoad = FALSE, значит модуль-получатель не надо загружать если он не загружен, иначе - загрузить его?..

Итого:
PROCEDURE Subscribe (IN mod, msgType: ARRAY OF CHAR);
Подписать модуль на определенный тип сообщения.

PROCEDURE UnSubscribe (IN mod, msgType: ARRAY OF CHAR);
Отписать модуль.

PROCEDURE Send (VAR msg: Message);
Передать сообщение всем модулям, подписанным на него.

PROCEDURE SendTo (VAR msg: Message; IN module: ARRAY OF CHAR; forceLoad: BOOLEAN; OUT ok: BOOLEAN);
Передать сообщение msg модулю module. Если этот модуль в данный момент времени не загружен и forceLoad = TRUE, то загрузить его. Результат ok = TRUE говорит о том, что сообщение было доставлено.

PROCEDURE Broadcast (VAR msg: Message; OUT count: INTEGER);
Передать широковещательно всем загруженным модулям всех подсистем. Возвращается число модулей, которым это сообщение было фактически доставлено (имеющим HandleBusMsg).

PROCEDURE BroadcastTo (VAR msg: Message; IN subsystem: ARRAY OF CHAR; OUT count: INTEGER);
Передать широковещательно всем загруженным модулям указанной подсистемы subsystem. Возвращается число модулей, которым это сообщение было фактически доставлено (имеющим HandleBusMsg).
