singlechip_communication.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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 chutian_parking_terminal.motion_executer;
  12. using Newtonsoft.Json.Linq;
  13. using tool;
  14. using System.Windows.Forms;
  15. using chutian_parking_terminal.front_terminal_manager;
  16. using Newtonsoft.Json;
  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. private Singlechip_communication()
  40. {
  41. }
  42. /// <summary>
  43. /// 初始化单片机通信,停车单片机默认最后一个连接
  44. /// </summary>
  45. public void singlechip_communication_init()
  46. {
  47. JArray t_ip_array = json_file_operation.Instance.read_json_jarray("pickup_singleChipAddress");
  48. JArray t_port_array = json_file_operation.Instance.read_json_jarray("pickup_singleChipPort");
  49. t_ip_array.Add(json_file_operation.Instance.read_json_string("singleChipAddress"));
  50. t_port_array.Add(json_file_operation.Instance.read_json_string("singleChipPort"));
  51. m_stop_singlechip_index = t_ip_array.Count-1;
  52. base.communication_socket_tcp_init(t_ip_array, t_port_array);
  53. }
  54. public void singlechip_communication_connect()
  55. {
  56. base.communication_socket_tcp_connect();
  57. }
  58. public void singlechip_communication_uninit()
  59. {
  60. base.communication_socket_tcp_uninit();
  61. }
  62. /// <summary>
  63. /// 检查入口状态
  64. /// </summary>
  65. /// <returns></returns>
  66. public bool check_entrance_statu()
  67. {
  68. if (m_communication_status[m_stop_singlechip_index] != Communication_socket_tcp_statu.COMMUNICATION_TCP_READY)
  69. {
  70. return false;
  71. }
  72. return true;
  73. }
  74. /// <summary>
  75. /// 检查出口状态
  76. /// </summary>
  77. /// <returns></returns>
  78. public bool check_exit_statu()
  79. {
  80. return true;
  81. for (int index = 0; index < base.m_connect_count-1; ++index)
  82. {
  83. if (m_communication_status[index] != Communication_socket_tcp_statu.COMMUNICATION_TCP_READY)
  84. {
  85. return false;
  86. }
  87. }
  88. return true;
  89. }
  90. //重载处理消息
  91. public override void execute_msg(int index,string msg)
  92. {
  93. if (msg.Contains("InPutDi"))
  94. {
  95. Console.WriteLine("单片机的消息:"+msg + " size:" + msg.Length+"\n");
  96. SingleChip.initial_singlechip_msg initial_Singlechip_Msg = SingleChip.initial_singlechip_msg.Parser.ParseJson(msg);
  97. //Console.WriteLine("单片机的消息解析后:" + initial_Singlechip_Msg.ToString() + " size:" + msg.Length + "\n");
  98. if (initial_Singlechip_Msg.DispatchDirection == 1)
  99. {
  100. Front_terminal_manager.Instance.get_singlechip_data_bufferr().set_entrance_singlechip_msg(initial_Singlechip_Msg);
  101. }
  102. else if (initial_Singlechip_Msg.DispatchDirection == 2)
  103. {
  104. Front_terminal_manager.Instance.get_singlechip_data_bufferr().set_exit_singlechip_msg(index, initial_Singlechip_Msg);
  105. }
  106. }
  107. }
  108. //重载封装消息
  109. public override void encapsulate_msg(int index,string message)
  110. {
  111. base.encapsulate_msg(index, message);
  112. }
  113. //重载定时封装
  114. public override void encapsulate_send_data()
  115. {
  116. //Console.WriteLine("终端发送给单片机的"+ Front_terminal_manager.Instance.get_singlechip_data_bufferr().get_entrance_terminal_msg().ToString() + " size:"+ Front_terminal_manager.Instance.get_singlechip_data_bufferr().get_entrance_terminal_msg().ToString().Length + "\n");
  117. //encapsulate_msg(m_stop_singlechip_index, Front_terminal_manager.Instance.get_singlechip_data_bufferr().get_entrance_terminal_msg().ToString());
  118. //for (int i = 0; i < this.m_connect_count; ++i)
  119. //{
  120. // if ( i!= m_stop_singlechip_index )
  121. // {
  122. // string exit_terminal_msg = new JsonFormatter(JsonFormatter.Settings.Default).Format(Front_terminal_manager.Instance.get_singlechip_data_bufferr().get_exit_terminal_msg(i));
  123. // encapsulate_msg(i, exit_terminal_msg);
  124. // }
  125. //}
  126. }
  127. }
  128. }