Program.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace Server
  10. {
  11. class Program
  12. {
  13. public static gr672_pgvEntities db = new gr672_pgvEntities();
  14. static void Main(string[] args)
  15. {
  16. Listen();
  17. Console.Read();
  18. }
  19. public static async void Listen()
  20. {
  21. HttpListener listener = new HttpListener();
  22. listener.Prefixes.Add($"http://127.0.0.1:8080/");
  23. listener.Start();
  24. Console.WriteLine("Ожидание подключений...");
  25. while (true)
  26. {
  27. HttpListenerContext context = await listener.GetContextAsync();
  28. HttpListenerRequest request = context.Request;
  29. //Все заправочные станции на которых есть выбранный вид топлива
  30. if (request.RawUrl.Contains("/stations?fuel") && request.HttpMethod == "GET")
  31. {
  32. string NameFuel = request.RawUrl.Split('=')[1];
  33. HttpListenerResponse response = context.Response;
  34. List<RootFuelInStation> rootFuelInStations = new List<RootFuelInStation>();
  35. var GasStation = db.FuelTypeOnGasStation.Where(x => x.FuelType.NameFuelType == NameFuel).ToList();
  36. foreach (var item in GasStation)
  37. {
  38. rootFuelInStations.Add(new RootFuelInStation() { GasStationID = item.IDGasStation, Address = item.GasStation.Address, Price = item.Price });
  39. }
  40. var Json = JsonConvert.SerializeObject(rootFuelInStations);
  41. byte[] buffer = System.Text.Encoding.UTF8.GetBytes(Json);
  42. response.ContentLength64 = buffer.Length;
  43. Stream output = response.OutputStream;
  44. output.Write(buffer, 0, buffer.Length);
  45. output.Close();
  46. Console.WriteLine($"{Json}");
  47. }
  48. //Информация о заправочной станции
  49. if (request.RawUrl.Contains("/getStationInfo?id") && request.HttpMethod == "GET")
  50. {
  51. int IDGasStation = Convert.ToInt32( request.RawUrl.Split('=')[1]);
  52. var GasStation = db.GasStation.Find(IDGasStation);
  53. if (GasStation == null)
  54. {
  55. HttpListenerResponse response = context.Response;
  56. byte[] buffer = Encoding.UTF8.GetBytes("АЗС не найдено");
  57. response.ContentLength64 = buffer.Length;
  58. Stream output = response.OutputStream;
  59. output.Write(buffer, 0, buffer.Length);
  60. output.Close();
  61. Console.WriteLine("АЗС не найдено");
  62. }
  63. else
  64. {
  65. RootDataOfGasStation dataOfGasStation = new RootDataOfGasStation();
  66. dataOfGasStation.GasStationID = GasStation.GasStationID;
  67. dataOfGasStation.Address = GasStation.Address;
  68. List<FuelInCurrentGasStation> rootFuelTypes = new List<FuelInCurrentGasStation>();
  69. foreach (var item in GasStation.FuelTypeOnGasStation)
  70. {
  71. rootFuelTypes.Add(new FuelInCurrentGasStation()
  72. { IDFuelType = item.IDFuelType, AmountOfFuel = item.AmountOfFuel, Price = item.Price, NameFuelType = item.FuelType.NameFuelType });
  73. }
  74. dataOfGasStation.FuelInCurrentGasStation = rootFuelTypes;
  75. var Json = JsonConvert.SerializeObject(dataOfGasStation);
  76. byte[] buffer = Encoding.UTF8.GetBytes(Json);
  77. HttpListenerResponse response = context.Response;
  78. response.ContentLength64 = buffer.Length;
  79. Stream output = response.OutputStream;
  80. output.Write(buffer, 0, buffer.Length);
  81. output.Close();
  82. Console.WriteLine($"{Json}");
  83. }
  84. }
  85. //Добавление или редактирование данных о заправочной станции
  86. if (request.RawUrl.Contains("/setStation") && request.HttpMethod == "POST")
  87. {
  88. StreamReader reader = new StreamReader(request.InputStream, Encoding.UTF8);
  89. string Json = await reader.ReadToEndAsync();
  90. RootDataOfGasStation DataOfGasStation = JsonConvert.DeserializeObject<RootDataOfGasStation>(Json);
  91. //Поиск заправочной станции
  92. var FindGasStation = db.GasStation.Find(DataOfGasStation.GasStationID);
  93. if (FindGasStation == null)
  94. {
  95. //Добавление новой заправочной станции
  96. GasStation NewGasStation = new GasStation()
  97. {
  98. GasStationID = DataOfGasStation.GasStationID,
  99. Address = DataOfGasStation.Address
  100. };
  101. db.GasStation.Add(NewGasStation);
  102. foreach (var item in DataOfGasStation.FuelInCurrentGasStation)
  103. {
  104. FuelTypeOnGasStation fuelTypeOnGasStation = new FuelTypeOnGasStation()
  105. {
  106. IDGasStation = NewGasStation.GasStationID,
  107. IDFuelType = item.IDFuelType,
  108. AmountOfFuel = item.AmountOfFuel,
  109. Price = item.Price
  110. };
  111. db.FuelTypeOnGasStation.Add(fuelTypeOnGasStation);
  112. }
  113. db.SaveChanges();
  114. }
  115. else
  116. {
  117. //Редактирование заправочной станции
  118. FindGasStation.GasStationID = DataOfGasStation.GasStationID;
  119. FindGasStation.Address = DataOfGasStation.Address;
  120. foreach (var item in DataOfGasStation.FuelInCurrentGasStation)
  121. {
  122. //Поиск цены на топливо
  123. FuelTypeOnGasStation FindfuelTypeOnGasStation = db.FuelTypeOnGasStation.
  124. FirstOrDefault(x => x.IDGasStation == FindGasStation.GasStationID && x.IDFuelType == item.IDFuelType);
  125. if (FindfuelTypeOnGasStation == null)
  126. {
  127. //Добавление цен на топливо
  128. FuelTypeOnGasStation fuelTypeOnGasStation = new FuelTypeOnGasStation()
  129. {
  130. IDGasStation = FindGasStation.GasStationID,
  131. IDFuelType = item.IDFuelType,
  132. AmountOfFuel = item.AmountOfFuel,
  133. Price = item.Price
  134. };
  135. db.FuelTypeOnGasStation.Add(fuelTypeOnGasStation);
  136. }
  137. else
  138. {
  139. //Редактирование цен на топливо
  140. FindfuelTypeOnGasStation.Price = item.Price;
  141. FindfuelTypeOnGasStation.AmountOfFuel = item.AmountOfFuel;
  142. }
  143. db.SaveChanges();
  144. }
  145. }
  146. HttpListenerResponse response = context.Response;
  147. byte[] buffer = Encoding.UTF8.GetBytes("Выполненно");
  148. response.ContentLength64 = buffer.Length;
  149. Stream output = response.OutputStream;
  150. output.Write(buffer, 0, buffer.Length);
  151. output.Close();
  152. Console.WriteLine("Выполненно");
  153. }
  154. }
  155. }
  156. }
  157. }