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); } } }