Показать сообщение отдельно
  #3  
Старый 09.03.2013, 19:03
Nanotentacle Nanotentacle вне форума
Прохожий
 
Регистрация: 09.03.2013
Сообщения: 3
Репутация: 10
По умолчанию

Спасибо, только сейчас заметил такое свойство. В понедельник проверю, но, думаю, должно сработать.

Нет, свойство connected не помогло.

Есть подозрение, что событие OnClientDisconnect срабатывает позже вызова функции рассылки сообщений, несмотря на то, что клиента уже нет. Ошибку стабильно выдает вот на этой функции:

Код:
function TGProcessing.GetCount: TGLNumber;
var i:integer;
begin
result := 0;
for i := 1 to MaxClients do
 begin
 if not self.Client[i].Free then inc(result); //ошибка
 end;
end;

Вообще впервые встречаюсь с тем, что ошибка происходит с переменной, которая имеет мало отношения к самой ошибке. Как вариант, возможно, дело в Socket.Data, куда я записываю указатель на Client?

Да, и еще. Если убрать проверку кол-ва клиентов через функцию, указанную выше, то ошибку начинает выдавать вот здесь:

Код:
procedure TGProcessing.SrvClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var Pl:^TGClientG; LN:integer;
begin
LN := 0;
Pl := socket.Data;
if assigned(Pl) then
 begin
 LN := Pl.LocalNumber;  //ошибка
 self.DeleteClient(Pl.LocalNumber);
 end;
end;
Ответить с цитированием