using linker.libs;
namespace linker.messenger.signin.args
{
///
/// 给登录加一个唯一ID的参数
///
public sealed class SignInArgsMachineKeyClient : ISignInArgs
{
public string Name => "machineId";
public async Task Invoke(string host, Dictionary args)
{
string machineKey = SystemIdHelper.GetSystemId();
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Debug($"machine key :{machineKey}");
if (string.IsNullOrWhiteSpace(machineKey))
{
return $"get machine key fail";
}
args.TryAdd("machineKey", machineKey);
await Task.CompletedTask;
return string.Empty;
}
public async Task Validate(SignInfo signInfo, SignCacheInfo cache)
{
await Task.CompletedTask;
return string.Empty;
}
}
///
/// 验证登录唯一参数
///
public sealed class SignInArgsMachineKeyServer : ISignInArgs
{
public string Name => "machineId";
public async Task Invoke(string host, Dictionary args)
{
await Task.CompletedTask;
return string.Empty;
}
///
/// 验证参数
///
/// 新登录参数
/// 之前的登录信息
///
public async Task Validate(SignInfo signInfo, SignCacheInfo cache)
{
//放宽条件,只有已经登录时不能再次登录
if (cache != null && cache.Connected)
{
signInfo.Args.TryGetValue("machineKey", out string keyNew);
cache.Args.TryGetValue("machineKey", out string keyOld);
//之前的登录有唯一编号的,则验证,唯一编号不一样,不允许登录
if (string.IsNullOrWhiteSpace(keyOld) == false && keyNew != keyOld)
{
return $"your id 【{signInfo.MachineId}】 is already online, online machineName {cache.MachineName}";
}
}
await Task.CompletedTask;
return string.Empty;
}
}
}