Тема: Лицензирование модульного приложения

Добрый день!

Есть приложение, состоящее из достаточно большого числа модулей (десятки). Например, это графический редактор, который содержит модули рисования линий, прямоугольников, кругов и т.д. Каждый покупатель программы может купить себе определенный набор модулей, а остальные будут для него неактивны (например, неактивны кнопки). Причем он может купить, например, пять рабочих мест для рисования линий и одно рабочее место для рисования кругов. Для защиты используется сетевой ключ.

Вопрос: можно использовать для защиты этой программы таблицу лицензий? Если да, то как наиболее грамотно это сделать? Создавать для каждого модуля свою сессию работы с ключом? Не будет ли это очень медленно?

Re: Лицензирование модульного приложения

Добрый день,

Уточните, пожалуйста, с какими инструментами разработки вы работаете, Guardant SDK или Guardant SLK? Какой версии?
Также уточните, какими ключами вы пользуетесь, программными или аппаратными?

Re: Лицензирование модульного приложения

Мы пользуемся аппаратными ключами Guardant Sign Net, с которыми общаемся самостоятельно через основное API из Guardant SDK.

Re: Лицензирование модульного приложения

Версия GuardantSDK-7_0-update_8.msi

Re: Лицензирование модульного приложения

Добрый день,

Да, можно использовать таблицу лицензий для такого приложения.

Рекомендуем рассмотреть такой вариант:

каждый модуль программы — отдельная запись в таблице лицензий;
для каждого модуля задается свое число лицензий;
например: “Линии” = 5, “Круги” = 1.

проверять и занимать лицензию при фактическом использовании модуля;
после завершения работы с модулем освобождать ее;

По производительности - замедление возможно только если слишком часто создавать/закрывать сессии и постоянно обращаться к ключу.

Re: Лицензирование модульного приложения

Хорошо.
А если пользователь загружает готовый файл, который использует сразу 50 модулей? Нужно будет их сразу проверить. Не будет лм сильно тормозить?

Re: Лицензирование модульного приложения

steevis пишет:

Хорошо.
А если пользователь загружает готовый файл, который использует сразу 50 модулей? Нужно будет их сразу проверить. Не будет лм сильно тормозить?

Добрый день.
Ключ обрабатывает один запрос в единицу времени, то есть, в случае одновременного запуска всех модулей выстроится очередь из пятидесяти запросов. На обработку запроса уходит время, но исчисляется это время миллисекундами, так что ожидаем минимальную задержку в таком кейсе. Но более точную картину вы увидите при тестировании реального проекта.

Re: Лицензирование модульного приложения

Еще вопрос.
А можно ли с помощью API посмотреть число свободных модулей и кто их занял?

Re: Лицензирование модульного приложения

steevis пишет:

Еще вопрос.
А можно ли с помощью API посмотреть число свободных модулей и кто их занял?

В технологии Guardant SDK такой возможности нет.
Информация о количестве свободных лицензий и о том, кто их занял, доступна на стороне сервера сетевых лицензий, но не через API Guardant SDK.

В современной технологии лицензирования и защиты Guardant Station такая возможность уже реализована.

При этом обращаем внимание, что Guardant SDK и Guardant Station — это разные и несовместимые технологии. Поэтому при переходе на Guardant Station потребуется существенная переработка проекта защиты и его адаптация под новую технологию.

Re: Лицензирование модульного приложения

Теперь вопрос о том, как правильно использовать таблицу лицензий.

У нас программа поставляется по принципу: базис (запуск самой программы и минимального функционала) + модули. Допустим, пользователь купил 5 рабочих мест с базовым функционалом, 5 лицензий на модуль "Линии" и 2 лицензии на модуль "Круги". Таким образом, одновременно 5 рабочих мест запускают программу и рисуют линии, а только 2 из них дополнительно рисуют круги. Правильно ли я понял, что таблица лицензий в этом случае имеет вид:
общий ресурс ключа - 5
модуль 0 (линии) - 5
модуль 1 (круги) - 2 ?

Или для базиса тоже нужно делать свой "модуль"?

Следующий вопрос, как активировать модули в программе. Я так понимаю, что при запуске самой программы (базиса) нужно выполнить GrdLogin с номером модуля 0xffffffff,  а при активации модулей вызвать эту же функцию со значениями 0 и 1. Правильно?

И последнее. Функция GrdLogout закрывает сразу все модули? Если ли возможность освободить только один модуль, не закрывая программы? Например, чтобы пользователь рядом с модулем имел возможность нажать на кнопку "Отключить". Или нужно закрыть все, а потом заново открыть все, кроме одного модуля?

Re: Лицензирование модульного приложения

Еще один технический вопрос.

В процессе работы с ключом каждый запуск GrdLogin создает новый сокет, а все остальные операции (шифрование и т.п.) проводится уже с установленным соединением? Или не так? Хотелось бы примерно понимать картину, чтобы оптимизировать запуск и использование сетевого ключа в отдельных модулях. Могут быть случаи, когда сервер ключей находится в другом городе. Короче, знать, что быстро, а что медленно.