Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

Симулятор ©   (2010-08-14 13:02:00) 

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

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


Anatoly Podgoretsky   (2010-08-19 10:09:00) [1]

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

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


Anatoly Podgoretsky   (2010-08-19 10:08:00) [2]

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

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


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

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


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;


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

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


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

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


Anatoly Podgoretsky   (2010-08-18 10:58:00) [6]

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

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


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

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

Амбула.

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


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


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


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

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


Anatoly Podgoretsky   (2010-08-17 22:23:00) [9]

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

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


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


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


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

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


Anatoly Podgoretsky   (2010-08-17 08:49:00) [11]

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

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


Palladin   (2010-08-17 07:45:00) [12]


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

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


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

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


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

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

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

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

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

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

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


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

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

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

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

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


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

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


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

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


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

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


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

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


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо