Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
Симулятор   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.061 c
2-1421904151
i2e
2015-01-22 08:22
2017.01.15
В MDI-приложении надо программно сделать окно активным


2-1421304666
chron22
2015-01-15 09:51
2017.01.15
динамический sql в компонентах


15-1451943001
Юрий
2016-01-05 00:30
2017.01.15
С днем рождения ! 5 января 2016 вторник


15-1456148886
K-1000
2016-02-22 16:48
2017.01.15
TCanvas. Вывести текст с разноцветными буквами


2-1421996112
lewka
2015-01-23 09:55
2017.01.15
Запись в реестр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский