public IList <SocialEvent> DoWork() { // TODO make this threadsafe List <SocialEvent> events = this.eventQueue.ToList(); this.eventQueue.Clear(); lock (this.syncRoot) { foreach (SocialGraph graph in this.userGraphs.Values) { graph.DoWork(events); HashSet <WeakReference> userGroups; if (this.userGroupsMap.TryGetValue(graph.LocalUser, out userGroups)) { // Graph the social groups for this user and update them. foreach (WeakReference groupReference in userGroups.ToList()) { XboxSocialUserGroup group = groupReference.Target as XboxSocialUserGroup; if (group == null) { userGroups.Remove(groupReference); continue; } group.UpdateView(graph.ActiveBufferSocialGraph, events); } } } } return(events.ToList()); }
public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter) { var group = new XboxSocialUserGroup(user, presenceFilter, relationshipFilter, XboxLiveAppConfiguration.Instance.TitleId); var users = Enumerable.Range(0, 5) .Select(id => { var groupUser = CreateUser(); switch (presenceFilter) { case PresenceFilter.AllOnline: case PresenceFilter.TitleOnline: InitUserForOnlinePresence(ref groupUser); break; case PresenceFilter.AllOffline: case PresenceFilter.TitleOffline: InitUserForOfflinePresence(ref groupUser); break; case PresenceFilter.AllTitle: case PresenceFilter.All: if (id % 2 == 0) { InitUserForOnlinePresence(ref groupUser); } else { InitUserForOfflinePresence(ref groupUser); } break; } switch (relationshipFilter) { case RelationshipFilter.Friends: groupUser.IsFollowedByCaller = true; break; case RelationshipFilter.Favorite: groupUser.IsFollowedByCaller = true; groupUser.IsFavorite = true; break; } return(groupUser); }).ToDictionary(u => u.XboxUserId); group.InitializeGroup(users.Values); group.UpdateView(users, new List <SocialEvent>()); this.events.Add(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, null, group)); return(group); }
public XboxSocialUserGroup CreateSocialUserGroupFromList(XboxLiveUser user, List <ulong> userIds) { var group = new XboxSocialUserGroup(user, userIds); // Create 'real' users for the userIds var users = userIds .Select(CreateUser) .ToDictionary(u => u.XboxUserId); group.UpdateView(users, null); return(group); }
public XboxSocialUserGroup CreateSocialUserGroupFromList(XboxLiveUser user, List <ulong> userIds) { var group = new XboxSocialUserGroup(user, userIds); // Create 'real' users for the userIds var users = userIds .Select(CreateUser) .ToDictionary(u => u.XboxUserId); group.InitializeGroup(users.Values); group.UpdateView(users, new List <SocialEvent>()); this.events.Add(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, null, group)); return(group); }
public IList <SocialEvent> DoWork() { List <SocialEvent> events; lock (this.syncRoot) { if (this.eventQueue.Count > 0) { events = this.eventQueue.ToList(); this.eventQueue.Clear(); } else { events = emptyEventList; } foreach (SocialGraph graph in this.userGraphs.Values) { graph.DoWork(events); HashSet <WeakReference> userGroups; if (!this.userGroupsMap.TryGetValue(graph.LocalUser, out userGroups)) { continue; } // Grab the social groups for this user and update them. foreach (WeakReference groupReference in userGroups.ToList()) { XboxSocialUserGroup group = groupReference.Target as XboxSocialUserGroup; // If the target is null that means the group has been disposed so we don't // need to bother updating it anymore. if (group == null) { userGroups.Remove(groupReference); continue; } group.UpdateView(graph.ActiveBufferSocialGraph, events); } } } return(events); }
public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter, uint titleId) { var group = new XboxSocialUserGroup(user, presenceFilter, relationshipFilter, titleId); var users = Enumerable.Range(0, 5) .Select(id => { var groupUser = CreateUser(0); switch (presenceFilter) { case PresenceFilter.TitleOnline: groupUser.PresenceState = UserPresenceState.Online; groupUser.PresenceDetails = new List <SocialManagerPresenceTitleRecord> { new SocialManagerPresenceTitleRecord { TitleId = titleId, IsTitleActive = false, } }; break; case PresenceFilter.TitleOffline: groupUser.PresenceState = UserPresenceState.Offline; groupUser.TitleHistory = new TitleHistory { HasUserPlayed = true, LastTimeUserPlayed = DateTime.UtcNow.AddDays(-1), }; break; case PresenceFilter.AllOnline: groupUser.PresenceState = UserPresenceState.Online; break; case PresenceFilter.AllOffline: groupUser.PresenceState = UserPresenceState.Offline; break; case PresenceFilter.AllTitle: break; } switch (relationshipFilter) { case RelationshipFilter.Friends: groupUser.IsFollowedByCaller = true; break; case RelationshipFilter.Favorite: groupUser.IsFollowedByCaller = true; groupUser.IsFavorite = true; break; } return(groupUser); }).ToDictionary(u => u.XboxUserId); group.UpdateView(users, new List <SocialEvent>()); return(group); }