private void CheckMultiplePermissionsWithMultipleTargetUsersComplete(XSAPI_RESULT_INFO result, IntPtr resultsPtr, UInt32 privacyCheckResultCount, IntPtr contextKey) { XsapiCallbackContext <CheckMultiplePermissionsContext, IList <MultiplePermissionsCheckResult> > context; if (XsapiCallbackContext <CheckMultiplePermissionsContext, IList <MultiplePermissionsCheckResult> > .TryRemove(contextKey.ToInt32(), out context)) { if (result.errorCode == XSAPI_RESULT.XSAPI_RESULT_OK) { var results = new List <MultiplePermissionsCheckResult>(); var structSize = MarshalingHelpers.SizeOf <XSAPI_PRIVACY_MULTIPLE_PERMISSIONS_CHECK_RESULT>(); for (UInt64 i = 0; i < privacyCheckResultCount; ++i) { results.Add(new MultiplePermissionsCheckResult(resultsPtr)); resultsPtr = resultsPtr.Increment(structSize); } context.TaskCompletionSource.SetResult(results.AsReadOnly()); } else { context.TaskCompletionSource.SetException(new XboxException(result)); } MarshalingHelpers.FreeHGlobalUtf8StringArray(context.Context.permissionIdsArray, context.Context.permissionIdsLength); MarshalingHelpers.FreeHGlobalUtf8StringArray(context.Context.targetXboxUserIdsArray, context.Context.targetXboxUserIdsLength); context.Dispose(); } }
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); }