![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TServerSocker не обновляется [D5, Win95/98, Win2k]
Vadim S © (2003-09-30 15:12:00)
Есть процедура , которая прописана на события
ClientConnect,ClientDisconnect.
procedure UpdateClientStatistiks;
var CC : integer;
begin
if Server.Socket.ActiveConnections>0
then for CC:=0 to Server.Socket.ActiveConnections-1 do begin
{Заполняем данные}
end;
end;
Но когда клиент отсоединяется, то получается что пользователей
подсоединено на одного больше, чем реально.
Как это обойти?
Digitman (2003-10-02 13:26:00) [1]
> чтобы обновить статистику
я не знаю, что ты под "статистикой" подразумеваешь, но если тебе нужно просто вести некий свой оперативный список активных клиентов, то в событии OnClientConnect добавляй в этот список элемент, а в событии OnClientDisconnect удаляй соотв.элемент ... всех делов)
элементы этого списка д.б. ассоциированы со вторыми параметрами этих событий, т.е. с соответствующими объектами TServerClientWinSocket
Vadim S (2003-10-02 12:27:00) [2]
Сообщение, после XXX.ClientDisconnect(.., Socket: TCustomWinSocket);
когда клиент уже отсоединился, чтобы обновить статистику,
если такого нет.
То буду использовать вышеуказанный способ.
Digitman (2003-09-30 17:53:00) [3]
смотря что тебе нужно
Vadim S (2003-09-30 17:49:00) [4]
Так и сделал . Спасибо.
Но может есть способ лучше?
Digitman (2003-09-30 15:52:00) [5]
procedure XXX.ClientDisconnect(.., Socket: TCustomWinSocket);
var
i: Integer;
ClSoclet: TCustomWinSocket;
begin
for i:=0 to Server.Socket.ActiveConnections-1 do begin
ClSocket := Server.Socket.Connections[i];
if ClSocket = Socket then
.. это тот самый клиент, который отключился и вызвал данное событие
else
... а это еще активный клиент с т.з. сервера
end;
end;
Polevi (2003-09-30 15:40:00) [6]
асинхронная развязка
PostMessage посылай сообщение из OnClientDisconnect, в обработчкике вызывай UpdateClientStatistiks
Verg (2003-09-30 15:39:00) [7]
Если рассматривать только приведенный код, то только так:
Передавать в указанную процедуру параметр типа интегер, в OnConnect=0, в OnDisconnect=1
ну и...
procedure UpdateClientStatistiks(Discon : integer);
var CC : integer;
begin
for CC:=0 to Server.Socket.ActiveConnections-1-Discon do
begin
{Заполняем данные}
end;
end;
Vadim S (2003-09-30 15:29:00) [8]
Чего делать?
Какое событие вызывается после декремента?
Digitman (2003-09-30 15:23:00) [9]
список ActiveConnections декрементируется ПОСЛЕ завершения обработки события OnClientDisconnect