![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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
если этот метод не вызван тобой, то и событие не возникнет