Здравствуйте ув. форумчане. Сделал наскоро интернет чат для информирования пользователей основной ПО, о изменениях в приказах и прочего. С компонентами знакомился на лету.строго не судим.
Чат содержит массовые сообщения,личные,массовые личные,доску объявления и пару фришек для удаленного исправления БД клиента.
Имеются некоторые затыки, помощи буду искать у вас.
Все функции требуют небольшой корректировки под более верный формат,но затык именно в идентификации пользователей,в частности с дисконектом.
1- Проблема в событии дисконекта.
Код:
try
with IdTCPServer1.Contexts.LockList do
begin
for I := 0 to count-1 do
begin
if TIdContext(Items[i]).Connection.Connected=false then
begin
loge.Lines.Add('Пользователь отключился -'+user_l.Items[i].Caption);
user_l.Items.Delete(i);
end;
end;
end;
finally
IdTCPServer1.Contexts.UnLockList;
end;
Это неверный подход,поскольку метод срабатывает на дисконнекте и по факту клиент отсоеденился от сервера и в LockList его уже не будет. ID пользователей находятся в группбаттоне при коннекте он заполняется(там нет нареканий и проблем),а когда происходит дисконект не совсем корректно искать его в моем списке юзеров поскольку локлист на 1 коннект будет меньше,и если в моем списке пользователь на последнем месте..то user_l.Items.Delete(i) не произойдет и это призрак будет там висеть после чего в чате будут появляться ложные дисконекты пользователей.
Может кто знает..можно ли как то подать информацию о ID при методах коннекта или дисконекта. Затык в том что я пока не допедриваю, как мне 100% отследить,что отпал именно Вася,а не Петя. Или есть варинаты индефикации без всяких придуманных мной ID, а сразу по потоку или индексу сокета,но как это организовать операндами пока не пойму.
По тем же причинам настораживает 100% доставка личных сообщений, косяков вроде не наблюдал,но тем не менее потоки любят точности..локлист только для массовых отлично подходит. Для личных сообщений не хотелось бы постоянно опрашивать сервер и нагружать зря интернет когда есть возможность отослать с сервера сообщение нужному клиенту,тем более передать нужные параметры дело 2 минут. Заранее спасибо.