Program.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 BankServer
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. Listen();
  16. Console.Read();
  17. }
  18. public static async Task<string> Pay(HttpListenerContext context, HttpListenerRequest request)
  19. {
  20. StreamReader reader = new StreamReader(request.InputStream, Encoding.UTF8);
  21. string Json = await reader.ReadToEndAsync();
  22. DataOfPayment dataOfPayment = JsonConvert.DeserializeObject<DataOfPayment>(Json);
  23. HttpListenerResponse response = context.Response;
  24. byte[] buffer;
  25. if (dataOfPayment.PIN == "0000")
  26. {
  27. buffer = Encoding.UTF8.GetBytes("Отклонено.Код транзакции: 00000000 - 000000. Неверный PIN.");
  28. response.ContentLength64 = buffer.Length;
  29. Stream outputErrorePIN = response.OutputStream;
  30. outputErrorePIN.Write(buffer, 0, buffer.Length);
  31. outputErrorePIN.Close();
  32. return buffer.ToString();
  33. }
  34. if (dataOfPayment.PriceRefueling > dataOfPayment.Balance)
  35. {
  36. buffer = Encoding.UTF8.GetBytes("Отклонено.Код транзакции: 00000000 - 000000. Не достаточно средств.");
  37. response.ContentLength64 = buffer.Length;
  38. Stream outputErroreBalance = response.OutputStream;
  39. outputErroreBalance.Write(buffer, 0, buffer.Length);
  40. outputErroreBalance.Close();
  41. return buffer.ToString();
  42. }
  43. buffer = Encoding.UTF8.GetBytes($"Одобрено. Код транзакции: {DateTime.Now.ToString("ddMMyyyy - hhmmss")}") ;
  44. response.ContentLength64 = buffer.Length;
  45. Stream output = response.OutputStream;
  46. output.Write(buffer, 0, buffer.Length);
  47. output.Close();
  48. return buffer.ToString();
  49. }
  50. public static async void Listen()
  51. {
  52. HttpListener listener = new HttpListener();
  53. listener.Prefixes.Add("http://127.0.0.1:8081/");
  54. listener.Start();
  55. Console.WriteLine("Ожидание подключений");
  56. while (true)
  57. {
  58. HttpListenerContext context = await listener.GetContextAsync();
  59. HttpListenerRequest request = context.Request;
  60. if (request.RawUrl.Contains("/pay") && request.HttpMethod == "POST")
  61. {
  62. string State = await Pay(context, request);
  63. Console.WriteLine(State);
  64. }
  65. if (request.RawUrl.Contains("/refund") && request.HttpMethod == "POST")
  66. {
  67. HttpListenerResponse response = context.Response;
  68. byte[] buffer = Encoding.UTF8.GetBytes($"Средства возвращены.");
  69. response.ContentLength64 = buffer.Length;
  70. Stream output = response.OutputStream;
  71. output.Write(buffer, 0, buffer.Length);
  72. output.Close();
  73. }
  74. }
  75. }
  76. }
  77. }