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);
        }
Пример #5
0
        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);
        }