Составители:
Сервер, который не поддерживает транзакций с обязательным и полуобязательным
ответом, должен установить флаг CBF_FAIL_ADVISES в функции DdeInitialize. Таким
образом он предотвратит получение нежелательных сообщений XTYP_ADVSTART и
XTYP_ADVSTOP.
Для получения нового значения элемента данных клиент должен выполнить тран-
закцию с необязательным ответом. На рис. 8.3 изображены этапы этого процесса.
1. Сервер объявляет о поступлении новых данных.
2. DDEML информирует клиента, но клиент игнорирует это уведомление. Уведомле-
ния будут посылаться клиенту всякий раз при изменении данных на сервере, однако
клиент может проигнорировать их всех.
3. Сервер вновь объявляет об изменениях в запрашиваемом элементе данных.
4. Клиент откликается, запрашивая данные (сообщение XTYP_REQUEST).
5. DDEML передает запрос серверу.
6. Сервер посылает запрашиваемые данные клиенту.
Рис.8.3. Цикл транзакции с полуобязательным ответом
Обработка принудительных и командных транзакций. Некоторые серверы
предпочитают получать данные от клиента иным способом [12]. Клиент, который хочет
передать данные серверу, должен выполнить принудительную транзакцию - послать со-
общение XTYP_POKE. В ответ на это сообщение сервер проверяет тему и элемент дан-
ных и, при желании, читает объект данных.
Некоторые серверы также получают команды от своих клиентов, принимая их в
виде дескрипторов данных. Сервер блокирует объект, анализирует содержащуюся в нем
командную строку, а затем выполняет определенные действия. После анализа команд-
ной строки сервер должен освободить дескриптор данных, но при необходимости он
может скопировать эту строку для дальнейшего использования. Поскольку клиенты
обычно ожидают немедленного выполнения команд и требуют подтверждения, сервер,
207
Сервер, который не поддерживает транзакций с обязательным и полуобязательным ответом, должен установить флаг CBF_FAIL_ADVISES в функции DdeInitialize. Таким образом он предотвратит получение нежелательных сообщений XTYP_ADVSTART и XTYP_ADVSTOP. Для получения нового значения элемента данных клиент должен выполнить тран- закцию с необязательным ответом. На рис. 8.3 изображены этапы этого процесса. 1. Сервер объявляет о поступлении новых данных. 2. DDEML информирует клиента, но клиент игнорирует это уведомление. Уведомле- ния будут посылаться клиенту всякий раз при изменении данных на сервере, однако клиент может проигнорировать их всех. 3. Сервер вновь объявляет об изменениях в запрашиваемом элементе данных. 4. Клиент откликается, запрашивая данные (сообщение XTYP_REQUEST). 5. DDEML передает запрос серверу. 6. Сервер посылает запрашиваемые данные клиенту. Рис.8.3. Цикл транзакции с полуобязательным ответом Обработка принудительных и командных транзакций. Некоторые серверы предпочитают получать данные от клиента иным способом [12]. Клиент, который хочет передать данные серверу, должен выполнить принудительную транзакцию - послать со- общение XTYP_POKE. В ответ на это сообщение сервер проверяет тему и элемент дан- ных и, при желании, читает объект данных. Некоторые серверы также получают команды от своих клиентов, принимая их в виде дескрипторов данных. Сервер блокирует объект, анализирует содержащуюся в нем командную строку, а затем выполняет определенные действия. После анализа команд- ной строки сервер должен освободить дескриптор данных, но при необходимости он может скопировать эту строку для дальнейшего использования. Поскольку клиенты обычно ожидают немедленного выполнения команд и требуют подтверждения, сервер, 207
Страницы
- « первая
- ‹ предыдущая
- …
- 203
- 204
- 205
- 206
- 207
- …
- следующая ›
- последняя »