Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

TServerSocker не обновляется   Найти похожие ветки 

 
Vadim S   (2003-09-30 15:12) [0]

Есть процедура , которая прописана на события
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-09-30 15:23) [1]

список ActiveConnections декрементируется ПОСЛЕ завершения обработки события OnClientDisconnect


 
Vadim S   (2003-09-30 15:29) [2]

Чего делать?
Какое событие вызывается после декремента?


 
Verg ©   (2003-09-30 15:39) [3]

Если рассматривать только приведенный код, то только так:
Передавать в указанную процедуру параметр типа интегер, в 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;


 
Polevi ©   (2003-09-30 15:40) [4]

асинхронная развязка
PostMessage посылай сообщение из OnClientDisconnect, в обработчкике вызывай UpdateClientStatistiks


 
Digitman ©   (2003-09-30 15:52) [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;


 
Vadim S   (2003-09-30 17:49) [6]

Так и сделал . Спасибо.

Но может есть способ лучше?


 
Digitman ©   (2003-09-30 17:53) [7]

смотря что тебе нужно


 
Vadim S   (2003-10-02 12:27) [8]

Сообщение, после XXX.ClientDisconnect(.., Socket: TCustomWinSocket);
когда клиент уже отсоединился, чтобы обновить статистику,
если такого нет.
То буду использовать вышеуказанный способ.


 
Digitman ©   (2003-10-02 13:26) [9]


> чтобы обновить статистику


я не знаю, что ты под "статистикой" подразумеваешь, но если тебе нужно просто вести некий свой оперативный список активных клиентов, то в событии OnClientConnect добавляй в этот список элемент, а в событии OnClientDisconnect удаляй соотв.элемент ... всех делов)

элементы этого списка д.б. ассоциированы со вторыми параметрами этих событий, т.е. с соответствующими объектами TServerClientWinSocket



Страницы: 1 вся ветка

Текущий архив: 2003.11.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
8-90001
Trekk
2003-07-28 14:24
2003.11.27
Как сделать слои?


14-90058
amisare
2003-11-05 13:46
2003.11.27
TFileStream для работы с текстовыми файлами


8-90003
Babay
2003-07-22 06:11
2003.11.27
Файлы *.ani, *.Cur


6-90023
Sirus
2003-10-01 15:07
2003.11.27
Как организовать докачку файлов с ServerSocket и ClientSocket?


4-90163
Юрий Ж.
2003-10-01 16:02
2003.11.27
Работа с ресурсами...