예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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);
        }