Session.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using CardCollector.Controllers;
  5. using CardCollector.DataBase.Entity;
  6. using CardCollector.Resources;
  7. namespace CardCollector.Session
  8. {
  9. public class UserSession
  10. {
  11. /* Ссылка на пользователя */
  12. private readonly UserEntity user;
  13. /* Дата и время последней актвности пользователя */
  14. private DateTime _lastAccess = DateTime.Now;
  15. /* Текущее состояние пользователя */
  16. public UserState State = UserState.Default;
  17. /* Подключаемые модули */
  18. private readonly Dictionary<Type, Module> Modules = new();
  19. /* Сообщения в чате пользователя */
  20. public readonly List<int> Messages = new();
  21. public UserSession(UserEntity user)
  22. {
  23. this.user = user;
  24. }
  25. public T InitNewModule<T>() where T : Module
  26. {
  27. Modules.Add(typeof(T), Activator.CreateInstance<T>());
  28. return (T) Modules[typeof(T)];
  29. }
  30. public T GetModule<T>() where T : Module
  31. {
  32. try {
  33. return (T) Modules[typeof(T)];
  34. } catch {
  35. return InitNewModule<T>();
  36. }
  37. }
  38. public void ResetModule<T>() where T : Module
  39. {
  40. Modules[typeof(T)].Reset();
  41. }
  42. public void DeleteModule<T>() where T : Module
  43. {
  44. Modules.Remove(typeof(T));
  45. }
  46. public void UpdateLastAccess()
  47. {
  48. _lastAccess = DateTime.Now;
  49. }
  50. public int GetLastAccessInterval()
  51. {
  52. return (int) (DateTime.Now - _lastAccess).TotalMinutes;
  53. }
  54. public async Task ClearMessages()
  55. {
  56. foreach (var messageId in Messages)
  57. await MessageController.DeleteMessage(user, messageId, false);
  58. Messages.Clear();
  59. }
  60. public async void EndSession()
  61. {
  62. await ClearMessages();
  63. State = UserState.Default;
  64. foreach (var module in Modules.Values) module.Reset();
  65. Modules.Clear();
  66. }
  67. }
  68. }