AbstractMessage.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. using System;
  2. using System.Collections.Generic;
  3. namespace parkMonitor.entity
  4. {
  5. /// <summary>
  6. /// 抽象消息类
  7. /// </summary>
  8. public abstract class AbstractMessage
  9. {
  10. }
  11. /// <summary>
  12. /// 用户指令类,p预约停,f预约取
  13. /// </summary>
  14. public class MessageUTF8 : AbstractMessage, ICloneable
  15. {
  16. /// <summary>
  17. /// 指令类型
  18. /// </summary>
  19. public string cmd { set; get; }
  20. /// <summary>
  21. /// 号牌
  22. /// </summary>
  23. public string context { set; get; }
  24. /// <summary>
  25. /// userID
  26. /// </summary>
  27. public string sender { set; get; }
  28. public string receiver { set; get; }
  29. public int parkingRecordsID { set; get; }
  30. public int garageID { get; set; }
  31. /// <summary>
  32. /// 预约起始时间
  33. /// </summary>
  34. public string bookTime{ get; set; }
  35. /// <summary>
  36. /// 预约时长
  37. /// </summary>
  38. public int bookLength { get; set; }
  39. public MessageUTF8()
  40. {
  41. }
  42. public MessageUTF8(string cmd, string context, string sender, string receiver, int garageID, int parkingRecordsID, string bookTime)
  43. {
  44. this.cmd = cmd;
  45. this.context = context;
  46. this.sender = sender;
  47. this.receiver = receiver;
  48. this.garageID = garageID;
  49. this.parkingRecordsID = parkingRecordsID;
  50. this.bookTime = bookTime;
  51. }
  52. public object Clone()
  53. {
  54. if (this == null)
  55. return null;
  56. MessageUTF8 webMsg = new MessageUTF8(this.cmd, this.context, this.sender, this.receiver, this.garageID, this.parkingRecordsID, this.bookTime);
  57. return webMsg;
  58. }
  59. }
  60. //********************************************* plc ************************************************
  61. /// <summary>
  62. /// plc节点类
  63. /// </summary>
  64. public class PLCNode : AbstractMessage
  65. {
  66. public string Address { get; set; }
  67. public string Value { get; set; }
  68. public PLCNode()
  69. {
  70. Address = "";
  71. Value = "";
  72. }
  73. public PLCNode(string addr, string v)
  74. {
  75. Address = addr;
  76. Value = v;
  77. }
  78. public override bool Equals(System.Object obj)
  79. {
  80. if (this == obj)
  81. return true;
  82. if (obj == null || obj.GetType() != this.GetType())
  83. return false;
  84. PLCNode p = obj as PLCNode;
  85. return (Address == p.Address) && (Value == p.Value);
  86. }
  87. public override int GetHashCode()
  88. {
  89. int hash = 7;
  90. return 31 * hash + Address.GetHashCode() + Value.GetHashCode();
  91. }
  92. }
  93. /// <summary>
  94. /// plc消息类
  95. /// </summary>
  96. public class PLCMessage : AbstractMessage, ICloneable
  97. {
  98. public List<PLCNode> extendedPlcList { get; set; }
  99. public List<PLCNode> originalPlcList { get; set; }
  100. public List<LaserMessage> laserMsgList { get; set; }
  101. public PLCMessage()
  102. {
  103. extendedPlcList = new List<PLCNode>();
  104. originalPlcList = new List<PLCNode>();
  105. laserMsgList = new List<LaserMessage>();
  106. }
  107. public object Clone()
  108. {
  109. PLCMessage plcClone = new PLCMessage();
  110. foreach (PLCNode pn in extendedPlcList)
  111. {
  112. plcClone.extendedPlcList.Add(pn);
  113. }
  114. foreach (PLCNode pn in originalPlcList)
  115. {
  116. plcClone.originalPlcList.Add(pn);
  117. }
  118. foreach (LaserMessage lm in laserMsgList)
  119. {
  120. plcClone.laserMsgList.Add(lm);
  121. }
  122. return plcClone;
  123. }
  124. }
  125. //******************************************* NumMachine *********************************************
  126. /// <summary>
  127. /// 号牌机状态枚举
  128. /// </summary>
  129. public enum EnumNumberMachineStatus
  130. {
  131. Offline, Normal
  132. }
  133. /// <summary>
  134. /// 号牌机节点类
  135. /// </summary>
  136. public class NumberMachineNode : ICloneable
  137. {
  138. public string ip { get; set; }
  139. public string LicenseNum { get; set; }
  140. public string TimeRecord { get; set; }
  141. public int id;
  142. public EnumNumberMachineStatus status;
  143. public NumberMachineNode() { }
  144. public NumberMachineNode(string ipAddr, int id, string license, string time, int stat)
  145. {
  146. SetLic(ipAddr, id, license, time, stat);
  147. }
  148. public void SetLic(string ipAddr, int id, string license, string time, int stat)
  149. {
  150. ip = ipAddr;
  151. this.id = id;
  152. LicenseNum = license;
  153. TimeRecord = time;
  154. if (stat == 1)
  155. status = EnumNumberMachineStatus.Normal;
  156. else
  157. status = EnumNumberMachineStatus.Offline;
  158. }
  159. public override bool Equals(object obj)
  160. {
  161. if (obj == null || obj.GetType() != this.GetType())
  162. return false;
  163. if (this == obj)
  164. return true;
  165. NumberMachineNode l = (NumberMachineNode)obj;
  166. return (l.LicenseNum == LicenseNum);
  167. }
  168. public override int GetHashCode()
  169. {
  170. return ip.GetHashCode() + LicenseNum.GetHashCode();
  171. }
  172. public object Clone()
  173. {
  174. if (status == EnumNumberMachineStatus.Normal)
  175. return new NumberMachineNode(ip, id, LicenseNum, TimeRecord, 1);
  176. else
  177. return new NumberMachineNode(ip, id, LicenseNum, TimeRecord, 0);
  178. }
  179. }
  180. /// <summary>
  181. /// 号牌机消息类
  182. /// </summary>
  183. public class NumberMachineMessage : AbstractMessage
  184. {
  185. public List<NumberMachineNode> data { get; set; }
  186. public NumberMachineNode aNode;
  187. public NumberMachineMessage()
  188. {
  189. data = new List<NumberMachineNode>();
  190. aNode = new NumberMachineNode();
  191. }
  192. public override bool Equals(System.Object obj)
  193. {
  194. if (this == obj)
  195. return true;
  196. if (obj == null || obj.GetType() != this.GetType())
  197. return false;
  198. NumberMachineMessage n = obj as NumberMachineMessage;
  199. return (data.Equals(n.data));
  200. }
  201. public override int GetHashCode()
  202. {
  203. int hash = 7;
  204. return 31 * hash + data.GetHashCode();
  205. }
  206. }
  207. //********************************************** laser ************************************************
  208. /// <summary>
  209. /// 激光消息类
  210. /// </summary>
  211. public class LaserMessage : AbstractMessage, ICloneable
  212. {
  213. public int id { get; set; }
  214. public int status { get; set; }
  215. public bool recorded { get; set; }
  216. public bool abort_rescan { get; set; }
  217. public bool occupied { get; set; }
  218. public bool disconnected { get; set; }
  219. public string licenseNum { get; set; }
  220. public Data data;
  221. public LaserMessage()
  222. {
  223. data = new Data();
  224. licenseNum = "";
  225. }
  226. public LaserMessage(int id, int status)
  227. {
  228. this.id = id;
  229. this.status = status;
  230. abort_rescan = false;
  231. disconnected = false;
  232. data = new Data();
  233. }
  234. public object Clone()
  235. {
  236. LaserMessage lm = new LaserMessage();
  237. lm.id = id;
  238. lm.status = status;
  239. lm.data = (Data)data.Clone();
  240. lm.recorded = recorded;
  241. lm.abort_rescan = abort_rescan;
  242. lm.licenseNum = licenseNum;
  243. lm.disconnected = disconnected;
  244. return lm;
  245. }
  246. }
  247. /// <summary>
  248. /// 激光数据类
  249. /// </summary>
  250. public class Data : ICloneable
  251. {
  252. public int centerX { get; set; }
  253. public int centerY { get; set; }
  254. public int angleA { get; set; }
  255. public int length { get; set; }
  256. public int width { get; set; }
  257. public int height { get; set; }
  258. public Data() : this(0, 0, 0, 0, 0, 0) { }
  259. public Data(int cx, int cy, int aa, int l, int w, int h)
  260. {
  261. centerX = cx;
  262. centerY = cy;
  263. angleA = aa;
  264. length = l;
  265. width = w;
  266. height = h;
  267. }
  268. public object Clone()
  269. {
  270. Data d = new Data(centerX, centerY, angleA, length, width, height);
  271. return d;
  272. }
  273. }
  274. //********************************************** command **********************************************
  275. /// <summary>
  276. /// 命令类,由队列线程处理号牌与指令后产生
  277. /// </summary>
  278. public class Command : AbstractMessage, ICloneable
  279. {
  280. public char commandType { get; set; }
  281. public string LicenseNum { get; set; }
  282. public string userID { get; set; }
  283. public int garageID { get; set; }
  284. public int parkingRecordsID { get; set; }
  285. public string TimeRecord { get; set; }
  286. public string ip { get; set; }//新添加,用于定位号牌机
  287. public int returnedCount { get; set; }//标记被返回的命令
  288. public int id { get; set; }
  289. public bool manual { get; set; }//判断是否手动停取
  290. public Command()
  291. {
  292. LicenseNum = "";
  293. TimeRecord = "";
  294. userID = "";
  295. garageID = 0;
  296. parkingRecordsID = 0;
  297. ip = "";
  298. returnedCount = 0;
  299. id = 0;
  300. manual = false;
  301. }
  302. public object Clone()
  303. {
  304. Command cmdClone = new Command();
  305. cmdClone.commandType = commandType;
  306. cmdClone.LicenseNum = LicenseNum;
  307. cmdClone.userID = userID;
  308. cmdClone.garageID = garageID;
  309. cmdClone.parkingRecordsID = parkingRecordsID;
  310. cmdClone.TimeRecord = TimeRecord;
  311. cmdClone.ip = ip;
  312. cmdClone.id = id;
  313. cmdClone.returnedCount = returnedCount;
  314. cmdClone.manual = manual;
  315. return cmdClone;
  316. }
  317. }
  318. /// <summary>
  319. /// 控制信息类,核心在不同阶段发至plc
  320. /// 1: 停车startLaser--park_command_address
  321. /// 2: 停车激光的6个数据,startRobot,车位信息4个
  322. /// 3:停车完成,归零--park_completed_address
  323. /// 4:取车startRobot,车位信息4个
  324. /// 5: 取车完成,归零-fetch_completed_address
  325. /// </summary>
  326. public class ControlMessage : AbstractMessage
  327. {
  328. public int status { get; set; }
  329. public string LicenseNum { get; set; }
  330. public int posID { get; set; }//激光地址
  331. public string parkingSpaceID { get; set; }
  332. public string parkingSpaceX { get; set; }
  333. public string parkingSpaceY { get; set; }
  334. public string parkingSpaceZ { get; set; }
  335. public string centerX { get; set; }
  336. public string centerY { get; set; }
  337. public string angleA { get; set; }
  338. public string length { get; set; }
  339. public string width { get; set; }
  340. public string height { get; set; }
  341. public int fetchPosition { get; set; }//取车放置位置(临时缓冲位)
  342. public int RobotID { get; set; }//机械手编号
  343. public int frontWheelbase { get; set; }
  344. public int rearWheelbase { get; set; }
  345. }
  346. }