Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

Как сделать симуляцию в индиевских серверах?   Найти похожие ветки 

 
Симулятор   (2010-08-14 13:02) [0]

Для клиентов, насколько я понял, существует TIdLogFile, результат работы которого можно позже скормить TIdIOHandlerStream.

Вопрос: что делать с серверами? В частности - с TIdTCPServer. Я нашел, что для серверов существуют логгеры - TIdServerInterceptLogFile. Однако, он выдаёт наружу не чистые байты, а полный лог:


 
Симулятор   (2010-08-14 13:03) [1]

Что делать, что бы провести симуляцию у TIdTCPServer?
Исправлять/переписывать TIdServerInterceptLogFile?
Вообще - какой компонентой позже проводить симуляцию? Тоже TIdIOHandlerStream"ом?

Может кто-то сталкивался - ответьте плиз. Инди 10, Делфи 2010.


 
Сергей М. ©   (2010-08-16 09:23) [2]

Причем здесь "симуляция" ?

http://www.google.com/search?hl=ru&client=firefox&hs=gVD&rls=org.mozilla:ru:official&defl=ru&q=define: %D0%A1%D0%B8%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F+&sa=X&ei=EctoTNyHCsGUOJf4qLkF&ved=0CBUQkAE


 
Симулятор   (2010-08-16 11:50) [3]

Сорри, выражался в терминах Indy In Depth. Нужно повторить поток байт, приходящих в порт, у себя, локально:

кусок из книги:

14.2 симуляция.

Но иногда требуется симулировать клиента или сервер, если он не доступен
...
Симуляция может быть выполнена с помощью TIdIOHandlerStream и назначения...


 
Сергей М. ©   (2010-08-16 11:58) [4]

Копай в стророну TIdConnectionIntercept


 
Симулятор   (2010-08-16 13:48) [5]

Спасибо, посмотрю.


 
Симулятор   (2010-08-16 14:39) [6]

Так 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;


 
Симулятор   (2010-08-16 14:40) [7]

свойство TIdTCPConnection читать: свойство TIdTCPConnection"а


 
Сергей М. ©   (2010-08-16 14:48) [8]

Зачем тебе на сервере перехватывать контекст слушающего потока ?


 
Симулятор   (2010-08-16 14:58) [9]

Опишу ситуацию: передатчик - некоторый, чужой, прибор. Приёмник - мой TIdTCPServer. Они соединены локальной сетью и расположены в тысяче км от меня, доступ и удалённая отладка невозможна. Мне нужен побайтный лог того, что влилось с прибора в TIdTCPServer в пределах одной сессии (connect-disconnect). Исходящий траффик TIdTCPServer"а пока что не интересует.


 
Сергей М. ©   (2010-08-16 15:12) [10]

> удалённая отладка невозможна
Ну и зачем для этого нужен интерсепт, да еще и слушающего потока  ?


 
Симулятор   (2010-08-16 15:40) [11]

Хорошо, как иначе симуляцию сделать?


 
Сергей М. ©   (2010-08-16 15:46) [12]

Да какую к лешему "симуляцию" ?!)
Что ты зацепился за это слово ?
Протоколирование и симуляция - две разных больших разницы !

Сервер твой ? Твой.
Изменить его можешь ? Видимо можешь, раз заговорил про интерсепторы.
Так зачем мудрить с интерсепторами, если все гораздо проще:

в обработчике OnExecute:

1. Принять от клиента данные
2. Запротоколировать их
3. Обработать принятые данные нужным образом


 
Симулятор   (2010-08-16 18:20) [13]

Ну мне не только протоколирование нужно, мне это потом еще воспроизвести у себя нужно.

>в обработчике OnExecute:

Не хочется велосипед изобретать.

Прицепил TIdLogStream к входящему соединению, в OnExecute:

FLogStream.ReceiveStream := LogStream;
AIndyConnection.Intercept := FLogStream;

Вроде бы получилось. Спасибо за обсуждение.


 
Симулятор   (2010-08-16 18:23) [14]

По хорошему, то еще бы и время поступления данных учесть, но, думаю, и так концы найдутся.


 
Palladin ©   (2010-08-17 07:45) [15]


> Ну мне не только протоколирование нужно, мне это потом еще
> воспроизвести у себя нужно.

что значит воспроизвести? зигота блин...


 
Anatoly Podgoretsky ©   (2010-08-17 08:49) [16]

> Palladin  (17.08.2010 07:45:15)  [15]

Для Инди воспроизведение встроеная возможность.


 
Симулятор   (2010-08-17 11:56) [17]


> что значит воспроизвести? зигота блин...


Ну это к Подгорецкому, он напереводил ;)

Вообще, Анатолий, огромное спасибо за перевод. Бывает, сильно помогает. Как в этом случае.


 
Anatoly Podgoretsky ©   (2010-08-17 22:23) [18]

> Симулятор  (17.08.2010 11:56:17)  [17]

Ну вот виноватым я оказался :-)


 
Симулятор   (2010-08-18 02:01) [19]

Ни одно благородное дело не окажется безнаказанным ;)


 
Дмитрий Белькевич   (2010-08-18 02:10) [20]

Вообще, это я писал :) Сайт сообщение не добавлял - думал из-за ника, поменял - оказалось из-за части сообщения.

Амбула.

Буду скоро на инди ругаться матом :)


procedure TIdLogBase.Receive(var ABuffer: TIdBytes);
....
s := BytesToStringRaw(ABuffer);


Инди криво конвертят TIdBytes > string, часть данных заменяется на пробелы, я тут уже весь свой код перетряс, ища, что не так.
Кака, короче, эта индя. Перелазить на что-то другое не хочу, придётся править. Как бы еще им изменения засабмитить...


 
Anatoly Podgoretsky ©   (2010-08-18 10:58) [21]

> Дмитрий Белькевич  (18.08.2010 02:10:20)  [20]

Ты неправильной стороной ешь бутерброд, ругаться надо начинать до
использования.


 
Симулятор   (2010-08-18 12:47) [22]

Сильно боюсь, что другое только хуже.


 
Дмитрий Белькевич   (2010-08-18 12:47) [23]

Блин, вот уже и на сайте баги - то под одним ником пишет, то под другим... фиг поймёшь.


 
Дмитрий Белькевич   (2010-08-18 13:59) [24]

Поправил, может кому интересно будет:


procedure TIdLogBase.Receive(var ABuffer: TIdBytes);
var
 s: string;
 LMsg: string;
begin
 if FActive then begin
   inherited Receive(ABuffer);
   LMsg := "";
   if LogTime then begin
     LMsg := DateTimeToStr(Now);
   end;
   //s := BytesToStringRaw(ABuffer);
   s := TIdTextEncoding.Default.GetString(ABuffer);
   if FReplaceCRLF then begin
     s := ReplaceCR(S);
   end;
   LogReceivedData(LMsg, s);
 end;
end;



procedure TIdLogStream.LogReceivedData(const AText, AData: string);
begin
 if FReceiveStream <> nil then begin
   WriteStringToStream(FReceiveStream, AData, TIdTextEncoding.Default);
 end;
end;

procedure TIdLogStream.LogSentData(const AText, AData: string);
begin
 if FSendStream <> nil then begin
   WriteStringToStream(FSendStream, AData, TIdTextEncoding.Default);
 end;
end;


 
Anatoly Podgoretsky ©   (2010-08-19 10:08) [25]

> Симулятор  (18.08.2010 12:47:22)  [22]

После Инди, не смеши.


 
Anatoly Podgoretsky ©   (2010-08-19 10:09) [26]

> Дмитрий Белькевич  (18.08.2010 12:47:23)  [23]

Не пиши под разными никами, или меняй их до поста.



Страницы: 1 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.022 c
2-1428788906
BBC
2015-04-12 00:48
2017.01.15
Фокусировка PaintBox


15-1455112976
K-1000
2016-02-10 17:02
2017.01.15
Canvas. Вывести зеркальное изображение с альфой?


3-1308557586
MacroDenS
2011-06-20 12:13
2017.01.15
ADO + Excel


15-1457295903
Юрий Зотов
2016-03-06 23:25
2017.01.15
Веселые картинки


1-1346594556
Earl_Vadim
2012-09-02 18:02
2017.01.15
Библиотека LibUSB и DelphiXE2