Форум » GUI » GuiServer » Ответить

GuiServer

alkresin: Привет всем! Представляю свой новый проект - GuiServer. Это инструмент, предоставляющий GUI-функциональность программам, написанным на разных языках, позволяющий создавать для этих языков GUI-фреймворки. Работает это так. Ваша программа при старте запускает GuiServer, присоединяется к нему по tcp/ip и посылает команды-запросы на создание/модификацию GUI-элементов. Естественно, осуществляется и обратная связь. Т.е., в целом ваша программа состоит из двух процессов - основного и GUI, роль которого исполняет GuiServer. Запуск GuiServer'а, соединение и поддержку связи берет на себя небольшая библиотека, которую надо написать дл каждого конкретного языка. Подробнее см. здесь: http://www.kresin.ru/guisrv.html. Сам проект находится на https://github.com/alkresin/guiserver Библиотека для языка Go (для него я это первоначально и затеял): https://github.com/alkresin/external Есть библиотека и для Harbour. Возможно, для него она будет полезна при удаленном запуске, т.е., когда основная программа работает на одном компьютере, а ее интерфейс - на другом.

Ответов - 22, стр: 1 2 All

Haz: alkresin пишет: Есть библиотека и для Harbour. В целом заманчиво. может есть простенький пример? Просто глянуть своими глазами. Без изысков оформления, ясно что это все пока только в проекте.

alkresin: Пример есть, и для Go, и для Harbour - скачайте с github проект, там в каталоге tests - test2.prg и батник для сборки. Для Go - test2.go в https://github.com/alkresin/external

SergKis: alkresin пишет:Есть библиотека и для Harbour. Haz пишет Просто глянуть своими глазами Без сборок, установил, запустил, исходники посмотрел. Для начала пощупать


SergKis: alkresin пишет скачайте с github проект Скачал, содержимое глянул, но ставить все компоненты для сборки не очень еще хочется

SergKis: PS Сколько клиентов к GuiServer connect делать смогут ?

SergKis: alkresin пишет (readme_ru.md):GuiServer может использовать созданные Дизайнером (утилита HwGUI) экранные формы. Т.е. xml файлы с формами от Дизайнера держим в GuiServer (по путям) и с клиента их вызываем для gui работы и события по формам так же отрабатывает guiServer. Я правильно понял ? И все режимы в объеме HwGui 2.18 b3 уже будут доступны ?

alkresin: SergKis пишет: ставить все компоненты для сборки не очень еще хочется Если вы о HwGui, то он нужен только для самого GuiServer, а его можно скачать готовый. Сколько клиентов к GuiServer connect делать смогут ? Один. Обычно ведь приложению требуется главное окно, а GuiServer - такое же приложение, он не может создать несколько главных окон. Поэтому сразу после установления соединения GuiServer закрывает порты. Другой клиент запустит другой экземпляр GuiServer. Т.е. xml файлы с формами от Дизайнера держим в GuiServer (по путям) и ... И все режимы в объеме HwGui 2.18 b3 уже будут доступны ? Да, все так. Формы можно, конечно, держать в любом месте. Для обратной связи в коде формы можно вставлять вызовы fGo() и pGo() - они вызывают функции и процедуры из основной программы.

SergKis: alkresin пишет:Да, все так. Формы можно, конечно, держать в любом месте. Для обратной связи в коде формы можно вставлять вызовы fGo() и pGo() - они вызывают функции и процедуры из основной программы. Пример такой, хотелось бы увидеть в готовом виде, уже все подзабылось по hwgui.

alkresin: Добавил пример - tests/test1.prg и формы в каталоге forms. GuiServer желательно перекомпилировать - завтра выложу новый готовый бинарник (там ошибка при закрытии формы).

SergKis: alkresin пишет: завтра выложу новый готовый бинарник (там ошибка при закрытии формы). Клиента тоже нужно, hb unicode нет под рукой, для сборки. Есть disigner\samples\testdbf1.xml, он будет работать ?

SergKis: alkresin пишет:Обычно ведь приложению требуется главное окно, а GuiServer - такое же приложение, он не может создать несколько главных окон. Спасибо за разъяснение Подумалось, что по схеме letodb работа GuiServera, для клиента main окно не важно (может быть hide всегда), клиент работает с диалоговыми окнами. Потому спросил о connect-ах

SergKis: alkresin пишет:Формы можно, конечно, держать в любом месте. Для обратной связи в коде формы можно вставлять вызовы fGo() и pGo() - они вызывают функции и процедуры из основной программы. Т.е. если формы на сервере, то они могут вызвать выполнение процедуры на движке клиента и получить результат ?

alkresin: SergKis пишет: Клиента тоже нужно, hb unicode нет под рукой, для сборки. К клиенту таких требований нет, hwgui unicode - это для сервера. Единственное - клиент должен все строки передавать в utf-8. Есть disigner\samples\testdbf1.xml, он будет работать ? Должен. Т.е. если формы на сервере, то они могут вызвать выполнение процедуры на движке клиента и получить результат ? Да.

alkresin: Обновил бинарники GuiServer и добавил еще один тест - test1a.prg. Теперь test1.prg демонстрирует использование xml-формы главного окна, а test1a.prg - использование диалоговой формы. Для сборки теста ничего особенного не надо. Для bcc можно использовать имеющийся там bldtest.bat, для mingw или чего другого - собирайте с файлами extgui.prg, extgui_classes.prg, hbip.c, misc.c, listen.c.

alkresin: У меня на сайте есть новый раздел "Заметки": http://www.kresin.ru/notes/index.php, там, в т.ч., регулярно обновляются записи о GuiServer - вместо отсутствующей пока документации.

alkresin: Написал статью на Хабре о GuiServer: https://habr.com/post/427429/

alkresin: Вышел новый релиз, v1.1 Можно загрузить с github'а.

alkresin: Создал форум на гугле по GuiServer и всему, что к нему относится: https://groups.google.com/d/forum/guiserver Да, и релиз 1.2 несколько дней назад вышел. Сделал на нем и External (Golang пакет для GuiServer) Golang Tutor - аналог моего HwGUI Tutor.

alkresin: Меня еще вот какая мысль посетила. GuiServer можно использовать не только как инструмент создания GUI для Golang и пр., но и как инструмент для Harbour - программистов, позволяющий получить доступ ко всем средствам того же Golang - а для него много написано в последние годы. Пишем вот такую ф-ю main для Go: [pre]func main() { if egui.Init("") != 0 { return } egui.OpenMainForm("forms/main.xml") egui.Exit() }[/pre] Эта мини-программа запустит GuiServer и даст ему команду открыть форму главного окна, созданную HwGui Дизайнером. Дальше выполняется код, написанный на Harbour из этой формы. Этот код может вызывать функции из программы на Golang, чтобы сделать что-то, что Golang умеет лучше, чем Harbour - от парсинга веб-страниц до работы с Mongo DB. Т.е., программа на Go будет состоять из вышеприведенной главной ф-ии и ряда др. ф-й, вызываемых из Harbour для реализации наших нужд.

alkresin: В продолжение темы, начатой в предыдущем посте. Написал программу, иллюстрирующую этот подход - mailagent. Это простая программа, которая в цикле через заданный промежуток времени опрашивает ваши почтовые ящики и сигнализирует, когда появляется что-то новое. Можно посмотреть заголовки последних писем и удалить явно ненужные. Таких программ было в свое время немало, но теперь большинство из них не работает из-за ssl и пр. У Harbour тоже не все хорошо с ssl, а на Golang все нужное реализовано. На Go написан вызов формы главного окна и несколько функций для работы с почтой. Вся логика - в коде формы, на Harbour И HwGUI. Программа работает через imap, поэтому адреса надо указывать именно imap-серверов, например, imap.yandex.ru:993. Проверено с yandex.ru, mail.ru, yahoo.com. Сам проект здесь, а готовые бинарники можно скачать по ссылке отсюда.

alkresin: Guiserver теперь можно собрать как библиотеку, чтобы удобнее было писать Harbour+HwGUI приложения, используя возможности Golang. Вот простой пример: [pre2]#include "hwgui.ch" Function Main Local oMainWindow INIT WINDOW oMainWindow MAIN TITLE "Example" AT 200,0 SIZE 400,150 MENU OF oMainWindow MENUITEM "&Exit" ACTION hwg_EndWindow() MENUITEM "&Mandelbrot" ACTION pgo( "fu1",{"1"} ) ENDMENU gs_run( "test14lib.exe" ) ACTIVATE WINDOW oMainWindow Return Nil [/pre2] Здесь функция gs_Run() инициализирует соединение с написанной на Go программой test14lib.exe. Программа загружается, соединяется с нашей и ждет от нее команд. Функция pgo() вызывает функцию из go-программы. Таким образом можно достаточно просто реализовать многие вещи, которые Harbour делает не очень хорошо, или вообще не делает.

alkresin: Написал здесь подробнее об использовании GuiServer как библиотеки.



полная версия страницы