Esempio n. 1
0
        private void ApplyPresenceChangedEvent(InternalSocialEvent socialEvent, UserBuffer inactiveBuffer, bool isFreshEvent)
        {
            List <XboxSocialUser> usersToAddList = new List <XboxSocialUser>();

            foreach (XboxSocialUser user in socialEvent.UsersAffected)
            {
                IList <SocialManagerPresenceTitleRecord> presenceDetails = user.PresenceDetails;
                UserPresenceState presenceState = user.PresenceState;

                var xuid      = Convert.ToUInt64(user.XboxUserId);
                var eventUser = this.userBuffer.Inactive.SocialUserGraph[xuid];

                if (eventUser != null)
                {
                    if ((eventUser.PresenceState != presenceState) ||
                        (eventUser.PresenceDetails != null && presenceDetails != null &&
                         eventUser.PresenceDetails.Count > 0 && presenceDetails.Count > 0 &&
                         !eventUser.PresenceDetails.All(record => presenceDetails.Contains(record))))
                    {
                        eventUser.PresenceDetails = presenceDetails;
                        eventUser.PresenceState   = presenceState;
                        usersToAddList.Add(eventUser);
                    }
                }
            }

            if (usersToAddList.Count > 0 && isFreshEvent)
            {
                this.internalEventQueue.Enqueue(InternalSocialEventType.PresenceChanged, usersToAddList);
            }
        }
 // Used for mock services
 internal SocialManagerPresenceRecord(UserPresenceState state, IList <SocialManagerPresenceTitleRecord> records)
 {
     UserState      = state;
     m_titleRecords = records == null ? new List <SocialManagerPresenceTitleRecord>() : (List <SocialManagerPresenceTitleRecord>)records;
 }