Чат по локальной сети средствами Delphi 7

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
ntoskrnl.dll
Сообщения: 12
Зарегистрирован: 16 янв 2007, 14:37

23 апр 2007, 12:25

Решил написать программу для чата по локальной сети.
Идея следующая:
На сервере располагается Сервер базы данных и Remote Data Module.
База данных представляет собой файл формата MS Acces и содержит в себе 3 таблицы:
  1. Chat - здесь будут располагаться чат и все сообщения пользователей
  2. Users - здесь будут аккаунты юзеров
  3. OnlineUsers - здесь будут имена пользоателей, которые в данный момент в чате
Клиентские проги будут обращаться к базе даных через DCOMConnection и посылать/читать от туда сообщения.

Но есть большая проблёма! :(
Я не знаю как отслеживать события изменения таблицы, когда необходимо отобразить новое сообщение в окне чата.
Я не знаю как выводить текст в TRichEdit разным цветом.
Я не знаю как реализовать передачу файлов через Локалку.

Помогите пожалуйста.
А то мой проект (если его можно назвать проектом) просто сгорит! :(

Заранее спасибо!...
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

23 апр 2007, 12:53

М-да, подобной реализации чата мне ещё встречать не приходилось.
В своей практике, всё что касается реализации COM объектов я стараюсь избегать эту технологию. Примеров этому тьма (из моей практики, приводить не буду), да и то, что Microsoft сама отказывается от дальнейшего развития идеи COM и делает ставку на .NET, тоже о чем-то да говорит (мне достаточно давно доводилось читать вводную статью про .NET, так там так и было сказано: COM отстой, и Microsoft думая о своих клиентах и предлагает технологию круче).

Вообще-то большинство идей чата основываются на сокетах. TClientSocket и TServerSocket. Может тебе в эту сторону порыть, да и в примерах с Delphi есть уже готовая реализация чата на сокетах. Кажется так и называется Chat.
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

23 апр 2007, 13:40

М-да, подобной реализации чата мне ещё встречать не приходилось.
В своей практике, всё что касается реализации COM объектов я стараюсь избегать эту технологию. Примеров этому тьма (из моей практики, приводить не буду), да и то, что Microsoft сама отказывается от дальнейшего развития идеи COM и делает ставку на .NET, тоже о чем-то да говорит (мне достаточно давно доводилось читать вводную статью про .NET, так там так и было сказано: COM отстой, и Microsoft думая о своих клиентах и предлагает технологию круче).

Вообще-то большинство идей чата основываются на сокетах. TClientSocket и TServerSocket. Может тебе в эту сторону порыть, да и в примерах с Delphi есть уже готовая реализация чата на сокетах. Кажется так и называется Chat.
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

23 апр 2007, 13:41

блин, тормазнул :)
ntoskrnl.dll
Сообщения: 12
Зарегистрирован: 16 янв 2007, 14:37

23 апр 2007, 13:42

Ладно. Тогда подскажите какую-нить инфо по WinSock...
Tahank you...
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

27 апр 2007, 07:46

Хочешь я тебе уже готовый кину с исходниками? Тоже делать было нечего, решил навоять. А пользуюсь все равно не своим а уже готовым бесплатным Intranet Chat
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

28 апр 2007, 22:34

ntoskrnl.dll, :) Если хотите сделать именно с базой данных, то можно взять InterBase. Там есть Alert-ы. Все приложения подписываются на алерт, скажем, "Alert_Room1". Если обно приложение отправляет такой алерт, после постинга сообщения, то все кто подписан, его получат.
:) Такой же механизм есть в Oracle, но это уже будет совсем издевательство! :)

А если серьезно, то для широковещательных рассылок почитайте про mailslot-ы. (справка по Win32 API)
Работа с mailslot-ами абсолютно аналогична работе c файлами, просто с точки зрения ОС эти виртуальные файлы обеспечивают IPC (Inter process communication) - т.е. один процесс в него как бы пишет, а все (напрмиер все в домене или рабочей группе) одновременно читают.

Кстати, вместо сокетов можно организовать обмен по майлслотам и пайпам (Pipes - это как Mailslots, только не широковещательные, а между только двумя процессами.)

Теоретически, на майлслотах можно сделать полностью бессервеный чат.
Spil
Сообщения: 6
Зарегистрирован: 27 апр 2007, 14:37

03 май 2007, 23:40

А почему бы не воспользоваться Indy? Там есть IdIRC - на мой взгляд удобное решение. Читать Indy Help и RFC1459 http://www.irchelp.org/irchelp/rfc/rfc.html
По соотношению цена-качество, халявное пиво не имеет конкуренции впринципе!
Ответить