示例#1
0
        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);
        }
示例#2
0
        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());
        }
示例#4
0
        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);
        }