AbstractMessage.cs 11 KB

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