Skip to content

Files

Latest commit

a407f9c · Jan 28, 2025

History

History
54 lines (42 loc) · 8.45 KB

readme_ru.md

File metadata and controls

54 lines (42 loc) · 8.45 KB

GuiServer

Это приложение, предоставляющее GUI сервис - возможность относительно легко создавать GUI фреймворки для разных языков программирования. Соединение с вашей программой осуществляется через tcp/ip сокеты и через обычные файлы. Само приложение написано на Harbour (см. http://www.kresin.ru/harbour.html) и C, GUI обеспечивается библиотекой HwGUI (http://www.kresin.ru/hwgui.html). Официальная web-страница проекта - http://www.kresin.ru/guisrv.html Присоединяйтесь к https://groups.google.com/d/forum/guiserver для обсуждения GuiServer, External и связанных с ними тем.

Введение

Началось все с проблемы выбора GUI библиотеки для языка Go. Не то, чтобы таких библиотек не было, но все они по тем или иным причинам далеко не идеальны. Я, правда, ни одной из них не пробовал в деле сам - ограничился просмотром описаний наиболее популярных и чтением обзоров. Вот тут и возникла такая мысль: почему бы не взвалить всю GUI-функциональность на прекрасно мне знакомую связку Harbour+HwGUI? Идея заключается в следующем. Наше приложение, написанное на Go, при старте запускает отдельный процесс - GuiServer, связывается с ним по tcp/ip и передает ему команды, какие GUI объекты создать и что с ними делать. Т.е., любая инструкция, касающаяся интерфейса, кодируется и отправляется этому процессу, GUI-серверу, а тот отображает все, что требуется, на экране. Естественно, надо обеспечить и обратную связь. Для реализации такого подхода надо написать, собственно, сам GUI-сервер (это и есть рассматриваемый здесь проект) и библиотеку для Go, которая обеспечит связь с GUI-сервером, трансляцию и передачу сообщений туда-обратно. Написать такую библиотеку гораздо проще, чем традиционный GUI-фреймворк: вся сложная функциональность нижнего уровня уже реализована GUI-сервером, надо только обеспечить выполнение протокола связи с ним. Эту библиотеку вы можете найти здесь рядом: https://github.com/alkresin/external

Сразу возникает и следующая мысль: а почему только Go? Почему бы не использовать тот же самый GUI-сервер и для других языков? Python, например, или даже, не смейтесь, PHP или Perl? При определенных обстоятельствах это может оказаться полезным и для многих других языков. Надо только написать для них соответствующие библиотеки, что, как уже говорилось, гораздо проще, чем реализовывать GUI-функциональность с нуля. Есть и еще одно интересное применение этой идеи: удаленное исполнение. Основная программа выполняется на одном из компьютеров в сети, а весь интерфейс - у вас на компьютере.

Особенности

GuiServer - кроссплатформенное решение, он может быть собран под Windows, Linux/Unix. Возможна сборка и под Mac OS, поскольку там есть и GNU C, и GTK. GuiServer обеспечивает то, что называется "native look and feel" - естественный внешний вид для ОС, на которой он используется - благодаря тому, что HwGUI под Windows использует WinAPI, а под LInux/Unix - GTK2. GuiServer предоставляет в ваше распоряжение мощный встроенный язык - сам Harbour. Вы можете передавать ему фрагменты кода любого размера для исполнения. Это позволяет, в частности, реализовать часть обработчиков событий непосредственно в процессе GuiServer и не отвлекать на мелкие детали основной процесс. GuiServer может использовать созданные Дизайнером (утилита HwGUI) экранные формы. GuiServer предоставляет вам возможности печати от HwGUI, в том числе - с помощью заранее подготовленных Дизайнером форм отчетов.

Сборка

Исходные файлы проекта: source/guiserver.prg source/fconnect.prg source/hbip.c source/listen.c source/misc.c

Для сборки приложения из исходников вам понадобятся Harbour, HwGUI (Unicode версия) и какой-нибудь C компилятор.

Windows:

Build.bat предназначен для сборки при помощи компилятора Borland C. Возможно, вам потребуется изменить в нем переменные HB_INSTALL и HWGUI_INSTALL - прописать там пути к Harbour и HwGUI в вашей системе.

Linux:

Сборка осуществляется при помощи build.sh. Возможно, вам потребуется изменить в нем переменные HRB_INS и HWGUI_DIR - прописать там пути к Harbour и HwGUI в вашей системе.

Загрузка

Готовые бинарники для Windows и Linux можно загрузить с http://www.kresin.ru/guisrv.html

Установка

Просто скопируйте исполняемый файл в удобное место. Чтобы не надо было указывать путь к нему в своем приложении, пропишите это место в переменной окружения PATH.

Примечания

Файлы extgui.prg, extgui_classes.prg - реализация библиотеки для связи с GUI-сервером на самом Harbour, prg в каталоге tests - тесты, написанные с ее использованием. Написано это в основном для отладки сервера, хотя, возможно, библиотека может быть использована для "удаленного исполнения", т.е., когда основная программа крутится на одном компьютере в сети, а GUI - на другом.

Внимание! С 6 октября 2023 года нас вынуждили использовать двухфакторную идентификацию для того, чтобы входить на github.com под своим аккаунтом. Я пока могу делать git push из командной строки, но не могу использовать другие сервисы, например, отвечать на вопросы. Поэтому новые проекты я открываю на https://gitflic.ru/, Sourceforge, или где-то еще. Следите за новостями на моем сайте http://www.kresin.ru/