using linker.libs;
using linker.messenger.signin;
using linker.messenger.api;
using linker.libs.extends;
using linker.libs.web;
namespace linker.messenger.wakeup
{
public sealed class WakeupApiController : IApiController
{
private readonly IMessengerSender messengerSender;
private readonly SignInClientState signInClientState;
private readonly IAccessStore accessStore;
private readonly ISignInClientStore signInClientStore;
private readonly ISerializer serializer;
private readonly WakeupTransfer wakeupTransfer;
public WakeupApiController(IMessengerSender messengerSender, SignInClientState signInClientState, IAccessStore accessStore,
ISignInClientStore signInClientStore, ISerializer serializer, WakeupTransfer wakeupTransfer)
{
this.messengerSender = messengerSender;
this.signInClientState = signInClientState;
this.accessStore = accessStore;
this.signInClientStore = signInClientStore;
this.serializer = serializer;
this.wakeupTransfer = wakeupTransfer;
}
///
/// 获取列表
///
///
///
public async Task> Get(ApiControllerParamsInfo param)
{
WakeupSearchForwardInfo info = param.Content.DeJson();
if (info.MachineId == signInClientStore.Id)
{
if (accessStore.HasAccess(AccessValue.WakeupSelf) == false) return new List();
return wakeupTransfer.Get(info.Data);
}
if (accessStore.HasAccess(AccessValue.WakeupOther) == false) return new List();
var resp = await messengerSender.SendReply(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)WakeupMessengerIds.GetForward,
Payload = serializer.Serialize(info)
}).ConfigureAwait(false);
if (resp.Code == MessageResponeCodes.OK)
{
return serializer.Deserialize>(resp.Data.Span);
}
return new List();
}
///
/// 添加
///
///
///
public async Task Add(ApiControllerParamsInfo param)
{
WakeupAddForwardInfo info = param.Content.DeJson();
if (info.MachineId == signInClientStore.Id)
{
if (accessStore.HasAccess(AccessValue.WakeupSelf) == false) return false;
return wakeupTransfer.Add(info.Data);
}
if (accessStore.HasAccess(AccessValue.WakeupOther) == false) return false;
return await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)WakeupMessengerIds.AddForward,
Payload = serializer.Serialize(info)
}).ConfigureAwait(false);
}
///
/// 删除
///
///
///
public async Task Remove(ApiControllerParamsInfo param)
{
WakeupRemoveForwardInfo info = param.Content.DeJson();
if (info.MachineId == signInClientStore.Id)
{
if (accessStore.HasAccess(AccessValue.WakeupSelf) == false) return false;
return wakeupTransfer.Remove(info.Id);
}
if (accessStore.HasAccess(AccessValue.WakeupOther) == false) return false;
return await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)WakeupMessengerIds.RemoveForward,
Payload = serializer.Serialize(info)
}).ConfigureAwait(false);
}
///
/// 串口列表
///
///
///
public string[] ComNames(ApiControllerParamsInfo param)
{
return wakeupTransfer.ComNames();
}
///
/// hid列表
///
///
///
public string[] HidIds(ApiControllerParamsInfo param)
{
return wakeupTransfer.HidIds();
}
///
/// 发送命令
///
///
///
public async Task Send(ApiControllerParamsInfo param)
{
WakeupSendForwardInfo info = param.Content.DeJson();
if (info.MachineId == signInClientStore.Id)
{
if (accessStore.HasAccess(AccessValue.WakeupSelf) == false) return false;
_ = wakeupTransfer.Send(info.Data);
return true;
}
if (accessStore.HasAccess(AccessValue.WakeupOther) == false) return false;
return await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)WakeupMessengerIds.SendForward,
Payload = serializer.Serialize(info)
}).ConfigureAwait(false);
}
}
}