singlechip_communication.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net.Sockets;
  7. using System.Threading;
  8. using Google.Protobuf;
  9. using chutian_parking_terminal.communication_base;
  10. using chutian_parking_terminal.data_buffer;
  11. using Newtonsoft.Json.Linq;
  12. using tool;
  13. using System.Windows.Forms;
  14. using chutian_parking_terminal.front_terminal_manager;
  15. using Newtonsoft.Json;
  16. using communication_base;
  17. namespace chutian_parking_terminal.communication
  18. {
  19. public class Singlechip_communication : Communication_socket_tcp_base
  20. {
  21. //由于C#不能多继承 就只能直接写成单例模式了
  22. /// <summary>
  23. /// 单例
  24. /// </summary>
  25. class Nested
  26. {
  27. // 创建模板类实例,参数2设为true表示支持私有构造函数
  28. internal static readonly Singlechip_communication instance = Activator.CreateInstance(typeof(Singlechip_communication), true) as Singlechip_communication;
  29. }
  30. private static Singlechip_communication instance = null;
  31. public static Singlechip_communication Instance
  32. {
  33. get
  34. {
  35. return Nested.instance;
  36. }
  37. }
  38. public int m_stop_singlechip_index;
  39. public int terminalId;
  40. private Singlechip_communication()
  41. {
  42. }
  43. /// <summary>
  44. /// 初始化单片机通信,停车单片机默认最后一个连接
  45. /// </summary>
  46. public void singlechip_communication_init()
  47. {
  48. terminalId = int.Parse(json_file_operation.Instance.read_json_string("ternimalNumber"));
  49. JArray t_ip_array = json_file_operation.Instance.read_json_jarray("pickup_singleChipAddress");
  50. JArray t_port_array = json_file_operation.Instance.read_json_jarray("pickup_singleChipPort");
  51. t_ip_array.Add(json_file_operation.Instance.read_json_string("singleChipAddress"));
  52. t_port_array.Add(json_file_operation.Instance.read_json_string("singleChipPort"));
  53. m_stop_singlechip_index = t_ip_array.Count-1;
  54. base.communication_socket_tcp_init(t_ip_array, t_port_array);
  55. }
  56. public void singlechip_communication_connect()
  57. {
  58. base.communication_socket_tcp_connect();
  59. }
  60. public void singlechip_communication_uninit()
  61. {
  62. base.communication_socket_tcp_uninit();
  63. }
  64. /// <summary>
  65. /// 检查入口状态
  66. /// </summary>
  67. /// <returns></returns>
  68. public bool check_entrance_statu()
  69. {
  70. if (m_communication_status[m_stop_singlechip_index] == Communication_socket_tcp_statu.COMMUNICATION_TCP_READY)
  71. {
  72. return true;
  73. }
  74. return false;
  75. }
  76. /// <summary>
  77. /// 检查出口状态
  78. /// </summary>
  79. /// <returns></returns>
  80. public bool check_exit_statu()
  81. {
  82. return true;
  83. for (int index = 0; index < base.m_connect_count-1; ++index)
  84. {
  85. if (m_communication_status[index] != Communication_socket_tcp_statu.COMMUNICATION_TCP_READY)
  86. {
  87. return false;
  88. }
  89. }
  90. return true;
  91. }
  92. //重载处理消息
  93. public override void execute_msg(int index,string msg)
  94. {
  95. //Console.WriteLine(msg);
  96. if (msg.Contains("InPutDi"))
  97. {
  98. Message.Singlechip_data t_singlechip_msg = Message.Singlechip_data.Parser.ParseJson(msg);
  99. if (t_singlechip_msg.DispatchDirection == 1)
  100. {
  101. Front_terminal_manager.Instance.get_singlechip_data_bufferr().set_entrance_singlechip_msg(t_singlechip_msg);
  102. Message.Terminal_status_msg terminal_Status_Msg = new Message.Terminal_status_msg();
  103. Message.Base_info base_Info = new Message.Base_info();
  104. base_Info.MsgType = Message.Message_type.ETerminalStatusMsg;
  105. base_Info.Sender = Message.Communicator.ETerminor;
  106. base_Info.Receiver = Message.Communicator.EEmpty;
  107. base_Info.TimeoutMs = 1000;
  108. Message.Singlechip_data singlechip_data = new Message.Singlechip_data();
  109. if (Singlechip_communication.Instance.check_entrance_statu())
  110. {
  111. singlechip_data = Front_terminal_manager.Instance.get_singlechip_data_bufferr().get_entrance_singlechip_msg();
  112. terminal_Status_Msg.SinglechipValidity = true;
  113. }
  114. else
  115. {
  116. terminal_Status_Msg.SinglechipValidity = false;
  117. }
  118. singlechip_data.TerminalID = terminalId;
  119. singlechip_data.DispatchDirection = 1;
  120. terminal_Status_Msg.BaseInfo = base_Info;
  121. Message.Id_struct id_Struct = new Message.Id_struct();
  122. id_Struct.TerminalId = terminalId;
  123. terminal_Status_Msg.IdStruct = id_Struct;
  124. terminal_Status_Msg.SinglechipData = singlechip_data;
  125. Channel_communication.Instance.encapsulate_msg(terminal_Status_Msg.ToByteArray());
  126. //Console.WriteLine("发送的---:" + terminal_Status_Msg.ToString() + " " + DateTime.Now.Millisecond);
  127. }
  128. else if (t_singlechip_msg.DispatchDirection == 2)
  129. {
  130. Front_terminal_manager.Instance.get_singlechip_data_bufferr().set_exit_singlechip_msg(index, t_singlechip_msg);
  131. }
  132. }
  133. }
  134. //重载封装消息
  135. public override void encapsulate_msg(int index,string message)
  136. {
  137. base.encapsulate_msg(index, message);
  138. }
  139. //重载定时封装
  140. public override void encapsulate_send_data()
  141. {
  142. //encapsulate_msg(m_stop_singlechip_index, Front_terminal_manager.Instance.get_singlechip_data_bufferr().get_entrance_terminal_msg().ToString());
  143. //for (int i = 0; i < this.m_connect_count; ++i)
  144. //{
  145. // if ( i!= m_stop_singlechip_index )
  146. // {
  147. // string exit_terminal_msg = new JsonFormatter(JsonFormatter.Settings.Default).Format(Front_terminal_manager.Instance.get_singlechip_data_bufferr().get_exit_terminal_msg(i));
  148. // encapsulate_msg(i, exit_terminal_msg);
  149. // }
  150. //}
  151. }
  152. }
  153. }