You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

128 lines
4.2 KiB

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. namespace SUISS.Cloud
  5. {
  6. public class FriendRequestRewardController
  7. {
  8. public FriendRequestRewardController(ISSPStorageController storageController, IFriendsController friendsController, Dictionary<string, object> playerIndependentStorage)
  9. {
  10. this._storageController = storageController;
  11. this._friendsController = friendsController;
  12. this._playerIndependentStorage = playerIndependentStorage;
  13. }
  14. private IDictionary<string, object> CurrentStorage
  15. {
  16. get
  17. {
  18. if (this._sspStorage == null)
  19. {
  20. this._sspStorage = this._storageController.Get("FriendRequestReward_Storage");
  21. }
  22. return this._sspStorage.Contents;
  23. }
  24. }
  25. private List<object> ClaimedGifts
  26. {
  27. get
  28. {
  29. if (!this.CurrentStorage.ContainsKey("Claimed_Friend_Rewards") || !(this.CurrentStorage["Claimed_Friend_Rewards"] is List<object>))
  30. {
  31. this.CurrentStorage["Claimed_Friend_Rewards"] = new List<object>();
  32. }
  33. return (List<object>)this.CurrentStorage["Claimed_Friend_Rewards"];
  34. }
  35. }
  36. private List<object> PlayerIndependentClaimedList
  37. {
  38. get
  39. {
  40. if (!this._playerIndependentStorage.ContainsKey("PlayerIndependentClaimedList") || !(this._playerIndependentStorage["PlayerIndependentClaimedList"] is List<object>))
  41. {
  42. this._playerIndependentStorage.Add("PlayerIndependentClaimedList", new List<object>());
  43. }
  44. return (List<object>)this._playerIndependentStorage["PlayerIndependentClaimedList"];
  45. }
  46. set
  47. {
  48. this._playerIndependentStorage["PlayerIndependentClaimedList"] = value;
  49. }
  50. }
  51. public CloudRequest<IList<IFriend>, MessageErrors?> ClaimFriendRewards(IList<IFriend> allFriendInvites)
  52. {
  53. List<IFriend> list = new List<IFriend>();
  54. foreach (IFriend friend in allFriendInvites)
  55. {
  56. if (this.ClaimedGifts.Count >= 50 || this.PlayerIndependentClaimedList.Count >= 50)
  57. {
  58. break;
  59. }
  60. if (!this.ClaimedGifts.Contains(friend.AccountUuid) && !this.SentFromSelf(friend.FriendName))
  61. {
  62. list.Add(friend);
  63. this.AddClaimedGift(friend.AccountUuid);
  64. }
  65. }
  66. return new CloudRequest<IList<IFriend>, MessageErrors?>(this.CoClaimFriendRewards(list));
  67. }
  68. private void AddClaimedGift(string accountUUid)
  69. {
  70. this.ClaimedGifts.Add(accountUUid);
  71. this.PlayerIndependentClaimedList.Add(accountUUid);
  72. }
  73. private bool SentFromSelf(string inviteFriendName)
  74. {
  75. return new List<string>(this._friendsController.Invited).Contains(inviteFriendName);
  76. }
  77. private IEnumerator CoClaimFriendRewards(List<IFriend> newlyClaimedFriends)
  78. {
  79. if (newlyClaimedFriends.Count == 0)
  80. {
  81. yield return new YieldResult<IList<IFriend>>(new List<IFriend>());
  82. }
  83. if (this._sspStorage == null)
  84. {
  85. this._sspStorage = this._storageController.Get("FriendRequestReward_Storage");
  86. }
  87. CloudRequest<MessageErrors?> sendCall = this._sspStorage.TrySendToServer();
  88. yield return sendCall;
  89. if (sendCall.Error != null)
  90. {
  91. this.ClaimedGifts.RemoveAll((object element) => newlyClaimedFriends.Find((IFriend friendEl) => friendEl.AccountUuid == (string)element) != null);
  92. this.PlayerIndependentClaimedList.RemoveAll((object element) => newlyClaimedFriends.Find((IFriend friendEl) => friendEl.AccountUuid == (string)element) != null);
  93. yield return new YieldError<MessageErrors?>(new MessageErrors?(MessageErrors.GeneralError));
  94. }
  95. yield return new YieldResult<IList<IFriend>>(newlyClaimedFriends);
  96. yield break;
  97. }
  98. private const string FriendRequestRewardController_SSPStorageKey = "FriendRequestReward_Storage";
  99. private const string SSP_ClaimedFriendRewardsKey = "Claimed_Friend_Rewards";
  100. private const string ClaimedFriendRewards_MessageType = "FriendRewardCount";
  101. public const int TotalFriendInviteGifts = 50;
  102. public const int DiamondsPerFriendRequest = 5;
  103. private SSPStorage _sspStorage;
  104. private ISSPStorageController _storageController;
  105. private IFriendsController _friendsController;
  106. private Dictionary<string, object> _playerIndependentStorage;
  107. private const string PlayerIndependentClaimedList_Key = "PlayerIndependentClaimedList";
  108. }
  109. }