Четверг, 28.03.2024, 19:57 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024  
delphicode » Delphi » Вопросы по Delphi » Чат, multi users online
Чат, multi users online
d4rkzyДата: Среда, 17.12.2014, 03:35 | Сообщение # 1
Постоянный
Зарегистрирован: 15.11.2013
Группа: Пользователи
Сообщений: 135
Статус: Offline
Вообще-м пишу групповой чат, такие дела. Использую idtcp и работаю через XML протокол (jabber)

Вообще-м намутил пару фукнций
1) function xConnectJabber(xIp : pchar; xPort: integer; xNick, xPass : pchar) : boolean;
Эта функция коннектится к серверу Джаббера, и если содение ок то создает поток xReader

2) procedure xReader.Execute;
А эта хрень читает сообщения которые нам отправили, и парсит их. Щас сделал что бы парсило само сообщение в читабильном формате (наножу в currentMsg:string, и ники всех человек в группе (именна людей заношу в onlineuser.tstinglist) **обе переменные глобальные**

Функции все работают как нужно, гуд. Вот только беда! Если я делаю xConnectJabber на кнопку и жму ее - идет коннект, и в мемо я буду получать сообщения от других клиентов.

А если я нажму на другую кнопку которая узнает кто сейчас онлайн, то она чуть не так работает. Щас раскажу что не так: функция кнопки -
Код
procedure TMain.Button2Click(Sender: TObject);
var
i : integer;
begin
xSendMsgJabber('Recieve Online List '); //Отпраляем команду Джаббер серверу на получение онлайн людей в чате
Listbox1.Items.Clear; // Чистим listbox, что бы имена пользователей в нем не повторялись  
  for I := 0 to xUsersStringList.count - 1 do  //xUserStringList - тут хранятся имена онлайн пользователей  
  begin
ListBox1.Items.Add(xUsersStringList.Strings[i]); //добавляем каждое имя онлайн юзера
end;
end;


Проблема в том, что xUserStringList неуспевает обновится, в нем хранится старые онлайн клиенты. А если обновить еще раз, то будут клиенты которые должны были быть в предпоследнем нажатие.
Если после xSendMsgJabber('Recieve Online List '); добавить (sleep(3000)) то все работает как нужно. Ну это костыли какие то.
Можно как нибудь обойтись без sleep, а сделать все красиво. у кого какие идеи на этот счет?
 
okeДата: Суббота, 27.12.2014, 18:12 | Сообщение # 2
Постоянный
Зарегистрирован: 15.01.2012
Группа: Пользователи
Сообщений: 124
Статус: Offline
Проблема в том, что xUsersStringList.Strings видимо не успевает обновиться идет быстрое заполнение listbox а потом обновляется массив с никами, проверь мою идею, очисти сначала xUsersStringList.Strings, а потом загрузи все, по идее listbox должен остаться пустым...

Добавлено (27.12.2014, 18:12)
---------------------------------------------
Проблема в том, что xUsersStringList.Strings видимо не успевает обновиться идет быстрое заполнение listbox а потом обновляется массив с никами, проверь мою идею, очисти сначала xUsersStringList.Strings, а потом загрузи все, по идее listbox должен остаться пустым...

 
delphicode » Delphi » Вопросы по Delphi » Чат, multi users online
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz