/// <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()); }
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)); }