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 CreateSocialUserGroupFromList(XboxLiveUser user, List <ulong> userIds) { if (user == null) { throw new ArgumentNullException("user"); } if (userIds == null) { throw new ArgumentNullException("userIds"); } SocialGraph userGraph; if (!this.userGraphs.TryGetValue(user, out userGraph)) { throw new ArgumentException("You must add a local user before you can create a social group for them.", "user"); } XboxSocialUserGroup group = new XboxSocialUserGroup(user, userIds); if (userGraph.IsInitialized) { group.InitializeGroup(userGraph.ActiveUsers); } this.AddUserGroup(user, group); userGraph.AddUsers(userIds).ContinueWith(addUsersTask => { this.eventQueue.Enqueue(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, userIds, group, addUsersTask.Exception)); }); return(group); }
public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter) { if (user == null) { throw new ArgumentNullException("user"); } // Allocates memory for returned objects IntPtr cGroupPtr = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>()); IntPtr cErrMessage = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>()); // Invokes the c method XSAPI_RESULT errCode = SocialManagerCreateSocialUserGroupFromFilters(user.Impl.XboxLiveUserPtr, presenceFilter, relationshipFilter, cGroupPtr, cErrMessage); // Handles error string errMessage = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(cErrMessage)); Marshal.FreeHGlobal(cErrMessage); if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK) { // todo do something } // Handles returned objects XboxSocialUserGroup socialUserGroup = new XboxSocialUserGroup(Marshal.ReadIntPtr(cGroupPtr)); Marshal.FreeHGlobal(cGroupPtr); m_groups.Add(socialUserGroup); return(socialUserGroup); }
public void UpdateSocialUserGroup(XboxSocialUserGroup socialGroup, IList <string> users) { if (socialGroup == null) { throw new ArgumentNullException("socialGroup"); } if (users == null) { throw new ArgumentNullException("users"); } // Allocates memory for parameters IntPtr cUserIds = MarshalingHelpers.StringListToHGlobalUtf8StringArray(users); // Allocates memory for returned objects IntPtr cErrMessage; // Invokes the c method XSAPI_RESULT errCode = SocialManagerUpdateSocialUserGroup(socialGroup.GetPtr(), cUserIds, (uint)users.Count, out cErrMessage); MarshalingHelpers.FreeHGlobalUtf8StringArray(cUserIds, users.Count); if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK) { throw new XboxException(errCode, cErrMessage); } // Does local work socialGroup.Refresh(); }
public void DestroySocialUserGroup(XboxSocialUserGroup xboxSocialUserGroup) { if (xboxSocialUserGroup == null) { throw new ArgumentNullException("xboxSocialUserGroup"); } // Allocates memory for returned objects IntPtr cErrMessage = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>()); // Invokes the c method XSAPI_RESULT errCode = SocialManagerDestroySocialUserGroup(xboxSocialUserGroup.GetPtr(), cErrMessage); // Handles error string errMessage = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(cErrMessage)); Marshal.FreeHGlobal(cErrMessage); if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK) { // todo do something } // Does local work m_groups.Remove(xboxSocialUserGroup); }
public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter, uint titleId) { if (user == null) { throw new ArgumentNullException("user"); } SocialGraph userGraph; if (!this.userGraphs.TryGetValue(user, out userGraph)) { throw new ArgumentException("You must add a local user before you can create a social group for them.", "user"); } XboxSocialUserGroup group = new XboxSocialUserGroup(user, presenceFilter, relationshipFilter, XboxLiveAppConfiguration.Instance.TitleId); if (userGraph.IsInitialized) { group.InitializeGroup(userGraph.ActiveUsers); } this.AddUserGroup(user, group); this.eventQueue.Enqueue(new SocialEvent(SocialEventType.SocialUserGroupLoaded, user, null, group)); return(group); }
public XboxSocialUserGroup CreateSocialUserGroupFromList(XboxLiveUser user, IList <string> xboxUserIdList) { if (user == null) { throw new ArgumentNullException("user"); } if (xboxUserIdList == null) { throw new ArgumentNullException("xboxUserIdList"); } // Allocates memory for parameters IntPtr cUserIds = MarshalingHelpers.StringListToHGlobalUtf8StringArray(xboxUserIdList); // Allocates memory for returned objects IntPtr cGroupPtr; IntPtr cErrMessage; // Invokes the c method XSAPI_RESULT errCode = SocialManagerCreateSocialUserGroupFromList(user.Impl.XboxLiveUserPtr, cUserIds, (uint)xboxUserIdList.Count, out cGroupPtr, out cErrMessage); MarshalingHelpers.FreeHGlobalUtf8StringArray(cUserIds, xboxUserIdList.Count); if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK) { throw new XboxException(errCode, cErrMessage); } // Handles returned objects XboxSocialUserGroup socialUserGroup = new XboxSocialUserGroup(cGroupPtr); m_groups.Add(socialUserGroup); return(socialUserGroup); }
public void UpdateSocialUserGroup(XboxSocialUserGroup group, List <ulong> users) { this.userGraphs[group.LocalUser].AddUsers(users).ContinueWith( addUsersTask => { SocialEvent socialEvent = new SocialEvent(SocialEventType.SocialUserGroupUpdated, group.LocalUser, users); this.eventQueue.Enqueue(socialEvent); }); }
public XboxSocialUserGroup CreateSocialUserGroupFromList(XboxLiveUser user, IList <string> xboxUserIdList) { if (user == null) { throw new ArgumentNullException("user"); } if (xboxUserIdList == null) { throw new ArgumentNullException("xboxUserIdList"); } // Allocates memory for parameters List <IntPtr> userIdPtrs = new List <IntPtr>(); for (int i = 0; i < xboxUserIdList.Count; i++) { IntPtr cXuid = Marshal.StringToHGlobalAnsi(xboxUserIdList[i]); userIdPtrs.Add(cXuid); } IntPtr cUserIds = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>() * xboxUserIdList.Count); Marshal.Copy(userIdPtrs.ToArray(), 0, cUserIds, xboxUserIdList.Count); // Allocates memory for returned objects IntPtr cGroupPtr = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>()); IntPtr cErrMessage = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>()); // Invokes the c method XSAPI_RESULT errCode = SocialManagerCreateSocialUserGroupFromList(user.Impl.XboxLiveUserPtr, cUserIds, (uint)xboxUserIdList.Count, cGroupPtr, cErrMessage); // Handles error string errMessage = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(cErrMessage)); Marshal.FreeHGlobal(cErrMessage); if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK) { // todo do something } // Cleans up parameters foreach (IntPtr ptr in userIdPtrs) { Marshal.FreeHGlobal(ptr); } Marshal.FreeHGlobal(cUserIds); // Handles returned objects XboxSocialUserGroup socialUserGroup = new XboxSocialUserGroup(Marshal.ReadIntPtr(cGroupPtr)); Marshal.FreeHGlobal(cGroupPtr); m_groups.Add(socialUserGroup); return(socialUserGroup); }
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 void UpdateSocialUserGroup(XboxSocialUserGroup group, IList <string> userIds) { Dictionary <string, XboxSocialUser> users = userIds .Select(CreateUser) .ToDictionary(u => u.XboxUserId); group.UpdateGroup(users); mEvents.Add(new SocialEvent(SocialEventType.SocialUserGroupUpdated, group.LocalUser, null, group)); }
public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter) { Dictionary <string, XboxSocialUser> 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); XboxSocialUserGroup group = new XboxSocialUserGroup(user, SocialUserGroupType.Filter, presenceFilter, relationshipFilter, users); mEvents.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); }
private void AddUserGroup(XboxLiveUser user, XboxSocialUserGroup group) { lock (this.syncRoot) { HashSet <WeakReference> userGroups; if (!this.userGroupsMap.TryGetValue(user, out userGroups)) { this.userGroupsMap[user] = userGroups = new HashSet <WeakReference>(); } WeakReference groupReference = new WeakReference(group); userGroups.Add(groupReference); } }
public void UpdateUserGroup(XboxLiveUser user, XboxSocialUserGroup group, List <ulong> users) { if (group.SocialUserGroupType != SocialUserGroupType.UserList) { throw new ArgumentException("You can only modify the user list for a UserList type social group."); } this.userGraphs[user].AddUsers(users).ContinueWith( addUsersTask => { SocialEvent socialEvent = new SocialEvent(SocialEventType.SocialUserGroupUpdated, user, users); this.eventQueue.Enqueue(socialEvent); }); }
public void UpdateSocialUserGroup(XboxSocialUserGroup socialGroup, IList <string> users) { if (socialGroup == null) { throw new ArgumentNullException("socialGroup"); } if (users == null) { throw new ArgumentNullException("users"); } // Allocates memory for parameters List <IntPtr> userIdPtrs = new List <IntPtr>(); for (int i = 0; i < users.Count; i++) { IntPtr cXuid = Marshal.StringToHGlobalUni(users[i]); userIdPtrs.Add(cXuid); } IntPtr cUserIds = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>() * users.Count); Marshal.Copy(userIdPtrs.ToArray(), 0, cUserIds, users.Count); // Allocates memory for returned objects IntPtr cErrMessage = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>()); // Invokes the c method XSAPI_RESULT errCode = SocialManagerUpdateSocialUserGroup(socialGroup.GetPtr(), cUserIds, (uint)users.Count, cErrMessage); // Handles error string errMessage = Marshal.PtrToStringUni(Marshal.ReadIntPtr(cErrMessage)); Marshal.FreeHGlobal(cErrMessage); if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK) { // todo do something } // Cleans up parameters foreach (IntPtr ptr in userIdPtrs) { Marshal.FreeHGlobal(ptr); } Marshal.FreeHGlobal(cUserIds); // Does local work socialGroup.Refresh(); }
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 XboxSocialUserGroup CreateSocialUserGroupFromList(XboxLiveUser user, IList <string> xboxUserIdList) { Dictionary <string, XboxSocialUser> users = xboxUserIdList .Select(CreateUser) .ToDictionary(u => u.XboxUserId); XboxSocialUserGroup group = new XboxSocialUserGroup( user, SocialUserGroupType.UserList, PresenceFilter.Unknown, RelationshipFilter.Friends, users); mEvents.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 void DestroySocialUserGroup(XboxSocialUserGroup xboxSocialUserGroup) { if (xboxSocialUserGroup == null) { throw new ArgumentNullException("xboxSocialUserGroup"); } IntPtr cErrMessage; // Invokes the c method XSAPI_RESULT errCode = SocialManagerDestroySocialUserGroup(xboxSocialUserGroup.GetPtr(), out cErrMessage); if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK) { throw new XboxException(errCode, cErrMessage); } // Does local work m_groups.Remove(xboxSocialUserGroup); }
public XboxSocialUserGroup CreateSocialUserGroupFromFilters(XboxLiveUser user, PresenceFilter presenceFilter, RelationshipFilter relationshipFilter) { if (user == null) { throw new ArgumentNullException("user"); } IntPtr cGroupPtr; IntPtr cErrMessage; // Invokes the c method XSAPI_RESULT errCode = SocialManagerCreateSocialUserGroupFromFilters(user.Impl.XboxLiveUserPtr, presenceFilter, relationshipFilter, out cGroupPtr, out cErrMessage); if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK) { throw new XboxException(errCode, cErrMessage); } // Handles returned objects XboxSocialUserGroup socialUserGroup = new XboxSocialUserGroup(cGroupPtr); m_groups.Add(socialUserGroup); return(socialUserGroup); }
public SocialEvent(SocialEventType type, XboxLiveUser user, IList <ulong> usersAffected = null, XboxSocialUserGroup groupAffected = null, Exception exception = null) { this.EventType = type; this.User = user; this.UsersAffected = usersAffected == null ? new List <ulong>() : usersAffected; this.GroupAffected = groupAffected; this.Exception = exception; }
internal SocialUserGroupLoadedEventArgs(XboxSocialUserGroup group) { SocialUserGroup = group; }
// todo do I need this method? internal SocialEvent(SocialEventType type, XboxLiveUser user, IList <string> usersAffected = null, XboxSocialUserGroup groupAffected = null, int errorCode = 0, string errorMessage = "") { this.EventType = type; this.User = user; this.UsersAffected = usersAffected == null ? new List <string>() : usersAffected; this.EventArgs = groupAffected == null ? null : new SocialUserGroupLoadedEventArgs(groupAffected); this.ErrorCode = errorCode; this.ErrorMessge = errorMessage; }
public SocialEvent(SocialEventType type, XboxLiveUser user, IList <ulong> usersAffected, XboxSocialUserGroup groupAffected = null) { this.EventType = type; this.User = user; this.UsersAffected = usersAffected; this.GroupAffected = groupAffected; }
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); }
public void DestroySocialUserGroup(XboxSocialUserGroup group) { // do nothing }