예제 #1
0
 /// <summary>
 /// Transfer the resource with the key provided to the currently signed in user
 /// </summary>
 /// <param name="senderId">Id of the actor who will send the resource</param>
 /// <param name="key">Name of the resource being transferred</param>
 /// <param name="amount">The amount being transferred</param>
 /// <param name="onComplete">Callback which returns whether the transfer was a success and the current value of the resource that was transferred</param>
 /// <param name="globalResource">**Optional** Setting for if the resource is global rather than for this game. (default: false)</param>
 /// <remarks>
 /// If globalResource is true, resource transferred will be global rather than for the game.
 /// </remarks>
 public void TryTake(int senderId, string key, long amount, Action <bool, long> onComplete, bool globalResource = false)
 {
     if (SUGARManager.UserSignedIn)
     {
         var request = new ResourceTransferRequest
         {
             RecipientActorId = SUGARManager.CurrentUser.Id,
             SenderActorId    = senderId,
             GameId           = globalResource ? Platform.GlobalGameId : SUGARManager.GameId,
             Key      = key,
             Quantity = amount
         };
         SUGARManager.client.Resource.TransferAsync(request,
                                                    response =>
         {
             UpdateResource(response.FromResource);
             UpdateResource(response.ToResource);
             onComplete(true, GetFromCache(key, globalResource));
         },
                                                    exception =>
         {
             Debug.LogError($"Failed to transfer resources. {exception}");
             GetFromServer(
                 (getSuccess, getValues) =>
             {
                 onComplete(false, GetFromCache(key, globalResource));
             }, new[] { key }, globalResource);
         });
     }
 }
        public async Task <IActionResult> Transfer([FromBody] ResourceTransferRequest transferRequest)
        {
            if ((await _authorizationService.AuthorizeAsync(User, transferRequest.SenderActorId, HttpContext.ScopeItems(ClaimScope.Group))).Succeeded ||
                (await _authorizationService.AuthorizeAsync(User, transferRequest.SenderActorId, HttpContext.ScopeItems(ClaimScope.User))).Succeeded ||
                (await _authorizationService.AuthorizeAsync(User, transferRequest.GameId, HttpContext.ScopeItems(ClaimScope.Game))).Succeeded)
            {
                var toResource = _resourceController.Transfer(transferRequest.GameId.Value, transferRequest.SenderActorId.Value, transferRequest.RecipientActorId.Value, transferRequest.Key, transferRequest.Quantity.Value, out var fromResource);

                var resourceTransferRespone = new ResourceTransferResponse
                {
                    FromResource = fromResource.ToResourceContract(),
                    ToResource   = toResource.ToResourceContract()
                };

                return(new ObjectResult(resourceTransferRespone));
            }
            return(Forbid());
        }
예제 #3
0
        private ResourceTransferResponse TakeResource(int gameId, string key, int recipientId, int senderId, int quantity)
        {
            var TransferRequest = new ResourceTransferRequest()
            {
                GameId           = gameId,
                Key              = key,
                Quantity         = quantity,
                RecipientActorId = recipientId,
                SenderActorId    = senderId
            };

            try
            {
                return(Fixture.SUGARClient.Resource.Transfer(TransferRequest));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(null);
        }
 public void TransferAsync(ResourceTransferRequest data, Action <ResourceTransferResponse> onSuccess, Action <Exception> onError)
 {
     AsyncRequestController.EnqueueRequest(() => Transfer(data),
                                           onSuccess,
                                           onError);
 }
        /// <summary>
        /// Transfers a quantity of a specific resource.
        /// </summary>
        /// <param name="data"></param>
        /// <returns>A <see cref="ResourceTransferResponse"/> containing the modified resources.</returns>
        public ResourceTransferResponse Transfer(ResourceTransferRequest data)
        {
            var query = GetUriBuilder(ControllerPrefix + "/transfer").ToString();

            return(Post <ResourceTransferRequest, ResourceTransferResponse>(query, data));
        }