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; }