WsServer.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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.Net.Sockets;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace WssGui
  11. {
  12. public class WsServer
  13. {
  14. private static IPHostEntry iPHostEntry = Dns.GetHostEntry("localhost");
  15. private static IPAddress iPAddress = iPHostEntry.AddressList[0];
  16. private static IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, 11000);
  17. private static Socket socket = new Socket(iPAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  18. private static byte[] bytes = new byte[1024];
  19. private static Socket handlerSocket = null;
  20. public static void WsServerStart()
  21. {
  22. socket.Bind(iPEndPoint);
  23. socket.Listen(10);
  24. while (true)
  25. {
  26. handlerSocket = socket.Accept();
  27. string data = null;
  28. data += WsServerResponseClient();
  29. var clientMessage = data.Split(' ');
  30. if (clientMessage[0] == "SetUserSession")
  31. {
  32. var request = GetWebRequest("/set_session_user");
  33. var dataSendtoServerApi = JsonConvert.SerializeObject(new
  34. {
  35. id_user = clientMessage[1],
  36. date_start = DateTime.Now.ToString()
  37. }, Formatting.Indented);
  38. using (var streamWriter = new StreamWriter(request.GetRequestStream()))
  39. {
  40. streamWriter.Write(dataSendtoServerApi);
  41. }
  42. var response = request.GetResponse();
  43. using (var streamReader = new StreamReader(response.GetResponseStream()))
  44. {
  45. var jsonResponse = JsonConvert.DeserializeObject<RespSetSessionUser>(streamReader.ReadToEnd());
  46. WsServerSendMessage(jsonResponse.id_user_session.ToString());
  47. WsServerHandlerClose();
  48. }
  49. }
  50. else if (clientMessage[0] == "UpdateUserSession")
  51. {
  52. var request = GetWebRequest("/update_session_user");
  53. var dataSend = JsonConvert.SerializeObject(new
  54. {
  55. Id = Convert.ToInt32(clientMessage[1]),
  56. date_finish = DateTime.Now.ToString()
  57. }, Formatting.Indented);
  58. using (var streamWriter = new StreamWriter(request.GetRequestStream()))
  59. {
  60. streamWriter.Write(dataSend);
  61. }
  62. request.GetResponse();
  63. }
  64. }
  65. }
  66. private static WebRequest GetWebRequest(string path)
  67. {
  68. WebRequest request = WebRequest.Create($"http://127.0.0.1:5000{path}");
  69. request.ContentType = "application/json";
  70. request.Method = "POST";
  71. return request;
  72. }
  73. public static string WsServerResponseClient()
  74. {
  75. return Encoding.UTF8.GetString(bytes, 0, handlerSocket.Receive(bytes));
  76. }
  77. public static void WsServerSendMessage(string data)
  78. {
  79. handlerSocket.Send(Encoding.UTF8.GetBytes(data));
  80. }
  81. public static void WsServerClose()
  82. {
  83. socket.Shutdown(SocketShutdown.Both);
  84. socket.Close();
  85. }
  86. public static void WsServerHandlerClose()
  87. {
  88. handlerSocket.Shutdown(SocketShutdown.Both);
  89. handlerSocket.Close();
  90. }
  91. public class RespSetSessionUser
  92. {
  93. public int id_user_session { get; set; }
  94. }
  95. }
  96. }