Пример #1
0
        /// <summary>
        /// Gets a list of blob metadata objects under a given path for the specified service configuration, storage type and storage ID.
        /// </summary>
        /// <param name="serviceConfigurationId">The service configuration ID (SCID) of the title</param>
        /// <param name="storageType">The storage type to get blob metadata objects for.</param>
        /// <param name="blobPath">(Optional) The root path to enumerate.  Results will be for blobs contained in this path and all subpaths.</param>
        /// <param name="xboxUserId">The Xbox User ID of the title storage to enumerate. Pass nullptr when searching for GlobalStorage type data. (Optional)</param>
        /// <param name="skipItems">(Optional) The number of items to skip before returning results. (Optional)</param>
        /// <param name="maxItems">(Optional) The maximum number of items to return.</param>
        /// <returns>An instance of the <see cref="TitleStorageBlobMetadataResult"/> class containing the list of enumerated blob metadata objects.</returns>
        public Task <TitleStorageBlobMetadataResult> GetBlobMetadataAsync(string serviceConfigurationId, TitleStorageType storageType, string blobPath, string xboxUserId, uint skipItems = 0, uint maxItems = 0)
        {
            var tcs = new TaskCompletionSource <TitleStorageBlobMetadataResult>();

            Task.Run(() =>
            {
                var scid        = MarshalingHelpers.StringToHGlobalUtf8(serviceConfigurationId);
                var blobPathPtr = MarshalingHelpers.StringToHGlobalUtf8(blobPath);
                var xuidPtr     = MarshalingHelpers.StringToHGlobalUtf8(xboxUserId);

                int contextKey;
                var context            = XsapiCallbackContext <object, TitleStorageBlobMetadataResult> .CreateContext(null, tcs, out contextKey);
                context.PointersToFree = new List <IntPtr> {
                    scid, blobPathPtr, xuidPtr
                };

                var xsapiResult = TitleStorageGetBlobMetadata(
                    this.pCXboxLiveContext, scid, storageType, blobPathPtr, xuidPtr, skipItems, maxItems,
                    GetBlobMetadataComplete, (IntPtr)contextKey, XboxLive.DefaultTaskGroupId);

                if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK)
                {
                    tcs.SetException(new XboxException(xsapiResult));
                }
            });
            return(tcs.Task);
        }
Пример #2
0
        public Task <PermissionCheckResult> CheckPermissionWithTargetUserAsync(string permissionId, string targetXboxUserId)
        {
            var tcs = new TaskCompletionSource <PermissionCheckResult>();

            Task.Run(() =>
            {
                var permissionIdPtr = MarshalingHelpers.StringToHGlobalUtf8(permissionId);
                var xuidPtr         = MarshalingHelpers.StringToHGlobalUtf8(targetXboxUserId);

                int contextKey;
                var context            = XsapiCallbackContext <object, PermissionCheckResult> .CreateContext(null, tcs, out contextKey);
                context.PointersToFree = new List <IntPtr> {
                    permissionIdPtr, xuidPtr
                };

                var xsapiResult = PrivacyCheckPermissionWithTargetUser(
                    this.pCXboxLiveContext, permissionIdPtr, xuidPtr, CheckPermissionWithTargetUserComplete,
                    (IntPtr)contextKey, XboxLive.DefaultTaskGroupId);

                if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK)
                {
                    tcs.SetException(new XboxException(xsapiResult));
                }
            });
            return(tcs.Task);
        }
Пример #3
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);
        }
Пример #4
0
        /// <summary>
        /// Upload blob data to title storage.
        /// </summary>
        /// <param name="blobMetadata">The blob metadata for the title storage blob to upload.</param>
        /// <param name="blobBuffer">The Blob content to be uploaded.</param>
        /// <param name="etagMatchCondition">The ETag match condition used to determine if the blob data should be uploaded.</param>
        /// <param name="preferredDownloadBlockSize">The preferred upload block size in bytes for binary blobs. </param>
        /// <returns>An instance of the <see cref="TitleStorageBlobMetadata"/> class with updated ETag and Length Properties.</returns>
        public Task <TitleStorageBlobMetadata> UploadBlobAsync(TitleStorageBlobMetadata blobMetadata, IList <byte> blobBuffer, TitleStorageETagMatchCondition etagMatchCondition, uint preferredUploadBlockSize)
        {
            var tcs = new TaskCompletionSource <TitleStorageBlobMetadata>();

            Task.Run(() =>
            {
                int contextKey;
                var context = XsapiCallbackContext <TitleStorageBlobMetadata, TitleStorageBlobMetadata> .CreateContext(blobMetadata, tcs, out contextKey);

                var buffer = Marshal.AllocHGlobal(blobBuffer.Count);
                Marshal.Copy(Enumerable.ToArray <byte>(blobBuffer), 0, buffer, blobBuffer.Count);
                context.PointersToFree = new List <IntPtr> {
                    buffer
                };

                var xsapiResult = TitleStorageUploadBlob(
                    this.pCXboxLiveContext, blobMetadata.metadataPtr, buffer, (UInt32)blobBuffer.Count, etagMatchCondition, IntPtr.Zero, UploadBlobComplete,
                    (IntPtr)contextKey, XboxLive.DefaultTaskGroupId);

                if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK)
                {
                    tcs.SetException(new XboxException(xsapiResult));
                }
            });
            return(tcs.Task);
        }
Пример #5
0
        /// <summary>
        /// Downloads blob data from title storage.
        /// </summary>
        /// <param name="blobMetadata">The blob metadata for the title storage blob to download.</param>
        /// <param name="etagMatchCondition">The ETag match condition used to determine if the blob should be downloaded.</param>
        /// <param name="selectQuery">A query string that contains a ConfigStorage filter string or JSONStorage json property name string to filter. (Optional)</param>
        /// <param name="preferredDownloadBlockSize">The preferred download block size in bytes for binary blobs. </param>
        /// <returns>An instance of the <see cref="TitleStorageBlobResult"/> containing the blob content and an updated
        /// <see cref="TitleStorageBlobMetadata"/> object.</returns>
        public Task <TitleStorageBlobResult> DownloadBlobAsync(TitleStorageBlobMetadata blobMetadata, TitleStorageETagMatchCondition etagMatchCondition, string selectQuery, uint preferredDownloadBlockSize)
        {
            var tcs = new TaskCompletionSource <TitleStorageBlobResult>();

            Task.Run(() =>
            {
                int contextKey;
                var context = XsapiCallbackContext <TitleStorageBlobMetadata, TitleStorageBlobResult> .CreateContext(blobMetadata, tcs, out contextKey);

                var buffer = Marshal.AllocHGlobal((int)blobMetadata.Length);
                var select = MarshalingHelpers.StringToHGlobalUtf8(selectQuery);
                var pPreferredDownloadBlockSize = GCHandle.Alloc(preferredDownloadBlockSize, GCHandleType.Pinned);

                context.PointersToFree = new List <IntPtr> {
                    buffer, select
                };
                context.GCHandlesToFree = new List <GCHandle> {
                    pPreferredDownloadBlockSize
                };

                var xsapiResult = TitleStorageDownloadBlob(
                    this.pCXboxLiveContext, blobMetadata.metadataPtr, buffer, (UInt32)blobMetadata.Length, etagMatchCondition, select, GCHandle.ToIntPtr(pPreferredDownloadBlockSize),
                    DownloadBlobComplete, (IntPtr)contextKey, XboxLive.DefaultTaskGroupId);

                if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK)
                {
                    tcs.SetException(new XboxException(xsapiResult));
                }
            });
            return(tcs.Task);
        }
Пример #6
0
        public Task <IList <string> > GetMuteListAsync()
        {
            var tcs = new TaskCompletionSource <IList <string> >();

            Task.Run(() =>
            {
                int contextKey = XsapiCallbackContext <object, IList <string> > .CreateContext(null, tcs);

                var xsapiResult = PrivacyGetMuteList(this.pCXboxLiveContext, GetPrivacyUserListComplete, (IntPtr)contextKey, XboxLive.DefaultTaskGroupId);
                if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK)
                {
                    tcs.SetException(new XboxException(xsapiResult));
                }
            });
            return(tcs.Task);
        }
Пример #7
0
        /// <summary>
        /// Gets the metadata of the next group of blobs
        /// </summary>
        /// <param name="maxItems">[Optional] The maximum number of items the result can contain.  Pass 0 to attempt retrieving all items.</param>
        /// <returns>An instance of the <see cref="TitleStorageBlobMetadataResult"/> class containing metadata of the included blobs.</returns>
        public Task <TitleStorageBlobMetadataResult> GetNextAsync(uint maxItems = 0)
        {
            var tcs = new TaskCompletionSource <TitleStorageBlobMetadataResult>();

            Task.Run(() =>
            {
                int contextKey;
                var context = XsapiCallbackContext <object, TitleStorageBlobMetadataResult> .CreateContext(null, tcs, out contextKey);

                var xsapiResult = TitleStorageBlobMetadataResultGetNext(metadataResultStruct, maxItems, titleStorageService.GetBlobMetadataComplete,
                                                                        (IntPtr)contextKey, XboxLive.DefaultTaskGroupId);

                if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK)
                {
                    tcs.SetException(new XboxException(xsapiResult));
                }
            });
            return(tcs.Task);
        }
Пример #8
0
        /// <summary>
        /// Deletes a blob from title storage.
        /// </summary>
        /// <param name="blobMetadata">The blob metadata for the title storage blob to delete.</param>
        /// <param name="deleteOnlyIfEtagMatches">Specifies whether or not to have the delete operation check that the ETag matches before deleting the blob.</param>
        /// <returns>An empty task.</returns>
        public Task DeleteBlobAsync(TitleStorageBlobMetadata blobMetadata, bool deleteOnlyIfEtagMatches)
        {
            var tcs = new TaskCompletionSource <object>();

            Task.Run(() =>
            {
                int contextKey;
                XsapiCallbackContext <object, object> .CreateContext(this, tcs, out contextKey);

                var xsapiResult = TitleStorageDeleteBlob(this.pCXboxLiveContext, blobMetadata.metadataPtr, deleteOnlyIfEtagMatches,
                                                         DeleteBlobComplete, (IntPtr)contextKey, XboxLive.DefaultTaskGroupId);

                if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK)
                {
                    tcs.SetException(new XboxException(xsapiResult));
                }
            });
            return(tcs.Task);
        }
Пример #9
0
        /// <summary>
        /// Gets title storage quota information for the specified service configuration and storage type.
        /// For user storage types (TrustedPlatform and Json) the request will be made for the calling user's
        /// Xbox user Id.
        /// </summary>
        /// <param name="user">The Xbox User of the title storage to enumerate. Ignored when enumerating GlobalStorage.</param>
        /// <param name="storageType">Type of the storage type</param>
        /// <returns>An instance of the <see cref="TitleStorageQuota"/> class with the amount of storage space allocated and used.</returns>
        public Task <TitleStorageQuota> GetQuotaAsync(string serviceConfigurationId, TitleStorageType storageType)
        {
            var tcs = new TaskCompletionSource <TitleStorageQuota>();

            Task.Run(() =>
            {
                var scid = MarshalingHelpers.StringToHGlobalUtf8(XboxLive.Instance.AppConfig.ServiceConfigurationId);

                int contextKey;
                var context            = XsapiCallbackContext <object, TitleStorageQuota> .CreateContext(null, tcs, out contextKey);
                context.PointersToFree = new List <IntPtr> {
                    scid
                };

                var xsapiResult = TitleStorageGetQuota(
                    this.pCXboxLiveContext, scid, storageType, GetQuotaComplete, (IntPtr)contextKey, XboxLive.DefaultTaskGroupId);

                if (xsapiResult != XSAPI_RESULT.XSAPI_RESULT_OK)
                {
                    tcs.SetException(new XboxException(xsapiResult));
                }
            });
            return(tcs.Task);
        }