| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Как реализовать список пользователей в чате. |
| Автор: ckazu 3.6.2006, 15:25 |
| Приветствую. У меня такая проблема: Пишу чат на Delphi и не знаю как реализовать такую вещь как список пользователей(ников, тех кто сейчас в чате), как енто сделать? |
| Автор: ВасяТриллер 3.6.2006, 16:26 |
| А как ты узнаёшь о существовании собеседника? |
| Автор: ckazu 3.6.2006, 16:38 |
| Пока что никак, только если он сам напишет что нить в чате. Вот я и хочу чтобы было окно которое показывало бы чатовцев.... |
| Автор: Mechanic 3.6.2006, 22:06 |
| TListBox (без картинок), или TListView (если нужны иконки). |
| Автор: Aleksiem 4.6.2006, 13:26 |
| Я так и не понял в чём проблема: в интерфейсе (ты не можешь их отобразить) или в сетевом обмене информацией (можно увидеть только когда пользователь пошлёт сообщение. Если первый вариант, то опиши в чём именно проблема. Если второй, то при входе в чат можно посылать в сеть широковещательные пакеты со своими аттрибутами, кроме того можно каждые нцать секунд посылать пакет пинга, чтобы знать кто сейчас в чате а кто уже вышел, при выходе из чата должен посылаться пакет выхода со всеми аттрибутами. Вообще надо бы поподробней описать чат, на каком протоколе работает как происходит связь с клиентами. |
| Автор: ckazu 4.6.2006, 23:00 | ||
Вот чат, он самый простой. Я хочу чтобы там был просто список юзеров, как это правильнее сделать? |
| Автор: Mechanic 5.6.2006, 00:19 | ||
Нет у меня такого компонента, но скорее всего, нужно в этой процедуре
вылавливать IP отправителя (из ABinding.PeerIP(?)), искать его в списке юзверей, и если нет, то добавлять. Список юзверей можно в StringList (читай ListBox ;)) засунуть. |
| Автор: ckazu 5.6.2006, 14:28 |
| Если не сложно, напиши пожалуйста пример алгоритма, а то я Дельфи только начал и пока что ничего не знаю. |
| Автор: Mechanic 6.6.2006, 23:41 |
А я его уже написал.. А как это будет выглядеть в коде, нужно смотреть в доке на эти компоненты. У меня не все есть из этих компонентов, так что, прости, гипотезов не сочиняю.. |
| Автор: Aleksiem 7.6.2006, 00:37 |
| Как вариант можно вставить в процедуру создания формы, что-то типа IdUDPClient.Send('connect:' + GetLocalIP); а в процедуре IdUDPServerUDPRead анализировать приходящие данные и создавать список пользователей, и соответственно в процедуру OnClose вставить IdUDPClient.Send('disconnect:' + GetLocalIP); и опять же в процедуре IdUDPServerUDPRead анализировать приходящие данные и очищать список пользователей от вышедших. Хотя способ не идеален (могут висеть мертвые пользователи), но для начала подойдёт. |
| Автор: ckazu 7.6.2006, 21:51 | ||
Спасиба тебе, а не подскажешь как можно этот список сделать? Я вот думал через БазыДанных можно. |
| Автор: Aleksiem 8.6.2006, 02:09 | ||||
Честно говоря немного недоехал причём здесь базы данных. Всё можно сделать примерно следующим образом: создаёшь ListBox (пусть будет lbUsers), в обработчике процедуры IdUDPServerUDPRead вставляешь примерно следующее
Писал без делфи так что возможны мелкие ошибки. Примерно так |
| Автор: ckazu 8.6.2006, 12:34 | ||
Не понял вот этого
База данных для того чтобы ник запомнить. Наверное это можно сделать как то подругому, да? |
| Автор: Aleksiem 10.6.2006, 03:08 | ||||||
Просто ищещь строку, содержащую имя выходящего из чата. Примерно так
На выходе iDelete будет содержать индекс строки с текстом User, те с именем выходящего пользователя. |
| Автор: Sinneren 17.1.2010, 14:47 |
| сама реализация понятна, даже для других (вроде) способов(сокеты). я так понял товарищь хочет узнать, как клиент передаст информацию, содержащую свой ник, чтобы сервер это принял уже и там вписал во всякие листбоксы,разослал другим клиентам для их списка и т.п. уже. так вот как получить этот ник с клиента, если тем же способом как и посылка сообщения (у сокетового чата), то он выведет в чат же всё передаваемое, пробовал отправку пакета через winsock, но там нужно у клиенты выставить тип blocking, пакет доходит, но не как строка и только до сервера(или клиента - уже не помню) и при этом режиме не удаётся посылать сабжи вообще. так как же передавать клиенту инфу о себе(ники и прочее)? |