

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| Информирование о канале |
|
Как сервер именованных каналов, так и клиентское приложение имеют право ознакомиться с основными техническими характеристиками работающего канала. Для этого предназначена функция: лшв аа яш1 function GetNamedPipeInfo(hPipe : THandle; var Flags : cardinal; OutBufferSize, InBufferSize, MaxInstances : pointer) : boolean; Первый параметр hPipe - дескриптор опрашиваемого канала, все остальные параметры информационные. Так Flags расскажет о типе канала: поток байт (PIPE_TYPE_BYTE) или поток сообщений (PIPE_TYPE_MESSAGE), а также кем вызван метод - сервером (PIPESERVEREND) или клиентом (PIPE_CLIENT_END). Параметры OutBufferSize и InBufferSize проинформируют о размерах выходного и входного буферов. Параметр MaxInstances вернет данные о максимально допустимом количестве каналов. В случае успешного завершения функция возвращает значение true, а при ошибке - false. С помощью следующей функции определяется состояние канала: лшя аа ащ function GetNamedPipeHandleState(hPipe : THandle; State, CurInstances, MaxCollectionCount, CollectDataTimeout : pDWORD; UserName : pAnsiChar; MaxUserNameSize : cardinal) : boolean; Передав в функцию дескриптор именованного канала hPipe, в ответ мы получим следующие данные: • Состояние канала (параметр State). Этот указатель на двойное слово DWORD может возвратить два флага: флаг PIPEREADMODEMESSAGE свидетельствует о том, что канал специализируется на передаче сообщений, а флаг PIPE_ NOWAIT - признак того, что при обращении к каналу функции будут возвращать управление в программу немедленно, не дожидаясь окончания выполнения. • Общее количество существующих на момент вызова метода экземпляров канала передается в переменную, на которую ссылается указатель CurIn-stances. • Клиент именованного канала осуществляет передачу данных не по мере их поступления, а накапливает их и отправляет серверу в составе пакета. Максимальный размер пакета (в байтах) будет возвращен при помощи указателя MaxCollectionCount. • Чтобы информация, находящаяся в пакете, была гарантированно передана серверу (даже если пакет не будет полностью наполнен), процесс передачи дополнительно контролируется таймером. По истечении времени тайм-аута в адрес сервера отсылается даже полупустой пакет данных. Таким образом, на клиентской стороне информация никогда не залеживается. О времени тайм-аута нас информирует указатель CollectDataTimeout. ОК сожалению, нельзя обращаться к параметрам MaxCollectionCount и CollectDataTimeout, если серверный и клиентский окончания канала находятся на одной и той же станции. В этом случае вместо указателя на переменную надо передавать nil. • Если вызов метода осуществляется со стороны сервера, то можно узнать имя пользователя, работающего на клиентском компьютере. Эти данные возвратит указатель UserName. При этом максимальная длина имени ограничивается последним параметром MaxUserNameSize. |
