| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- using Common;
- using Common.Extension;
- using Common.Http.Apis.Request;
- using Microsoft.AspNetCore.Mvc;
- using System.Text.Json;
- namespace Kitty_Fall.Website.Controllers
- {
- public class GameController : Controller
- {
- private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(GameController));
- private readonly IConfiguration _configuration;
- public GameController(IConfiguration configuration)
- {
- _configuration = configuration;
- }
- [HttpPost]
- public async Task<IActionResult> StartSession([FromBody] UserGameLevelResultReq request)
- {
- try
- {
- var apiResult = await SendGameApiAsync(request, UrlConstant.GameStartSessionUrl);
- if (apiResult.errorCode == "0" && apiResult.data != null)
- {
- return Json(new
- {
- success = true,
- point = apiResult.data.point,
- data = apiResult.data.data,
- score = apiResult.data.score,
- transId = apiResult.data.transId
- });
- }
- return Json(new
- {
- success = false,
- reason = apiResult.data?.reason ?? "",
- message = apiResult.message ?? "Start game failed."
- });
- }
- catch (Exception ex)
- {
- log.Error("StartSession error: ", ex);
- return Json(new { success = false, message = ex.Message });
- }
- }
- [HttpPost]
- public async Task<IActionResult> SaveLevelResult([FromBody] UserGameLevelResultReq request)
- {
- try
- {
- var apiResult = await SendGameApiAsync(request, UrlConstant.GameSaveLevelResultUrl);
- if (apiResult.data != null)
- {
- return Json(new
- {
- point = apiResult.data.point,
- data = apiResult.data.data,
- score = apiResult.data.score,
- transId = apiResult.data.transId,
- rewardType = apiResult.data.rewardType,
- rewardValue = apiResult.data.rewardValue,
- rewardUnit = apiResult.data.rewardUnit,
- success = apiResult.errorCode == "0"
- });
- }
- return Json(new
- {
- point = "0",
- data = "",
- // Khong tra lai score cu cua level truoc khi API ghi level loi.
- score = "0",
- transId = request.transId ?? "",
- rewardType = "",
- rewardValue = 0,
- rewardUnit = "",
- success = false,
- message = apiResult.message ?? "Save level result failed."
- });
- }
- catch (Exception ex)
- {
- log.Error("SaveLevelResult error: ", ex);
- return Json(new { success = false, message = ex.Message });
- }
- }
- [HttpPost]
- public async Task<IActionResult> ExitGame(UserGameLevelResultReq request)
- {
- try
- {
- log.Info($"ExitGame msisdn={request.msisdn}, transId={request.transId}, level={request.level}, score={request.score}, gameType={request.gameType}, gameOver={request.gameOver}");
- request.gameOver = request.gameOver == 0 ? 1 : request.gameOver;
- var apiResult = await SendGameApiAsync(request, UrlConstant.GameSaveLevelResultUrl);
- var payload = JsonSerializer.Serialize(new
- {
- type = "EXIT_GAME_RESULT",
- success = apiResult.errorCode == "0",
- score = apiResult.data?.score ?? request.score.ToString(),
- data = apiResult.data?.totalDataMb ?? 0,
- loyalty = apiResult.data?.totalLoyalty ?? 0,
- level = request.level,
- message = apiResult.message ?? ""
- });
- var callbackHtml = $"""
- <!doctype html>
- <html><head><meta charset="utf-8"></head><body>
- <script>window.parent.postMessage({payload}, "*");</script>
- </body></html>
- """;
- return Content(callbackHtml, "text/html; charset=utf-8");
- }
- catch (Exception ex)
- {
- log.Error("ExitGame error: ", ex);
- return Json(new { success = false, message = ex.Message });
- }
- }
- private async Task<UserGameLevelResultRes> SendGameApiAsync(UserGameLevelResultReq request, string apiPath)
- {
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn") ?? request.msisdn ?? "";
- var apiToken = HttpContext.Session.GetString("apiToken") ?? request.token ?? "";
- var language = GetCurrentLanguage();
- request.msisdn = msisdn;
- request.token = apiToken;
- request.language = language;
- var baseUrl = GetParameter("url");
- if (string.IsNullOrWhiteSpace(baseUrl) || string.IsNullOrWhiteSpace(apiToken))
- {
- return new UserGameLevelResultRes("{\"errorCode\":1,\"message\":\"Please login again.\",\"status\":false,\"data\":{}}");
- }
- var postTask = DotnetLib.Rest.RestHandler.SendPostWithAuthen(
- log,
- baseUrl + apiPath,
- request,
- apiToken,
- "",
- "",
- language);
- if (postTask == null)
- {
- return new UserGameLevelResultRes("{\"errorCode\":1,\"message\":\"Game API returned empty response.\",\"status\":false,\"data\":{}}");
- }
- var response = await postTask;
- if (response?.data == null)
- {
- return new UserGameLevelResultRes("{\"errorCode\":1,\"message\":\"Game API returned empty response.\",\"status\":false,\"data\":{}}");
- }
- return new UserGameLevelResultRes(response.data);
- }
- private string GetParameter(string key)
- {
- return _configuration.GetSection(key).Value
- ?? _configuration.GetSection("Url").Value
- ?? "";
- }
- private string GetCurrentLanguage()
- {
- var sessionLang = HttpContext.Session.GetComplexData<string>("culture");
- if (!string.IsNullOrWhiteSpace(sessionLang)) return sessionLang;
- return System.Globalization.CultureInfo.CurrentUICulture.Name.StartsWith("vi", StringComparison.OrdinalIgnoreCase) ? "vi" : "en";
- }
- }
- }
|