Чат

Делись идеей, получай поддержку и критику!
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Чат

Сообщение Eugen Graf »

Предлагаю всем желающим принять участие в этом проекте. Участвуя в нём вы разберётесь с:
- Client <-> Server
- LVOOP
- TCP/IP
- MySQL
Подготовитесь к использованию Publish Subscriber паттерном.

Чат будет работать на веб сервере, но в стадии разработки можно воспользоваться локалкой. В принципе этот чат будет похож на любой другой, но будет спрограммирован на нашем любимом :labview: . Будет использована база данных нашего форума, т.е. в чате смогут общаться только зарегистрированые на нашем форуме пользователи.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

И так приступим.
В проекте имеются несколько классов:
Server
Data Base
S Client
C Client

Класс Server состоит из двух параллельных циклов:
1. Постоянно ждёт соединения и стартует реинтрантный цикл S Clienta
2. Принимает команды от любого из S Client

Класс Data Base будет делать запросы в базу данных, но он пока не реализован.

Класс S Client это репрезентация клиента на стороне сервера. Здесь важно знать что клиент это обьект, на который можно посмотреть и со стороны сервера и со стороны самого клиента (обьективно и субьективно).
Так вот например серверу не обязательно знать все подробности о клиенте, например ему не нужно знать возраст клиента, пол, фамилию и так далее. Зато ему нужно знать такие вещи как идентификационный номер, время последнего сообщения, онлайн или оффлайн ну и прочее.
Клиенту со стороны клиента наоборот не обязательно знать свой идентификационный номе в базе данных, не нужно знать референс на локальную очередь сервера и так далее.
Поэтому есть два разных класса клиента:
- S Client (клиент со стороны сервера)
- C Client (клиент со стороны самого клиента)
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

И так проект состоит из двух папок:
Chat_Prj1.png
Chat_Prj1.png (36.91 КБ) 10970 просмотров
В папке Server находится всё, что нужно и что касается сервера. В папке Client всё, что касается клиента. Можно было конечно сделать два отдельных проекта, так как одно другого почти не касается. Но для целостности я сделал один проект.

Теперь развернём все папки:
Chat_Prj2.png
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

Начнём сверху вниз:
Класс Data Base пока не реализован, как я говорил выше.

Класс S Client состоит из:
S Client.ctl - кластер, содержащий все необходимые свойства класса клиента со стороны сервера
S Client Task - это реинтрантный параллельный прибор-цикл, для каждого каждого клиента будет запущен такой параллельный таск. То есть сколько клиентов онлайн, столько таких тасков имеется в программе
S Client Start Task - прибор динамически запускающий вышеописаный таск
остальные приборы вспомогательные (member functions), можно о них пока не говорить.

Класс Server состоит из:
Server.ctl - содержит все свойства сервера
Server Main - самый главный прибор сервера, который нужно стартовать
Server Action.ctl - содержит список команд (enum typedef) на которые сервер как то должен реагировать
остальное пока неважно.

Переходим к стороне клиента, которая независима от вышеописаного.
Папка Client содержит класс C Client:
C Client.ctl - кластер, содержащий необходимые свойства клиента со стороны клиента
C Client Main - главный прибор, который нужно стартовать на стороне клиента

Вот такая концепция проекта на данный момент. Дальше поговорим о реализации. А пока задавайте вопросы, предлагайте идеи и т.д. В общем обсуждаем концепцию :wink:
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

Очень жаль что ни у кого нет вопросов и предложений :cantbe:
Ну чтож продолжим.

Вот блоковая диаграмма сервера:
Server Main.png
Сервер состоит из двух параллельных циклов:
1. Ждёт пока какой нибудь клиент захочет открыть соединение. Как только соединение удачно открыто - создаётся новая инстанция клиента и динамически стартуется реинтрантный таск S Client. Референс соединения добавляется в массив всех удачно открытых референсов. Этот массив нам позже пригодится для их закрытия.
2. Ждёт команды (Server Actions) от какого нибудь из S Client Task. Например если пришла команда Exit (как показано на скриншоте), то отсылается команда Exit в верхний цикл и нижний закрывается.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

Теперь начном с разбора приборов справа налево и сверху вниз.

Первый из них это Server Init.vi
Этот прибор просто напросто открывает самую главную очередь (Server Queue). В эту очередь будут поступать команды (Server Action) от клиентов. Тип этой очереди состоит ит кластера:
Server Action
Data

В принципе это всё, что касается этого прибора.
Вложения
Server Init.png
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

Небольшие поправки:
1. я решил переименовать C Client (пока мы к нему ещё не приступили) в просто Client. Буква С означала клиента тсо стороны клиента, но я думаю это и так понятно.
2. добавил новую папку Common, которая будет содержать приборы относящиеся ко всему проекту, а не к какому либо определённому классу. Сразу создал там два прибора TCP Read и TCP Write. Эти приборы делают почти то же самое, что и обычные приборы, но в добавок к этому они преобразовывают данные из цифровой строки в нужные нам Action и Остаток.
Rename.png
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

По просьбе трудющихся выкладываю проект в том состоянии, в каком он есть. То есть структура и всё вышеописанное. Предупреждаю проект пока не рабочий и требует дальнейшей разработки.

Для версии :labview: 8.2
Вложения
Chat.zip
(169.68 КБ) 299 скачиваний
Аватара пользователя
maxgod145

Activity
user
user
Сообщения: 87
Зарегистрирован: 28 окт 2008, 20:40
Награды: 1
Версия LabVIEW: 8,5;8.6
Откуда: Киев
Контактная информация:

Re: Чат

Сообщение maxgod145 »

Этот чат ну очень похож на сетевую аську!!
Тем более там с регисрацией там решино многое!
Я предлагал бы конечно его предложить для чата, но разбираться в чужом коде никто не будет!!!
Если есть желание я могбы разьяснить, и после доработки можно реализовать как чат на туториале!!!
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

maxgod145, этот чат будет как на туториале, а не как аська. То есть будет общий индикатор всех сообщений всех зарегистрированых юзеров.
А про твою аську почитать было бы интересно, да и в коде хотелось бы разобраться. Если бы ты обьяснил шаг за шагом, как ты её делал и из каких приборов она состоит.

Вот вчера ещё помучился немного. Проект всё ещё не рабочий, но уже подходит к завершению и выпуску первой бэта версии.
Вложения
Chat Folder.zip
LV 8.2
(430.08 КБ) 292 скачивания
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

Всё, нашёл золотую середину, что то долго искал. Теперь имею в голове именну ту структуру программы, которая была нужна. Старею потихоньку :crazy:
Скоро выложу рабочий вариант :clap:
Аватара пользователя
Chupakabra

Tutorials
professional
professional
Сообщения: 360
Зарегистрирован: 21 янв 2009, 10:50
Награды: 1
Версия LabVIEW: 2015
Откуда: Москва
Поблагодарили: 4 раза
Контактная информация:

Re: Чат

Сообщение Chupakabra »

Думаю интересно было бы реализовать LabVIEW клиент Jabber-а (хороший компромисс распространенности и открытости протокола). Такой модуль, наверноe, мог быть использован для серьезных проектов. В качестве дистанционного мониторига состояния контрольно-измерительной системы.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

Кому интересно поиграть с прошлой версией чата - скачиваем стартуем и переписываемся!
Сервак в нете рабочий 24 часа в сутки :super:
Вложения
Chat_Client.zip
LV 8.2
(111.43 КБ) 291 скачивание
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Чат

Сообщение Eugen Graf »

Вчера руки дошли немного доделать этот проект. В принципе он уже пригоден к использованию. Встроил много разных функцийкак в сервере так и в клиенте.
Пока выглядит вот так:
Вложения
Chat.png
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: Чат

Сообщение Pavel Krivozubov »

а что, красиво..
кстати может выставишь его на конкурс интерфейсов, а то там тишина какая-то
Ответить

Вернуться в «Проекты»