Чат
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Чат
Предлагаю всем желающим принять участие в этом проекте. Участвуя в нём вы разберётесь с:
- Client <-> Server
- LVOOP
- TCP/IP
- MySQL
Подготовитесь к использованию Publish Subscriber паттерном.
Чат будет работать на веб сервере, но в стадии разработки можно воспользоваться локалкой. В принципе этот чат будет похож на любой другой, но будет спрограммирован на нашем любимом . Будет использована база данных нашего форума, т.е. в чате смогут общаться только зарегистрированые на нашем форуме пользователи.
- Client <-> Server
- LVOOP
- TCP/IP
- MySQL
Подготовитесь к использованию Publish Subscriber паттерном.
Чат будет работать на веб сервере, но в стадии разработки можно воспользоваться локалкой. В принципе этот чат будет похож на любой другой, но будет спрограммирован на нашем любимом . Будет использована база данных нашего форума, т.е. в чате смогут общаться только зарегистрированые на нашем форуме пользователи.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
И так приступим.
В проекте имеются несколько классов:
Server
Data Base
S Client
C Client
Класс Server состоит из двух параллельных циклов:
1. Постоянно ждёт соединения и стартует реинтрантный цикл S Clienta
2. Принимает команды от любого из S Client
Класс Data Base будет делать запросы в базу данных, но он пока не реализован.
Класс S Client это репрезентация клиента на стороне сервера. Здесь важно знать что клиент это обьект, на который можно посмотреть и со стороны сервера и со стороны самого клиента (обьективно и субьективно).
Так вот например серверу не обязательно знать все подробности о клиенте, например ему не нужно знать возраст клиента, пол, фамилию и так далее. Зато ему нужно знать такие вещи как идентификационный номер, время последнего сообщения, онлайн или оффлайн ну и прочее.
Клиенту со стороны клиента наоборот не обязательно знать свой идентификационный номе в базе данных, не нужно знать референс на локальную очередь сервера и так далее.
Поэтому есть два разных класса клиента:
- S Client (клиент со стороны сервера)
- C Client (клиент со стороны самого клиента)
В проекте имеются несколько классов:
Server
Data Base
S Client
C Client
Класс Server состоит из двух параллельных циклов:
1. Постоянно ждёт соединения и стартует реинтрантный цикл S Clienta
2. Принимает команды от любого из S Client
Класс Data Base будет делать запросы в базу данных, но он пока не реализован.
Класс S Client это репрезентация клиента на стороне сервера. Здесь важно знать что клиент это обьект, на который можно посмотреть и со стороны сервера и со стороны самого клиента (обьективно и субьективно).
Так вот например серверу не обязательно знать все подробности о клиенте, например ему не нужно знать возраст клиента, пол, фамилию и так далее. Зато ему нужно знать такие вещи как идентификационный номер, время последнего сообщения, онлайн или оффлайн ну и прочее.
Клиенту со стороны клиента наоборот не обязательно знать свой идентификационный номе в базе данных, не нужно знать референс на локальную очередь сервера и так далее.
Поэтому есть два разных класса клиента:
- S Client (клиент со стороны сервера)
- C Client (клиент со стороны самого клиента)
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
И так проект состоит из двух папок:
Теперь развернём все папки:
В папке Server находится всё, что нужно и что касается сервера. В папке Client всё, что касается клиента. Можно было конечно сделать два отдельных проекта, так как одно другого почти не касается. Но для целостности я сделал один проект.Теперь развернём все папки:
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
Начнём сверху вниз:
Класс 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 - главный прибор, который нужно стартовать на стороне клиента
Вот такая концепция проекта на данный момент. Дальше поговорим о реализации. А пока задавайте вопросы, предлагайте идеи и т.д. В общем обсуждаем концепцию
Класс 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 - главный прибор, который нужно стартовать на стороне клиента
Вот такая концепция проекта на данный момент. Дальше поговорим о реализации. А пока задавайте вопросы, предлагайте идеи и т.д. В общем обсуждаем концепцию
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
Очень жаль что ни у кого нет вопросов и предложений
Ну чтож продолжим.
Вот блоковая диаграмма сервера: Сервер состоит из двух параллельных циклов:
1. Ждёт пока какой нибудь клиент захочет открыть соединение. Как только соединение удачно открыто - создаётся новая инстанция клиента и динамически стартуется реинтрантный таск S Client. Референс соединения добавляется в массив всех удачно открытых референсов. Этот массив нам позже пригодится для их закрытия.
2. Ждёт команды (Server Actions) от какого нибудь из S Client Task. Например если пришла команда Exit (как показано на скриншоте), то отсылается команда Exit в верхний цикл и нижний закрывается.
Ну чтож продолжим.
Вот блоковая диаграмма сервера: Сервер состоит из двух параллельных циклов:
1. Ждёт пока какой нибудь клиент захочет открыть соединение. Как только соединение удачно открыто - создаётся новая инстанция клиента и динамически стартуется реинтрантный таск S Client. Референс соединения добавляется в массив всех удачно открытых референсов. Этот массив нам позже пригодится для их закрытия.
2. Ждёт команды (Server Actions) от какого нибудь из S Client Task. Например если пришла команда Exit (как показано на скриншоте), то отсылается команда Exit в верхний цикл и нижний закрывается.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
Теперь начном с разбора приборов справа налево и сверху вниз.
Первый из них это Server Init.vi
Этот прибор просто напросто открывает самую главную очередь (Server Queue). В эту очередь будут поступать команды (Server Action) от клиентов. Тип этой очереди состоит ит кластера:
Server Action
Data
В принципе это всё, что касается этого прибора.
Первый из них это Server Init.vi
Этот прибор просто напросто открывает самую главную очередь (Server Queue). В эту очередь будут поступать команды (Server Action) от клиентов. Тип этой очереди состоит ит кластера:
Server Action
Data
В принципе это всё, что касается этого прибора.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
Небольшие поправки:
1. я решил переименовать C Client (пока мы к нему ещё не приступили) в просто Client. Буква С означала клиента тсо стороны клиента, но я думаю это и так понятно.
2. добавил новую папку Common, которая будет содержать приборы относящиеся ко всему проекту, а не к какому либо определённому классу. Сразу создал там два прибора TCP Read и TCP Write. Эти приборы делают почти то же самое, что и обычные приборы, но в добавок к этому они преобразовывают данные из цифровой строки в нужные нам Action и Остаток.
1. я решил переименовать C Client (пока мы к нему ещё не приступили) в просто Client. Буква С означала клиента тсо стороны клиента, но я думаю это и так понятно.
2. добавил новую папку Common, которая будет содержать приборы относящиеся ко всему проекту, а не к какому либо определённому классу. Сразу создал там два прибора TCP Read и TCP Write. Эти приборы делают почти то же самое, что и обычные приборы, но в добавок к этому они преобразовывают данные из цифровой строки в нужные нам Action и Остаток.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
maxgod145
- user
- Сообщения: 87
- Зарегистрирован: 28 окт 2008, 20:40
- Награды: 1
- Версия LabVIEW: 8,5;8.6
- Откуда: Киев
- Контактная информация:
Re: Чат
Этот чат ну очень похож на сетевую аську!!
Тем более там с регисрацией там решино многое!
Я предлагал бы конечно его предложить для чата, но разбираться в чужом коде никто не будет!!!
Если есть желание я могбы разьяснить, и после доработки можно реализовать как чат на туториале!!!
Тем более там с регисрацией там решино многое!
Я предлагал бы конечно его предложить для чата, но разбираться в чужом коде никто не будет!!!
Если есть желание я могбы разьяснить, и после доработки можно реализовать как чат на туториале!!!
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
maxgod145, этот чат будет как на туториале, а не как аська. То есть будет общий индикатор всех сообщений всех зарегистрированых юзеров.
А про твою аську почитать было бы интересно, да и в коде хотелось бы разобраться. Если бы ты обьяснил шаг за шагом, как ты её делал и из каких приборов она состоит.
Вот вчера ещё помучился немного. Проект всё ещё не рабочий, но уже подходит к завершению и выпуску первой бэта версии.
А про твою аську почитать было бы интересно, да и в коде хотелось бы разобраться. Если бы ты обьяснил шаг за шагом, как ты её делал и из каких приборов она состоит.
Вот вчера ещё помучился немного. Проект всё ещё не рабочий, но уже подходит к завершению и выпуску первой бэта версии.
- Вложения
-
- Chat Folder.zip
- LV 8.2
- (430.08 КБ) 292 скачивания
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
Всё, нашёл золотую середину, что то долго искал. Теперь имею в голове именну ту структуру программы, которая была нужна. Старею потихоньку
Скоро выложу рабочий вариант
Скоро выложу рабочий вариант
-
Chupakabra
- professional
- Сообщения: 360
- Зарегистрирован: 21 янв 2009, 10:50
- Награды: 1
- Версия LabVIEW: 2015
- Откуда: Москва
- Поблагодарили: 4 раза
- Контактная информация:
Re: Чат
Думаю интересно было бы реализовать LabVIEW клиент Jabber-а (хороший компромисс распространенности и открытости протокола). Такой модуль, наверноe, мог быть использован для серьезных проектов. В качестве дистанционного мониторига состояния контрольно-измерительной системы.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
Кому интересно поиграть с прошлой версией чата - скачиваем стартуем и переписываемся!
Сервак в нете рабочий 24 часа в сутки
Сервак в нете рабочий 24 часа в сутки
- Вложения
-
- Chat_Client.zip
- LV 8.2
- (111.43 КБ) 291 скачивание
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Чат
Вчера руки дошли немного доделать этот проект. В принципе он уже пригоден к использованию. Встроил много разных функцийкак в сервере так и в клиенте.
Пока выглядит вот так:
Пока выглядит вот так:
-
Pavel Krivozubov
- professor
- Сообщения: 4421
- Зарегистрирован: 07 фев 2008, 16:39
- Награды: 3
- Версия LabVIEW: 7.0 - 2013
- Откуда: г. Электросталь
- Благодарил (а): 24 раза
- Поблагодарили: 9 раз
- Контактная информация:
Re: Чат
а что, красиво..
кстати может выставишь его на конкурс интерфейсов, а то там тишина какая-то
кстати может выставишь его на конкурс интерфейсов, а то там тишина какая-то
Правила форума
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook