using Akari.Provider.WaveshareUART.Users; using System; using System.Threading; using WaveshareUARTFingerprintSensor; namespace Akari.Provider.WaveshareUART { public class MQTTService { public FingerprintSensor FingerprintSensor => WaveshareUARTProvider.Instance.FingerprintSensor; public UsersManager UsersManager => WaveshareUARTProvider.Instance.UsersManager; public MQTTService() { } public void Start() { Console.WriteLine("Starting MQTT service..."); InitMQTT(); Console.WriteLine($"There is {UsersManager.Count} users registered"); FingerprintSensor.Waked += FingerprintSensor_Waked; FingerprintSensor.Sleep(); Console.WriteLine("Waiting for fingerprints..."); Thread.Sleep(-1); FingerprintSensor.Waked -= FingerprintSensor_Waked; } private void InitMQTT() { // TODO } private void SendAuth(User user) { // TODO } private void FingerprintSensor_Waked(FingerprintSensor sender) { FingerprintSensor.Wake(); if (FingerprintSensor.TryComparison1N(out var userInfo)) { if (TryFindUser(userInfo.userID, out var user)) { Console.WriteLine($"{user.Name} fingerprint recognized"); SendAuth(user); } else { Console.WriteLine($"Found unknown fingerprint with id {userInfo.userID}"); } } FingerprintSensor.Sleep(); } private bool TryFindUser(ushort userID, out User user) { ushort id = (ushort)((userID / UsersManager.RangeLength) * UsersManager.RangeLength + UsersManager.RangeStart); if (UsersManager[id] is User u) { user = u; return true; } user = default; return false; } } }