public Task <IList <MultiplePermissionsCheckResult> > CheckMultiplePermissionsWithMultipleTargetUsersAsync(IList <string> permissionIds, IList <string> targetXboxUserIds) { var tcs = new TaskCompletionSource <IList <MultiplePermissionsCheckResult> >(); Task.Run(() => { var permissionIdsArray = MarshalingHelpers.StringListToHGlobalUtf8StringArray(permissionIds); var xuidsArray = MarshalingHelpers.StringListToHGlobalUtf8StringArray(targetXboxUserIds); int contextKey = XsapiCallbackContext <CheckMultiplePermissionsContext, IList <MultiplePermissionsCheckResult> > .CreateContext( new CheckMultiplePermissionsContext { permissionIdsArray = permissionIdsArray, permissionIdsLength = permissionIds.Count, targetXboxUserIdsArray = xuidsArray, targetXboxUserIdsLength = targetXboxUserIds.Count }, tcs); var xsapiResult = PrivacyCheckMultiplePermissionsWithMultipleTargetUsers( this.pCXboxLiveContext, permissionIdsArray, (UInt32)permissionIds.Count, xuidsArray, (UInt32)targetXboxUserIds.Count, CheckMultiplePermissionsWithMultipleTargetUsersComplete, (IntPtr)contextKey, XboxLive.DefaultTaskGroupId); if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK) { tcs.SetException(new XboxException(xsapiResult)); } }); return(tcs.Task); }
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 IList <XboxSocialUser> GetUsersFromXboxUserIds(IList <string> xboxUserIds) { // Allocates memory for returned objects IntPtr cUsersCount = Marshal.AllocHGlobal(Marshal.SizeOf <Int32>()); IntPtr cUserIds = MarshalingHelpers.StringListToHGlobalUtf8StringArray(xboxUserIds); // Invokes the c method IntPtr cUsersPtr = XboxSocialUserGroupGetUsersFromXboxUserIds(m_socialUserGroupPtr, cUserIds, (uint)xboxUserIds.Count, cUsersCount); // Does local work uint usersCount = (uint)Marshal.ReadInt32(cUsersCount); Marshal.FreeHGlobal(cUsersCount); List <XboxSocialUser> users = new List <XboxSocialUser>(); if (usersCount > 0) { IntPtr[] cUsers = new IntPtr[usersCount]; Marshal.Copy(cUsersPtr, cUsers, 0, (int)usersCount); foreach (IntPtr cUser in cUsers) { users.Add(new XboxSocialUser(cUser)); } } // Cleans up parameters MarshalingHelpers.FreeHGlobalUtf8StringArray(cUserIds, xboxUserIds.Count()); return(users.AsReadOnly()); }
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); }