Replies: 4 comments 6 replies
-
The |
Beta Was this translation helpful? Give feedback.
-
Hi Zeke, thanks for the rapid reply, I realised what the date was ( 4th July in the 'States, 5th here! ) about 5 minutes after typing it! :O I was already doing if (NO_MACHINE || NO_MACHINES || FINGERPRINT_SCOPE_MISMATCH) -> Activate, so it's not that. I am checking for a data.id in the Activation response before showing the "Success" view, so maybe there is an async issue there. At this stage though I can't tell if there is some misconfiguration or misunderstanding of the flow that's causing it. |
Beta Was this translation helpful? Give feedback.
-
NO_OVERAGE is True, the rest of the Policy is based on the Floating License documentation, and it doesn't deviate much from that. I made some headway sorting some of the validate / activate flow issues related to machine limits, and I think I might have solved the exceed machine limit issue. But now I am stuck on the scenario where one machine has activated, and there are enough floating licenses available, but it fails. Initially I got TWO errors returned from the POST to the machines endpoint: "MACHINE_LIMIT_EXCEEDED", and "FINGERPRINT_TAKEN". After a couple of tries that stopped, and instead I just get "HEARTBEAT_DEAD" for any subsequent requests. It's as if once the machine has validated the licensing fails to recognise the fingerprint, and it never lets it use it again. I have no idea how that is meant to work. I've also ended up writing conditions within conditions to test the scenarios I have been seeing, which has made for some pretty awful code :(. I would have expected if the POST request to the validation endpoint (licenses/actions/validate-key) had the fingerprint in it ( I checked logs... it does ) then the back end would know you were just reactivating a machine using that fingerprint. If that isn't the case, how do I handle that? |
Beta Was this translation helpful? Give feedback.
-
You're absolutely right... the "DEAD" machine is still in the list, but it could remain there for any time ( unknown to the user ) based on what's been configured. I'm sending heartbeats at 5 minute intervals, and AFAICT that's working as expected. Any machine I leave running for hours maintains its place in the machines list, and dutifully drops off 5 minutes after I close the application. The "DEAD" scenario is getting triggered when a machine that had a valid license key, for whatever reason, no longer has one. This might seem like an edge case, but I can think of a number of cases where I license key on an existing machine may either change, or be lost. What I am trying to do there is prompt them to enter the correct key, validate it, and get them back to work. I think the problem is understanding all of the unforeseen scenarios that happen in the real world, and trying to come up with a configuration and code that mitigates them. The build of our app from last year behaved fine... because I tested against the expected flows and used it "properly" ;) . The team we gave that build to didn't... they did what real users do ( break stuff! ). Trying to figure out the correct combination of Keygen configuration and client-side behaviour is turning out to be waaay more subtle and complicated than it first appears. I'll try fiddling with the culling / resurrection today. |
Beta Was this translation helpful? Give feedback.
-
Hi, late last year I thought I had our keygen floating license working, and in the small amount of testing I did across several machines it seemed to work as expected. If I set the max machines to, say 3, my app would show a "license quota exceeded" modal if I attempted to start a 4th instance of the app. I based my setup / config off this guide:
https://keygen.sh/docs/choosing-a-licensing-model/floating-licenses/
And code here:
https://github.com/keygen-sh/example-csharp-license-activation/blob/master/Program.cs
Last week we rolled out our Windows app across a small team, and that's when the problems began. I don't quite understand what is happening in a setting where some machines have been validated and others are added later. They all seem to randomly stall before sending their first ping, they validate but fail after. I turned on some debugging on the license check, and on the first validation ( when a user would enter a license key ) I get back "FINGERPRINT_SCOPE_MISMATCH" in the status. I've tried all manner of relaxing settings to no avail - Protected "OFF", Strict "OFF", Fingerprint Scope FALSE, and so on, and so on.
Does anybody have any experience with getting this working in a real-world setting? The combination of correct settings seems like a bit of a holy grail at the moment!
Thanks in advance. :)
Beta Was this translation helpful? Give feedback.
All reactions