MiniGameController.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. using Microsoft.EntityFrameworkCore.Metadata.Internal;
  2. using NEducation.Code;
  3. using NEducation.Models;
  4. using NEducation.NEduService;
  5. using Newtonsoft.Json;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Web;
  11. using System.Web.Mvc;
  12. namespace NEducation.Controllers
  13. {
  14. public class MiniGameController : Controller
  15. {
  16. private bool CheckAuthToken()
  17. {
  18. if (Session["AuthToken"] != null && Request.Cookies["AuthToken"] != null)
  19. {
  20. if (!Session["AuthToken"].ToString().Equals(Request.Cookies["AuthToken"].Value))
  21. {
  22. return false;
  23. }
  24. else
  25. {
  26. return true;
  27. }
  28. }
  29. else
  30. {
  31. return false;
  32. }
  33. }
  34. // GET: MiniGame
  35. //public ActionResult Index()
  36. //{
  37. // //Session["courseType"] = "10";
  38. // //return View("Index");
  39. // if (CheckAuthToken())
  40. // {
  41. // CheckMiniGameModel model = new CheckMiniGameModel();
  42. // CheckMiniGameRequest miniGameRequest = new CheckMiniGameRequest();
  43. // miniGameRequest.users = Session["msisdn"] as string;
  44. // miniGameRequest.serviceId = "3";
  45. // String rs = UtilsController.SendPost(miniGameRequest, Session.SessionID, UtilsController.WsType.GetMiniGameCondition);
  46. // System.Diagnostics.Debug.WriteLine("rs: " + rs);
  47. // UserActionResult res = new UserActionResult(rs);
  48. // MiniGame miniGame = new MiniGame(rs);
  49. // model.MiniGame = miniGame;
  50. // return View("Index", model);
  51. // }
  52. // else
  53. // {
  54. // Session.Clear();
  55. // return Redirect("/Home/Index");
  56. // }
  57. //}
  58. public ActionResult Index()
  59. {
  60. if (CheckAuthToken())
  61. {
  62. CheckMiniGameModel model = new CheckMiniGameModel();
  63. CheckMiniGameRequest miniGameRequest = new CheckMiniGameRequest
  64. {
  65. users = Session["msisdn"] as string,
  66. serviceId = "3"
  67. };
  68. string rs = UtilsController.SendPost(miniGameRequest, Session.SessionID, UtilsController.WsType.GetMiniGameCondition);
  69. System.Diagnostics.Debug.WriteLine("rs: " + rs);
  70. UserActionResult res = new UserActionResult(rs);
  71. MiniGame miniGame = new MiniGame(rs);
  72. model.MiniGame = miniGame;
  73. DateTime sysdate = model.MiniGame.Sysdate;
  74. DateTime startDate = model.MiniGame.StartDate;
  75. DateTime endDate = model.MiniGame.EndDate;
  76. bool isPlay = model.MiniGame.IsPlay == "0";
  77. bool status = model.MiniGame.Status == "0";
  78. string isSubscribed = model.MiniGame.UserIsActive;
  79. // Convert dates to strings in a format that JavaScript can understand
  80. ViewBag.Sysdate = sysdate.ToString("MM/dd/yyyy HH:mm:ss");
  81. ViewBag.StartDate = startDate.ToString("MM/dd/yyyy HH:mm:ss");
  82. ViewBag.EndDate = endDate.ToString("MM/dd/yyyy HH:mm:ss");
  83. if (sysdate < startDate)
  84. {
  85. ViewBag.CountdownDate = startDate.ToString("MM/dd/yyyy HH:mm:ss");
  86. ViewBag.ShowClock = true;
  87. ViewBag.ShowPlayButton = false;
  88. }
  89. else if (sysdate >= startDate && sysdate <= endDate && isPlay && status)
  90. {
  91. ViewBag.CountdownDate = endDate.ToString("MM/dd/yyyy HH:mm:ss");
  92. ViewBag.ShowClock = true;
  93. ViewBag.ShowPlayButton = false;
  94. }
  95. else
  96. {
  97. ViewBag.ShowClock = false;
  98. ViewBag.ShowPlayButton = true;
  99. }
  100. ViewBag.IsSubscribed = isSubscribed;
  101. return View("Index", model);
  102. }
  103. else
  104. {
  105. Session.Clear();
  106. return Redirect("/Home/Index");
  107. }
  108. }
  109. //Winner
  110. public ActionResult GetWinner()
  111. {
  112. if (CheckAuthToken())
  113. {
  114. WinnerMiniGameModel model = new WinnerMiniGameModel();
  115. CheckMiniGameRequest miniGameRequest = new CheckMiniGameRequest();
  116. miniGameRequest.users = Session["msisdn"] as string;
  117. miniGameRequest.serviceId = "3";
  118. String rs = UtilsController.SendPost(miniGameRequest, Session.SessionID, UtilsController.WsType.GetRankMiniGame);
  119. System.Diagnostics.Debug.WriteLine("rs: " + rs);
  120. UserActionResult res = new UserActionResult(rs);
  121. if (res.status == UtilsController.Constant.SUCCESS)
  122. {
  123. Winner winner = new Winner(rs);
  124. model.Winner = winner;
  125. foreach (var winnerElement in winner.listWinner)
  126. {
  127. if (winnerElement.msisdn == miniGameRequest.users)
  128. {
  129. model.currentWinner = winnerElement;
  130. break;
  131. }
  132. }
  133. return PartialView("_RankingDataPartial", model);
  134. }
  135. else
  136. {
  137. return Redirect("/Common/Error");
  138. }
  139. }
  140. else
  141. {
  142. Session.Clear();
  143. return Redirect("/Home/Index");
  144. }
  145. }
  146. public ActionResult StartPlay()
  147. {
  148. Session.Remove("model");
  149. GrammarModel model = new GrammarModel();
  150. model.answerList = new List<AnswerResult>();
  151. model.currentQuestionIndex = 0;
  152. model.remainTime = UtilsController.questionTimeout;
  153. model.startTime = DateTime.Now;
  154. UserRequest userRequest = new UserRequest();
  155. userRequest.users = Session["msisdn"] as string;
  156. userRequest.lessonId = "-1";
  157. String rs = UtilsController.SendPost(userRequest, Session.SessionID, UtilsController.WsType.GetContentOfQuestion);
  158. UserActionResult res = new UserActionResult(rs);
  159. System.Diagnostics.Debug.WriteLine("grammar res: " + rs);
  160. if (res.status == "0")
  161. {
  162. ListLessonData lessons = new ListLessonData(rs);
  163. System.Diagnostics.Debug.WriteLine(lessons.questions);
  164. model.questions = lessons.questions;
  165. model.question = lessons.questions[model.currentQuestionIndex];
  166. System.Diagnostics.Debug.WriteLine(model.questions);
  167. Session["model"] = model;
  168. return Redirect("/Minigame/Play");
  169. }
  170. else
  171. {
  172. return Redirect("/Minigame/Index");
  173. }
  174. }
  175. public ActionResult Play()
  176. {
  177. //Session["courseType"] = "10";
  178. System.Diagnostics.Debug.WriteLine("Play: ");
  179. if (CheckAuthToken())
  180. {
  181. GrammarModel model = Session["model"] as GrammarModel;
  182. if (model == null)
  183. {
  184. System.Diagnostics.Debug.WriteLine(model);
  185. return Redirect("/Minigame/Index");
  186. }
  187. else
  188. {
  189. model.remainTime = UtilsController.questionTimeout - (int)DateTime.Now.Subtract(model.startTime).TotalSeconds;
  190. //int time = ((int)DateTime.Now.Subtract(model.startTime).TotalSeconds);
  191. return View("Play", model);
  192. }
  193. }
  194. else
  195. {
  196. Session.Clear();
  197. return Redirect("/Home/Index");
  198. }
  199. }
  200. public void ConfirmPlayQuestion(List<AnswerResult> questionResult)
  201. {
  202. QuestionResult result = new QuestionResult();
  203. result.ANSWER_LIST = questionResult;
  204. result.msisdn = Session["msisdn"] as String;
  205. result.users = Session["msisdn"] as String;
  206. result.LESSON_ID = "-1";
  207. // Assuming you have a method to send data to an external service
  208. var response = UtilsController.SendPost(result,
  209. Session.SessionID, UtilsController.WsType.GetAnsweerOfQuestion);
  210. // Log response for debugging
  211. System.Diagnostics.Debug.WriteLine("Response: " + response);
  212. }
  213. [HttpPost]
  214. public JsonResult SendAnswer(AnswerResult data)
  215. {
  216. // check model
  217. GrammarModel model = Session["model"] as GrammarModel;
  218. if (model == null)
  219. {
  220. return Json(new { error = "1" });
  221. }
  222. else
  223. {
  224. if (model.question.id != data.QUESTION_ID)
  225. {
  226. return Json(new { error = "1" });
  227. }
  228. // check result correct or not
  229. if (model.question.answerTrue == data.ANSWER)
  230. {
  231. // add answer list
  232. AnswerResult result = new AnswerResult();
  233. result.QUESTION_ID = model.question.id;
  234. result.ANSWER = data.ANSWER;
  235. result.RESULT = "1";
  236. result.TIME = (UtilsController.questionTimeout - model.remainTime).ToString();
  237. model.answerList.Add(result);
  238. // check finish
  239. if (model.currentQuestionIndex == model.questions.Count)
  240. {
  241. // submit result
  242. ConfirmPlayQuestion(model.answerList);
  243. // clear cache
  244. Session.Remove("model");
  245. return Json(new
  246. {
  247. error = "0",
  248. finish = "1"
  249. });
  250. }
  251. else
  252. {
  253. // next question
  254. model.currentQuestionIndex++;
  255. model.question = model.questions[model.currentQuestionIndex-1];
  256. model.startTime = DateTime.Now;
  257. model.remainTime = UtilsController.questionTimeout;
  258. Session["model"] = model;
  259. return Json(new
  260. {
  261. error = "0",
  262. question = model.question
  263. });
  264. }
  265. }
  266. else
  267. {
  268. // wrong
  269. ConfirmPlayQuestion(model.answerList);
  270. return Json(new { error = "2" });
  271. }
  272. }
  273. }
  274. public ActionResult Result(int check)
  275. {
  276. ViewBag.check = check;
  277. return View("result");
  278. }
  279. }
  280. }