-
Для клиентов, насколько я понял, существует TIdLogFile, результат работы которого можно позже скормить TIdIOHandlerStream.
Вопрос: что делать с серверами? В частности - с TIdTCPServer. Я нашел, что для серверов существуют логгеры - TIdServerInterceptLogFile. Однако, он выдаёт наружу не чистые байты, а полный лог:
-
Что делать, что бы провести симуляцию у TIdTCPServer?
Исправлять/переписывать TIdServerInterceptLogFile?
Вообще - какой компонентой позже проводить симуляцию? Тоже TIdIOHandlerStream'ом?
Может кто-то сталкивался - ответьте плиз. Инди 10, Делфи 2010.
-
-
Сорри, выражался в терминах Indy In Depth. Нужно повторить поток байт, приходящих в порт, у себя, локально:
кусок из книги:
14.2 симуляция.
Но иногда требуется симулировать клиента или сервер, если он не доступен
...
Симуляция может быть выполнена с помощью TIdIOHandlerStream и назначения...
-
Копай в стророну TIdConnectionIntercept
-
Спасибо, посмотрю.
-
Так TIdConnectionIntercept, как я понял, именно клиентские перехватчики:
TIdLogBase = class(TIdConnectionIntercept)
TIdLogFile = class(TIdLogBase)
свойство TIdTCPConnection, от которого наследуются клиенты:
property Intercept: TIdConnectionIntercept read GetIntercept write SetIntercept;
Серверные же перехватчики наследуются от:
TIdServerIntercept = class(TIdBaseComponent)
свойство TIdCustomTCPServer'а:
property Intercept: TIdServerIntercept read FIntercept write SetIntercept;
-
свойство TIdTCPConnection читать: свойство TIdTCPConnection'а
-
Зачем тебе на сервере перехватывать контекст слушающего потока ?
-
Опишу ситуацию: передатчик - некоторый, чужой, прибор. Приёмник - мой TIdTCPServer. Они соединены локальной сетью и расположены в тысяче км от меня, доступ и удалённая отладка невозможна. Мне нужен побайтный лог того, что влилось с прибора в TIdTCPServer в пределах одной сессии (connect-disconnect). Исходящий траффик TIdTCPServer'а пока что не интересует.
-
> удалённая отладка невозможна
Ну и зачем для этого нужен интерсепт, да еще и слушающего потока ?
-
Хорошо, как иначе симуляцию сделать?
-
Да какую к лешему "симуляцию" ?!)
Что ты зацепился за это слово ?
Протоколирование и симуляция - две разных больших разницы !
Сервер твой ? Твой.
Изменить его можешь ? Видимо можешь, раз заговорил про интерсепторы.
Так зачем мудрить с интерсепторами, если все гораздо проще:
в обработчике OnExecute:
1. Принять от клиента данные
2. Запротоколировать их
3. Обработать принятые данные нужным образом
-
Ну мне не только протоколирование нужно, мне это потом еще воспроизвести у себя нужно.
>в обработчике OnExecute:
Не хочется велосипед изобретать.
Прицепил TIdLogStream к входящему соединению, в OnExecute:
FLogStream.ReceiveStream := LogStream;
AIndyConnection.Intercept := FLogStream;
Вроде бы получилось. Спасибо за обсуждение.
-
По хорошему, то еще бы и время поступления данных учесть, но, думаю, и так концы найдутся.
-
> Ну мне не только протоколирование нужно, мне это потом еще
> воспроизвести у себя нужно.
что значит воспроизвести? зигота блин...
-
> Palladin (17.08.2010 07:45:15) [15]
Для Инди воспроизведение встроеная возможность.
-
> что значит воспроизвести? зигота блин...
Ну это к Подгорецкому, он напереводил ;)
Вообще, Анатолий, огромное спасибо за перевод. Бывает, сильно помогает. Как в этом случае.
-
> Симулятор (17.08.2010 11:56:17) [17]
Ну вот виноватым я оказался :-)
-
Ни одно благородное дело не окажется безнаказанным ;)