using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using JacobTechEncryption.Enums; using Luski.net.Interfaces; namespace Luski.net.Structures.Public; public class SocketMessage { public PublicServer Server { get; init; } = default!; public long ID { get; internal set; } public long ChannelID { get; internal set; } public long AuthorID { get; internal set; } public long TimeStamp { get; internal set; } public string Context { get; internal set; } public long EncryptionKey { get; internal set; } public long[] FileIDs { get; internal set; } public EncoderType EncoderType { get; internal set; } private SocketChannel? RawParent; private IUser? au; internal List _Files = new(); public IReadOnlyList Files { get => _Files.AsReadOnly(); } public async Task GetParent(CancellationToken token) { if (RawParent is null) { RawParent = await Server.GetChannel(ChannelID, token); } return RawParent; } public async Task GetAuthor(CancellationToken token) { if (au is null) { if (AuthorID == Server.User.Id) au = Server.User; else au = await Server.GetUser(ChannelID, token); } return au; } }