コード例 #1
0
        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();
            }
        }
コード例 #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();
        }
コード例 #3
0
        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);
        }