Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.09.2014, 08:04
Heneken Heneken вне форума
Новичок
 
Регистрация: 11.09.2011
Сообщения: 73
Версия Delphi: Delphi XE6
Репутация: 10
По умолчанию TidtcpServer. Работа со списком пользователей

Здравствуйте ув. форумчане. Сделал наскоро интернет чат для информирования пользователей основной ПО, о изменениях в приказах и прочего. С компонентами знакомился на лету.строго не судим.
Чат содержит массовые сообщения,личные,массовые личные,доску объявления и пару фришек для удаленного исправления БД клиента.

Имеются некоторые затыки, помощи буду искать у вас.

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

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% доставка личных сообщений, косяков вроде не наблюдал,но тем не менее потоки любят точности..локлист только для массовых отлично подходит.Понимаю что есть вариант создать массив где будет конкретно указан поток и какой из юзеров этому потоку принадлежит.Как это сделать операндами и какие классы регистрировать пока не понимаю.

Последний раз редактировалось Heneken, 04.09.2014 в 08:07.
Ответить с цитированием
  #2  
Старый 04.09.2014, 12:41
Heneken Heneken вне форума
Новичок
 
Регистрация: 11.09.2011
Сообщения: 73
Версия Delphi: Delphi XE6
Репутация: 10
По умолчанию В общем сам сообразил.

После тестов на 20-30 пользователей выложу код с пояснениями.Может кому пригодится.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter