using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace BankServer { class Program { static void Main(string[] args) { Listen(); Console.Read(); } public static async Task Pay(HttpListenerContext context, HttpListenerRequest request) { StreamReader reader = new StreamReader(request.InputStream, Encoding.UTF8); string Json = await reader.ReadToEndAsync(); DataOfPayment dataOfPayment = JsonConvert.DeserializeObject(Json); HttpListenerResponse response = context.Response; byte[] buffer; if (dataOfPayment.PIN == "0000") { buffer = Encoding.UTF8.GetBytes("Отклонено.Код транзакции: 00000000 - 000000. Неверный PIN."); response.ContentLength64 = buffer.Length; Stream outputErrorePIN = response.OutputStream; outputErrorePIN.Write(buffer, 0, buffer.Length); outputErrorePIN.Close(); return buffer.ToString(); } if (dataOfPayment.PriceRefueling > dataOfPayment.Balance) { buffer = Encoding.UTF8.GetBytes("Отклонено.Код транзакции: 00000000 - 000000. Не достаточно средств."); response.ContentLength64 = buffer.Length; Stream outputErroreBalance = response.OutputStream; outputErroreBalance.Write(buffer, 0, buffer.Length); outputErroreBalance.Close(); return buffer.ToString(); } buffer = Encoding.UTF8.GetBytes($"Одобрено. Код транзакции: {DateTime.Now.ToString("ddMMyyyy - hhmmss")}") ; response.ContentLength64 = buffer.Length; Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); output.Close(); return buffer.ToString(); } public static async void Listen() { HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://127.0.0.1:8081/"); listener.Start(); Console.WriteLine("Ожидание подключений"); while (true) { HttpListenerContext context = await listener.GetContextAsync(); HttpListenerRequest request = context.Request; if (request.RawUrl.Contains("/pay") && request.HttpMethod == "POST") { string State = await Pay(context, request); Console.WriteLine(State); } if (request.RawUrl.Contains("/refund") && request.HttpMethod == "POST") { HttpListenerResponse response = context.Response; byte[] buffer = Encoding.UTF8.GetBytes($"Средства возвращены."); response.ContentLength64 = buffer.Length; Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); output.Close(); } } } } }