Спасибо, только сейчас заметил такое свойство. В понедельник проверю, но, думаю, должно сработать.
Нет, свойство 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;