/// <summary> /// Adds a <see cref="ClanMember"/> to the <see cref="Clan"/> from the specified /// <see cref="Avatar"/>. Returns <c>true</c> if succeeded; otherwise; false. /// </summary> /// <param name="avatar"><see cref="Avatar"/> to add to the <see cref="Clan"/>.</param> /// <returns>Returns <c>true</c> if succeeded; otherwise; false.</returns> /// /// <remarks> /// Returns <c>false</c> if a <see cref="ClanMember"/> has the same ID as the specified <see cref="Avatar"/>. /// </remarks> public JoinedOrLeftAllianceStream Join(Avatar avatar) { var member = Get(avatar.Id); if (member != null) { return(null); } lock (_sync) { var jolStreamEntry = new JoinedOrLeftAllianceStream { EntryId = Entries.Count, Unknown2 = 3, HomeId = avatar.Id, UserId = avatar.Id, League = avatar.League, ExpLevels = avatar.ExpLevels, Name = avatar.Name, Role = ClanMemberRole.Member, Action = 3, // Action = 3 => Joined, Action = 4 => Left. ActorName = avatar.Name, ActorUserId = avatar.Id, }; var newMember = new ClanMember { Id = avatar.Id, Trophies = avatar.Trophies, ExpLevels = avatar.ExpLevels, Name = avatar.Name, League = avatar.League, Role = ClanMemberRole.Member, Rank = Members.Count + 1, PreviousRank = Members.Count + 1, NewMember = true }; Members.Add(newMember); Entries.Add(jolStreamEntry); Update(); return(jolStreamEntry); } }
/// <summary> /// Removes a <see cref="ClanMember"/> with the same user ID as specified and returns <c>true</c> /// if succeeded; otherwise, <c>false</c>. /// </summary> /// <param name="userId">ID which the <see cref="ClanMember"/> must have.</param> /// <returns><c>true</c> if succeeded; otherwise, <c>false</c>.</returns> public JoinedOrLeftAllianceStream Leave(long userId) { lock (_sync) { for (int i = 0; i < Members.Count; i++) { var member = Members[i]; if (member.Id == userId) { var jolStreamEntry = new JoinedOrLeftAllianceStream { EntryId = Entries.Count, Unknown2 = 3, HomeId = member.Id, UserId = member.Id, League = member.League, ExpLevels = member.ExpLevels, Name = member.Name, Role = member.Role, Action = 4, // Action = 3 => Joined, Action = 4 => Left. ActorName = member.Name, ActorUserId = member.Id, SinceOccured = TimeSpan.FromSeconds(0) }; Members.RemoveAt(i); // Clamp the entries count to 100. if (Entries.Count >= 100) { Entries.RemoveAt(0); } Entries.Add(jolStreamEntry); Update(); return(jolStreamEntry); } } } return(null); }