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

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

TIdTCPServer & TIdTCPClient <OnDisconnect> [D7, Win2k, WinXP]


ДимДимыч ©   (2005-09-05 15:25:00) 

Возник вопросик: почему не происходит событие OnDisconnect. Код на сервере :

procedure TfrmMain.SrvDisconnect(AThread: TIdPeerThread);
var
 Client: TSimpleClient;
 li: TListItem;
begin
 showmessage(',sdfbvjsdfbsndj');
 Client:=TSimpleClient(AThread.Data);
 li:=TListItem(Client.ListItem);
 li.Destroy;
 LogAdd(002,'Client at '+Client.IP+' disconnect',3);
 Client.Destroy;
end;


Код на клиенте :


procedure TForm1.Button2Click(Sender: TObject);
begin
 Cln.Disconnect;
end;


В примерах посмотрел - там событие OnDisconnect на сервере не обрабатывается, но мне нужно дестроить кучу объектов при отключении клиента. Так что обрабатывать его необходимо.
Не могу понять где прокол.


ДимДимыч   (2005-09-05 19:11:00) [1]

>Digitman ©   (05.09.05 17:00) [6]
спасибо


Digitman   (2005-09-05 17:00:00) [2]

отчего ж нет ?

есть.

как раз те самые что и в Д5 - TClient/Server (для появления их в палитре необходимо установить дизайн-тайм-пакет dclsockets70.bpl из (%DELPHI%)\BIN)


ДимДимыч   (2005-09-05 16:56:00) [3]

Примерно понял. А нет ли в Д7 Чего-нибудь похожего на сокеты из Д5?


Digitman   (2005-09-05 16:07:00) [4]


> как можно сделать, чтобы дисконнект инициировался клиентом?


он, дисконнект, и инициируется клиентом

но поскольку Инди работает с гнездами в синхронном блокирующем режиме никаких асинхронных нотификаций о событиях транспорта ожидать не следует.

читаем справку, например, к методу ReadLn:

ReadLn will return an empty string ('') if the peer connection is prematurely closed or a time-out occurs

это о чем-то говорит тебе ?


ДимДимыч   (2005-09-05 15:57:00) [5]

>Eraser ©   (05.09.05 15:37) [2]
 Может я не правильно выбрал компоненты, но мне необходимо сохранять все объекты в течении всего времени соединения, а это довольно долго, и событие OnExecute будет возникать не один раз.

>Digitman ©   (05.09.05 15:34) [1]
 А как можно сделать, чтобы дисконнект инициировался клиентом?


Eraser   (2005-09-05 15:37:00) [6]

ДимДимыч   (05.09.05 15:25)

Дестрой объекты вконце OnExecute.


Digitman   (2005-09-05 15:34:00) [7]


> Не могу понять где прокол


в TIdTCPServer событие OnDisconnect возникает в ходе исполнения метода PeerThread.Connection.Disconnect

если этот метод не вызван тобой, то и событие не возникнет


Наверх

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