public async UniTaskVoid HandleRequestCashPackageBuyValidation( RequestHandlerData requestHandler, RequestCashPackageBuyValidationMessage request, RequestProceedResultDelegate <ResponseCashPackageBuyValidationMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD // TODO: Validate purchasing at server side // Set response data UITextKeys message = UITextKeys.NONE; int dataId = request.dataId; int cash = 0; IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { // Cannot find user message = UITextKeys.UI_ERROR_NOT_LOGGED_IN; } else { // Get user cash amount CashResp getCashResp = await DbServiceClient.GetCashAsync(new GetCashReq() { UserId = playerCharacter.UserId }); cash = getCashResp.Cash; CashPackage cashPackage; if (!GameInstance.CashPackages.TryGetValue(dataId, out cashPackage)) { // Cannot find package message = UITextKeys.UI_ERROR_CASH_PACKAGE_NOT_FOUND; } else { // Increase cash amount CashResp changeCashResp = await DbServiceClient.ChangeCashAsync(new ChangeCashReq() { UserId = playerCharacter.UserId, ChangeAmount = cashPackage.cashAmount }); cash = changeCashResp.Cash; playerCharacter.UserCash = cash; } } // Send response message result.Invoke( message == UITextKeys.NONE ? AckResponseCode.Success : AckResponseCode.Error, new ResponseCashPackageBuyValidationMessage() { message = message, dataId = dataId, cash = cash, }); #endif await UniTask.Yield(); }
public async UniTaskVoid HandleRequestCashPackageBuyValidation( RequestHandlerData requestHandler, RequestCashPackageBuyValidationMessage request, RequestProceedResultDelegate <ResponseCashPackageBuyValidationMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD // TODO: Validate purchasing at server side IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.InvokeError(new ResponseCashPackageBuyValidationMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } CashPackage cashPackage; if (!GameInstance.CashPackages.TryGetValue(request.dataId, out cashPackage)) { result.InvokeError(new ResponseCashPackageBuyValidationMessage() { message = UITextKeys.UI_ERROR_CASH_PACKAGE_NOT_FOUND, }); return; } AsyncResponseData <CashResp> changeCashResp = await DbServiceClient.ChangeCashAsync(new ChangeCashReq() { UserId = playerCharacter.UserId, ChangeAmount = cashPackage.CashAmount }); if (!changeCashResp.IsSuccess) { result.InvokeError(new ResponseCashPackageBuyValidationMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } // Sync cash to game clients playerCharacter.UserCash = changeCashResp.Response.Cash; result.InvokeSuccess(new ResponseCashPackageBuyValidationMessage() { dataId = request.dataId, cash = changeCashResp.Response.Cash, }); #endif }
private IEnumerator HandleRequestCashPackageBuyValidationRoutine(LiteNetLibMessageHandler messageHandler) { long connectionId = messageHandler.connectionId; RequestCashPackageBuyValidationMessage message = messageHandler.ReadMessage <RequestCashPackageBuyValidationMessage>(); // TODO: Validate purchasing at server side // Set response data ResponseCashPackageBuyValidationMessage.Error error = ResponseCashPackageBuyValidationMessage.Error.None; int dataId = message.dataId; int cash = 0; BasePlayerCharacterEntity playerCharacter; UserCharacterData userData; if (!playerCharacters.TryGetValue(connectionId, out playerCharacter) || !usersById.TryGetValue(playerCharacter.Id, out userData)) { error = ResponseCashPackageBuyValidationMessage.Error.UserNotFound; } else { // Get current cash will return this in case it cannot increase cash GetCashJob job = new GetCashJob(Database, userData.userId); job.Start(); yield return(StartCoroutine(job.WaitFor())); cash = job.result; CashPackage cashPackage; if (!GameInstance.CashPackages.TryGetValue(dataId, out cashPackage)) { error = ResponseCashPackageBuyValidationMessage.Error.PackageNotFound; } else { IncreaseCashJob increaseCashJob = new IncreaseCashJob(Database, userData.userId, cashPackage.cashAmount); increaseCashJob.Start(); yield return(StartCoroutine(increaseCashJob.WaitFor())); cash = increaseCashJob.result; } } // Send response message ResponseCashPackageBuyValidationMessage responseMessage = new ResponseCashPackageBuyValidationMessage(); responseMessage.ackId = message.ackId; responseMessage.responseCode = error == ResponseCashPackageBuyValidationMessage.Error.None ? AckResponseCode.Success : AckResponseCode.Error; responseMessage.error = error; responseMessage.dataId = dataId; responseMessage.cash = cash; ServerSendPacket(connectionId, SendOptions.ReliableOrdered, MsgTypes.CashPackageBuyValidation, responseMessage); }