Каким образом в ВСВ6 заставить СОМ-сервер отправить инфу на два и более клиента? Например, по нажатию кнопки на сервере данные с Edit отправить в клиенские Memo... Заранее спасибо...
04.08.05 14:46: Перенесено модератором из 'C/C++' — Odi$$ey
Здравствуйте, Pelerin, Вы писали:
P>Каким образом в ВСВ6 заставить СОМ-сервер отправить инфу на два и более клиента? Например, по нажатию кнопки на сервере данные с Edit отправить в клиенские Memo... Заранее спасибо...
А для одного клиента все уже реализовано и работает? (Все, что написано ниже, предполагает, что — нет, не реализовано или не работает.)
По-моему, COM не предназначен для работы в подобных сценариях — COM-серверы не взаимодействуют с пользователем напрямую (через GUI).
Здесь можно воспользоваться "низкоуровневыми" средствами межпроцессного взаимодействия (сокеты, named pipes). Или использовать-таки COM, но по-другому: есть "главный" клиент (на котором кнопка и EditBox), есть много периферийных клиентов (на которых Memo), и есть (невидимый) сервер, к которому они все подключаются и через которого идет передача сообщений от главного клиента к периферийным.
Вариант с COM, по-моему, не очень хорош, т.к.:
1. Он скрывает детали и будет непонятно, почему оно работает или, наоборот, не работает;
2. На сервере придется (насколько я понимаю) делать неочевидные манипуляции с потоками, чтобы избежать возможных блокировок и задержек;
3. Адрес сервера скорее всего придется настраивать вне приложения (если предполагается, что программы будут работать на нескольких компьютерах, а не на одном);
4. См. п. 1.

... << RSDN@Home 1.1.4 stable rev. 510>>
Видно, я задал непонятный вопрос.
Впривожу текст задачи:
Создать COM объект с поддержкой событий, реализовать в нем свойства чтения и установки текстовой строки, числа в формате Int64 и даты:
TextValue
NumberValue
DateValue
Добавить событие OnChangeValue, срабатывающее при установке значений этих свойств и возвращающее это значение в формате Variant. Событие должно быть реализовано многостоковым (multi event sink).
Реализовать клиентское приложение, демонстрирующее работу Com объекта:
На форме должны быть контролы для ввода и отображения текущих значений свойств
Клиент должен быть подключен к событию OnChangeValue и обновлять значения контролов при смене значений в Com объекте
Нужно продемонстрировать работу системы в целом, запустив одновременно 2 клиентских приложения. Изменение значения свойства в одном клиенте должно приводить к изменению одноименного свойства в другом.
Основная проблема — как связать два клиента в подобную связь? Во всех примерах, которые нашел — данные кидаются в последний подключенный клиент. Как перебрать все клиенты?