Add Start and Position to User
This commit is contained in:
@@ -3,25 +3,51 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using YamlDotNet.Serialization;
|
||||||
|
|
||||||
namespace Akari.Provider.WaveshareUART.Users
|
namespace Akari.Provider.WaveshareUART.Users
|
||||||
{
|
{
|
||||||
public class User
|
public class User
|
||||||
{
|
{
|
||||||
public string Name { get; private set; }
|
public string Name { get; private set; }
|
||||||
|
|
||||||
public string Token { get; private set; }
|
public string Token { get; private set; }
|
||||||
public ushort RangeStart { get; private set; }
|
|
||||||
|
public ushort Start { get; private set; }
|
||||||
|
public ushort Position { get; private set; }
|
||||||
|
|
||||||
|
[YamlIgnore()]
|
||||||
|
public int Count => Position - Start;
|
||||||
|
[YamlIgnore()]
|
||||||
|
public IEnumerable<int> ValidPositions => Enumerable.Range(Start, Count);
|
||||||
|
|
||||||
public User()
|
public User()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public User(string name, string token, ushort rangeStart)
|
public User(string name, string token, ushort start)
|
||||||
{
|
{
|
||||||
Name = name;
|
Name = name;
|
||||||
Token = token;
|
Token = token;
|
||||||
RangeStart = rangeStart;
|
Start = start;
|
||||||
}
|
Position = Start;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IncrementPosition()
|
||||||
|
{
|
||||||
|
if (Position - Start < UsersManager.RangeLength)
|
||||||
|
{
|
||||||
|
Position++;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsInRange(int position) => position >= Start && position < Position;
|
||||||
|
|
||||||
|
public override string ToString() => Name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,13 +11,15 @@ namespace Akari.Provider.WaveshareUART.Users
|
|||||||
{
|
{
|
||||||
public class UsersManager
|
public class UsersManager
|
||||||
{
|
{
|
||||||
|
public const int RangeLength = 20;
|
||||||
public const string UsersFilePath = "users.yaml";
|
public const string UsersFilePath = "users.yaml";
|
||||||
|
|
||||||
private readonly List<User> _users;
|
|
||||||
private IDeserializer _deserializer;
|
|
||||||
private ISerializer _serializer;
|
|
||||||
|
|
||||||
public int Count => _users.Count;
|
public int Count => _users.Count;
|
||||||
|
public IReadOnlyList<User> Users => _users.AsReadOnly();
|
||||||
|
|
||||||
|
private readonly List<User> _users;
|
||||||
|
private readonly IDeserializer _deserializer;
|
||||||
|
private readonly ISerializer _serializer;
|
||||||
|
|
||||||
public UsersManager()
|
public UsersManager()
|
||||||
{
|
{
|
||||||
@@ -43,23 +45,34 @@ namespace Akari.Provider.WaveshareUART.Users
|
|||||||
}
|
}
|
||||||
|
|
||||||
public User this[string name] => _users.FirstOrDefault(u => u.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
|
public User this[string name] => _users.FirstOrDefault(u => u.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
|
||||||
|
public User this[ushort start] => _users.FirstOrDefault(u => u.Start == start);
|
||||||
|
|
||||||
public void Add(User user)
|
public void Add(string name, string token)
|
||||||
{
|
{
|
||||||
_users.Add(user);
|
// Find first available position
|
||||||
|
var usedStarts = _users.Select(u => u.Start).ToHashSet();
|
||||||
|
int start;
|
||||||
|
|
||||||
Save();
|
for (start = 0; start < ushort.MaxValue; start += RangeLength)
|
||||||
|
{
|
||||||
|
if (!usedStarts.Contains((ushort)start))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IReadOnlyCollection<User> GetAll()
|
// Add user
|
||||||
{
|
_users.Add(new User(name, token, (ushort)start));
|
||||||
return _users.AsReadOnly();
|
|
||||||
|
Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Remove(User user)
|
public void Remove(User user)
|
||||||
{
|
{
|
||||||
_users.Remove(user);
|
_users.Remove(user);
|
||||||
|
|
||||||
|
// TODO Remove fingerprints
|
||||||
|
|
||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +80,8 @@ namespace Akari.Provider.WaveshareUART.Users
|
|||||||
{
|
{
|
||||||
_users.Clear();
|
_users.Clear();
|
||||||
|
|
||||||
|
// TODO Remove fingerprints
|
||||||
|
|
||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user