У нас уже реализована собственная система лицензирования, которая ориентируется на максимально доступное число подключений к ключу + текущее количество подключений. Необходимость написания собственной системы была обусловлена сложностью лицензионной политики компании (разделение по проектам и версиям с возможностью на одном сетевом ключе запускать определенное разработчиком количество копий разных программ разных версий). На момент написания этой системы используемый нами ключ Aladdin (позже Sentinel) не позволял в полной мере обслужить наши потребности в лицензировании, поэтому пришлось писать самим пользуясь возможностями предоставляемыми API ключа.
Сейчас же при переходе на ключи Guardant хотелось бы обойтись минимальными изменениями, чтобы быстрее осуществить переход, поэтому менять нашу систему лицензирования мы не будем, по крайней мере на начальном этапе.
Первое с чем я столкнулся: в текущей реализации в памяти ключа прописывается реальный сетевой ресурс ключа (просто число в памяти), что дает возможность ограничить, например, сетевой ключ на 10 мест 7-ю лицензиями. При подключении к такому ключу математика считывает реальный ресурс ключа и получает через функцию API количество подключений (включая текущее). Если подключений больше - отключаемся с соответствующим сообщением (номер ключа/реальное кол-во лицензий). Это только "вершина айсберга" проверок дальше идут проверки по версиям и проектам.
В принципе обойтись без этой первой проверки можно. Достаточно при программировании ключа в таблицу лицензий ключа Guardant записать реальный сетевой ресурс ключа и подключения даже не произойдет (выдаваемое при этом сообщение я еще не видел, но уверен, что оно достаточно информативно для конечного пользователя). Сложность здесь заключается в прописывании этого самого реального сетевого ресурса - просто в определенное место дампа памяти ключа записать это число недостаточно, там еще нужно CRC посчитать и записать, как выяснилось. А сделать это нужно программно (у нас отдельная программа по программированию ключей совмещенная с нашей CRM системой). И еще надо научить утилиту дистанционного обновления ключа это делать. Т.е. ничего нерешаемого, просто дополнительная работа с тем чтобы в этом разобраться (изначально была идея сохранить дамп образа для ключей на 5, 10, 25, 50, 100, 250 мест и записывать дамп целиком в память, а "тонкое" ограничение оставить нашей математике, но без функции определения количества уже подключенных клиентов наша математика не сработает).
Прошу прощения, написал много, сумбурно, но в целом мысль такая: если такая функция появится в обозримом будущем, было бы неплохо, если же в планах этого нет - мы справимся и без этого, просто это будет дольше :-)