Форум: "Сети";
Текущий архив: 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.051 c