using linker.libs; using linker.libs.api; using linker.libs.extends; using linker.messenger.api; using linker.messenger.flow.messenger; using linker.messenger.relay.client; using linker.messenger.sforward.client; using linker.messenger.signin; namespace linker.messenger.flow { public sealed class FlowApiController : IApiController { private readonly IMessengerSender messengerSender; private readonly SignInClientState signInClientState; private readonly IRelayClientStore relayClientStore; private readonly ISForwardClientStore sForwardClientStore; private readonly ISerializer serializer; public FlowApiController(IMessengerSender messengerSender, SignInClientState signInClientState, IRelayClientStore relayClientStore, ISForwardClientStore sForwardClientStore, ISerializer serializer) { this.messengerSender = messengerSender; this.signInClientState = signInClientState; this.relayClientStore = relayClientStore; this.sForwardClientStore = sForwardClientStore; this.serializer = serializer; } public async Task GetFlows(ApiControllerParamsInfo param) { MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap { Connection = signInClientState.Connection, MessengerId = (ushort)FlowMessengerIds.List, }); if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0) { return serializer.Deserialize(resp.Data.Span); } return new FlowInfo(); } public async Task> GetMessengerFlows(ApiControllerParamsInfo param) { MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap { Connection = signInClientState.Connection, MessengerId = (ushort)FlowMessengerIds.Messenger, }); if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0) { return serializer.Deserialize>(resp.Data.Span); } return new Dictionary(); } [Access(AccessValue.SForwardFlow)] public async Task GetSForwardFlows(ApiControllerParamsInfo param) { SForwardFlowRequestInfo info = param.Content.DeJson(); info.SecretKey = sForwardClientStore.SecretKey; MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap { Connection = signInClientState.Connection, MessengerId = (ushort)FlowMessengerIds.SForward, Payload = serializer.Serialize(info) }); if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0) { return serializer.Deserialize(resp.Data.Span); } return new SForwardFlowResponseInfo(); } [Access(AccessValue.RelayFlow)] public async Task GetRelayFlows(ApiControllerParamsInfo param) { RelayFlowRequestInfo info = param.Content.DeJson(); info.SecretKey = relayClientStore.Server.SecretKey; MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap { Connection = signInClientState.Connection, MessengerId = (ushort)FlowMessengerIds.Relay, Payload = serializer.Serialize(info) }); if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0) { return serializer.Deserialize(resp.Data.Span); } return new RelayFlowResponseInfo(); } } }