// GET: War/Details/{id} public async Task <ActionResult> Details(int id) { WarModel detailedWar = new WarModel(); // Vérification que l'ID passé soit valide if (id <= 0) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:62313"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync("api/wars/" + id); if (response.IsSuccessStatusCode) { string temp = await response.Content.ReadAsStringAsync(); detailedWar = JsonConvert.DeserializeObject <WarModel>(temp); } else { return(HttpNotFound()); } } return(View(detailedWar)); }
public ActionResult Index() { WarModel model = null; HttpCookie cookie = Request.Cookies.Get("wardata"); if (cookie != null) { try { using (var ms = new MemoryStream(Convert.FromBase64String(cookie.Value))) { model = ProtoBuf.Serializer.Deserialize <WarModel>(ms); } } catch { } } if (model == null) { var rng = new Random(); const int MIN = 801; const int MAX = 806; model = new WarModel(); model.AttackerName = "进攻方"; model.Attacker = new List <string> { rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", }; model.DefenderName = "防守方"; model.Defender = new List <string> { rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), rng.Next(MIN, MAX).ToString(), "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", }; } var xmlFile = XElement.Load(Server.MapPath("~/App_Data/UnitType.xml")); var data = xmlFile.Elements().Select(x => new SelectListItem { Text = (string)x.Element("Name"), Value = (string)x.Element("ID") }); model.DataSource = data; return(View(model)); }
// GET: War/Update/{id} public async Task <ActionResult> Update(int id) { WarModel warModel = new WarModel(); using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:62313"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync("api/wars/" + id); if (response.IsSuccessStatusCode) { string temp = await response.Content.ReadAsStringAsync(); warModel = JsonConvert.DeserializeObject <WarModel>(temp); } else { return(HttpNotFound()); } } /* Vérification que la guerre comporte au moins 1 combat */ if (warModel.Fights.Count == 0) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } /* Obtention de la maison vainqueure */ warModel.ID_WinnerHouse = GetWarWinner(warModel); /* Envoie de l'objet WarModel via API POST */ var request = (HttpWebRequest)WebRequest.Create("http://localhost:62313/api/wars/" + warModel.ID); request.Accept = "application/json; charset=utf-8"; request.Method = "PUT"; var content = new JavaScriptSerializer().Serialize(warModel); var data = Encoding.ASCII.GetBytes(content); request.ContentType = "application/json"; request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } return(RedirectToAction("Details", new { id = warModel.ID })); }
/* * Méthode permettant de savoir qui à gagner la guerre * Renvoie l'ID de la maison vainqueure */ private int GetWarWinner(WarModel war) { int ptsAlly = 0, ptsEnnemy = 0; int idWinner; foreach (FightModel fight in war.Fights) { if (fight.ID_Winner == fight.FirstCharacter.ID) { ptsAlly += 1; } else { ptsEnnemy += 1; } } if (ptsAlly > ptsEnnemy) { idWinner = war.FirstHouse.ID; } else if (ptsAlly < ptsEnnemy) { idWinner = war.SecondHouse.ID; } else { Random rnd = new Random(); int winner = rnd.Next(1, 3); if (winner <= 1) { idWinner = war.FirstHouse.ID; } else { idWinner = war.SecondHouse.ID; } } return(idWinner); }
public async Task <ActionResult> Create(CreateWarModel fight) { WarModel warModel = new WarModel(); HttpWebResponse webResponse = null; int idWar; if (fight.SelectedAllyHouse == fight.SelectedEnnemyHouse) { ModelState.AddModelError(string.Empty, "Vous devez sélectionner deux maisons différentes !"); return(View("Create")); } using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:62313"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); /* Récupération première maison sélectionnée via API */ HttpResponseMessage response = await client.GetAsync("api/houses/" + fight.SelectedAllyHouse); if (response.IsSuccessStatusCode) { string temp = await response.Content.ReadAsStringAsync(); warModel.FirstHouse = JsonConvert.DeserializeObject <HouseModel>(temp); } else { return(HttpNotFound()); } /* Récupération deuxième maison sélectionnée via API */ response = await client.GetAsync("api/houses/" + fight.SelectedEnnemyHouse); if (response.IsSuccessStatusCode) { string temp = await response.Content.ReadAsStringAsync(); warModel.SecondHouse = JsonConvert.DeserializeObject <HouseModel>(temp); } else { return(HttpNotFound()); } /* Envoie de l'objet WarModel via API POST */ var request = (HttpWebRequest)WebRequest.Create("http://localhost:62313/api/wars"); request.Accept = "application/json; charset=utf-8"; request.Method = "POST"; var content = new JavaScriptSerializer().Serialize(warModel); var data = Encoding.ASCII.GetBytes(content); request.ContentType = "application/json"; request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } webResponse = (HttpWebResponse)request.GetResponse(); /* Récupération du nombre de War pour avoir l'ID pour redirection sur la page de Détails de la Guerre créee */ response = await client.GetAsync("api/wars/"); if (response.IsSuccessStatusCode) { string temp = await response.Content.ReadAsStringAsync(); idWar = JsonConvert.DeserializeObject <List <WarModel> >(temp).Count; } else { return(HttpNotFound()); } } return(RedirectToAction("Details", new { id = idWar })); }
public ActionResult Index(WarModel model) { HttpCookie cookie = new HttpCookie("wardata"); using (var ms = new MemoryStream()) { ProtoBuf.Serializer.Serialize(ms, model); cookie.Value = Convert.ToBase64String(ms.ToArray()); Response.Cookies.Add(cookie); } var combat = new Combat(); var attacker = new Army(); for (int i = 0; i < model.Attacker.Count; i++) { if (!string.IsNullOrWhiteSpace(model.Attacker[i])) { attacker.Units.Add(new Unit { ID = int.Parse(model.Attacker[i]), Positon = i }); } } combat.LoadAttacker(attacker); var defender = new Army(); for (int i = 0; i < model.Defender.Count; i++) { if (!string.IsNullOrWhiteSpace(model.Defender[i])) { defender.Units.Add(new Unit { ID = int.Parse(model.Defender[i]), Positon = i }); } } combat.LoadDefender(defender); if (!combat.Perform()) { return(View()); } combat.Report.Player1 = model.AttackerName; combat.Report.Player2 = model.DefenderName; using (var ms = new MemoryStream()) { ProtoBuf.Serializer.Serialize(ms, combat.Report); //ViewBag.Data = Convert.ToBase64String(ms.ToArray()); var data = ms.ToArray(); var sb = new StringBuilder(); foreach (var b in data) { sb.Append(b.ToString("x2")); } ViewBag.Data = sb.ToString(); } return(View("War")); }