Код IT Загрузка примера кода…

C# main.cs
// Services/IChatStore.cs
public interface IChatStore
{
    Task<List<ChatMessage>> GetMessagesAsync(string roomName, int limit = 50);
    Task SaveMessageAsync(ChatMessage message);
    Task<List<UserStatus>> GetOnlineUsersAsync();
    Task SetUserOnlineAsync(string userId, string userName);
    Task SetUserOfflineAsync(string userId);
}

// Services/InMemoryChatStore.cs
public class InMemoryChatStore : IChatStore
{
    private readonly List<ChatMessage> _messages = new();
    private readonly Dictionary<string, UserStatus> _userStatuses = new();

    public async Task<List<ChatMessage>> GetMessagesAsync(string roomName, int limit = 50)
    {
        return _messages
            .Where(m => m.RoomName == roomName)
            .OrderByDescending(m => m.Timestamp)
            .Take(limit)
            .Reverse()
            .ToList();
    }

    public async Task SaveMessageAsync(ChatMessage message)
    {
        _messages.Add(message);
    }

    public async Task<List<UserStatus>> GetOnlineUsersAsync()
    {
        return _userStatuses.Values.Where(u => u.IsOnline).ToList();
    }

    public async Task SetUserOnlineAsync(string userId, string userName)
    {
        _userStatuses[userId] = new UserStatus
        {
            UserId = userId,
            UserName = userName,
            IsOnline = true,
            LastSeen = DateTime.UtcNow
        };
    }

    public async Task SetUserOfflineAsync(string userId)
    {
        if (_userStatuses.TryGetValue(userId, out var status))
        {
            status.IsOnline = false;
            status.LastSeen = DateTime.UtcNow;
        }
    }
}
// Services/IChatStore.cs
public interface IChatStore
{
    Task<List<ChatMessage>> GetMessagesAsync(string roomName, int limit = 50);
    Task SaveMessageAsync(ChatMessage message);
    Task<List<UserStatus>> GetOnlineUsersAsync();
    Task SetUserOnlineAsync(string userId, string userName);
    Task SetUserOfflineAsync(string userId);
}

// Services/InMemoryChatStore.cs
public class InMemoryChatStore : IChatStore
{
    private readonly List<ChatMessage> _messages = new();
    private readonly Dictionary<string, UserStatus> _userStatuses = new();

    public async Task<List<ChatMessage>> GetMessagesAsync(string roomName, int limit = 50)
    {
        return _messages
            .Where(m => m.RoomName == roomName)
            .OrderByDescending(m => m.Timestamp)
            .Take(limit)
            .Reverse()
            .ToList();
    }

    public async Task SaveMessageAsync(ChatMessage message)
    {
        _messages.Add(message);
    }

    public async Task<List<UserStatus>> GetOnlineUsersAsync()
    {
        return _userStatuses.Values.Where(u => u.IsOnline).ToList();
    }

    public async Task SetUserOnlineAsync(string userId, string userName)
    {
        _userStatuses[userId] = new UserStatus
        {
            UserId = userId,
            UserName = userName,
            IsOnline = true,
            LastSeen = DateTime.UtcNow
        };
    }

    public async Task SetUserOfflineAsync(string userId)
    {
        if (_userStatuses.TryGetValue(userId, out var status))
        {
            status.IsOnline = false;
            status.LastSeen = DateTime.UtcNow;
        }
    }
}