AnalysisUdpUtil.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. package com.wdkl.callingbed.util;
  2. import android.content.Context;
  3. import android.nfc.Tag;
  4. import android.util.Log;
  5. import com.wdkl.callingbed.MyApplication;
  6. import com.wdkl.callingbed.common.Constants;
  7. import com.wdkl.callingbed.entity.BroadCastEntity;
  8. import com.wdkl.callingbed.entity.MessageEvent;
  9. import com.wdkl.callingbed.entity.SystemSetEntity;
  10. import com.wdkl.callingbed.entity.UdpEntity;
  11. import org.greenrobot.eventbus.EventBus;
  12. import serialporttest.utils.SerialPortUtil;
  13. import static com.wdkl.callingbed.MyApplication.serialPortUtil;
  14. /**
  15. * Created by 胡博文 on 2017/10/18.
  16. */
  17. public class AnalysisUdpUtil {
  18. private AnalysisUdpUtil() {
  19. }
  20. public static void AnalysisUdp(String udpMsg, Context context) {
  21. LogUtil.d("AnalysisUdp", "udpMsg==" + udpMsg);
  22. try {
  23. //判断是否为美元符号开头,如果是则是android 端的命令
  24. if ("$".equals(udpMsg.substring(0, 1))) {
  25. udpMsg = delHeadAndEnd(udpMsg, "$", "#");
  26. String[] data = udpMsg.split(Constants.DELIMITER);
  27. if(StringUtils.notEmpty(Constants.PartID)){
  28. try {
  29. LogUtil.d("AAGGH", "PartID==" + Constants.PartID+"-----UDPPartID=="+data[data.length - 1]);
  30. if (!StringUtils.notEmpty(data[data.length - 1]) || !Constants.PartID.equals(data[data.length - 1])) {// 协议规定所有UDP最后一条为 PartID (科室ID)。只有属于自己科室的才能作用
  31. return;
  32. }
  33. } catch (Exception e) {
  34. return;
  35. }}
  36. switch (data[0]) {
  37. //更新广播文件
  38. case "broadcast_update":
  39. BroadCastEntity broadCastEntity0 = new BroadCastEntity();
  40. broadCastEntity0.setIndexes(data[0]);
  41. EventBus.getDefault().post(new MessageEvent(broadCastEntity0, Constants.EVENT_BROADCAST)); //将udp发送出去
  42. break;
  43. //播放广播
  44. case "broadcast_1":
  45. if (!Constants.INTIME_BROADCAST.equals(data[1])) {
  46. Constants.INTIME_BROADCAST = data[1];
  47. BroadCastEntity broadCastEntity = new BroadCastEntity();
  48. broadCastEntity.setIndexes(data[0]);
  49. broadCastEntity.setPath(data[1]);
  50. broadCastEntity.setVoiceInt(data[2]);
  51. broadCastEntity.setZoneId(data[3]);
  52. EventBus.getDefault().post(new MessageEvent(broadCastEntity, Constants.EVENT_BROADCAST)); //将udp发送出去
  53. }
  54. break;
  55. //停止播放广播
  56. case "broadcast_2":
  57. Constants.INTIME_BROADCAST = "";
  58. BroadCastEntity broadCastEntity1 = new BroadCastEntity();
  59. broadCastEntity1.setIndexes(data[0]);
  60. broadCastEntity1.setPath(data[1]);
  61. EventBus.getDefault().post(new MessageEvent(broadCastEntity1, Constants.EVENT_BROADCAST));
  62. break;
  63. //全局广播音量大小
  64. case "broadcast_v":
  65. BroadCastEntity broadCastEntity2 = new BroadCastEntity();
  66. broadCastEntity2.setIndexes(data[0]);
  67. broadCastEntity2.setPath(data[1]);
  68. broadCastEntity2.setVoiceInt(data[2]);
  69. EventBus.getDefault().post(new MessageEvent(broadCastEntity2, Constants.EVENT_BROADCAST));
  70. break;
  71. case "call_1"://床头机呼叫护士主机");
  72. case "call_2"://卫生间呼叫");
  73. //case "call_3"://床头机呼叫床头机");
  74. case "call_4": //床头机呼叫增援");
  75. //case "call_5": //床头机呼叫手表");
  76. if (!Constants.MYSELF_ID.equals(data[3])) {//排除自己
  77. UdpEntity udpEntity = new UdpEntity();
  78. udpEntity.setIndexes(data[0]);
  79. udpEntity.setNurseHostID(data[1]);
  80. udpEntity.setDoorwayMachineID(data[2]);
  81. udpEntity.setHeadMachineID(data[3]);
  82. udpEntity.setSipAddress(data[4]);
  83. udpEntity.setRoomNumber(data[5]);
  84. udpEntity.setBedNumber(data[6]);
  85. udpEntity.setLevel(data[7]);
  86. udpEntity.setType(data[8]);
  87. udpEntity.setName(data[9]);
  88. udpEntity.setDeviceMAC(data[10]);
  89. udpEntity.setShowText("床头机呼叫护士主机");
  90. //推向event
  91. EventBus.getDefault().post(new MessageEvent(udpEntity, Constants.EVENT_UDP));
  92. }
  93. break;
  94. case "call_6"://门口机呼叫护士主机"
  95. UdpEntity udpEntity6 = new UdpEntity();
  96. udpEntity6.setIndexes(data[0]);
  97. udpEntity6.setNurseHostID(data[1]);
  98. udpEntity6.setDoorwayMachineID(data[2]);
  99. udpEntity6.setHeadMachineID(data[3]);
  100. udpEntity6.setSipAddress(data[4]);
  101. udpEntity6.setRoomNumber(data[5]);
  102. udpEntity6.setBedNumber(data[6]);
  103. udpEntity6.setLevel(data[7]);
  104. udpEntity6.setType(data[8]);
  105. udpEntity6.setName(data[9]);
  106. udpEntity6.setShowText("门口机呼叫护士主机");
  107. EventBus.getDefault().post(new MessageEvent(udpEntity6, Constants.EVENT_UDP));
  108. break;
  109. case "call_7":
  110. //门口机呼叫医生主机");
  111. break;
  112. case "call_8": //护士主机呼叫分机
  113. UdpEntity entity = new UdpEntity();
  114. entity.setIndexes(data[0]);
  115. entity.setNurseHostID(data[1]);
  116. entity.setDoorwayMachineID(data[2]);
  117. entity.setHeadMachineID(data[3]);
  118. entity.setSipAddress(data[4]);
  119. entity.setRoomNumber(data[5]);
  120. entity.setBedNumber(data[6]);
  121. entity.setLevel(data[7]);
  122. entity.setType(data[8]);
  123. entity.setName(data[9]);
  124. EventBus.getDefault().post(new MessageEvent(entity, Constants.EVENT_UDP));
  125. break;
  126. case "call_9":
  127. //护士主机呼叫护士主机");
  128. break;
  129. case "call_10":
  130. //护士主机呼叫医生主机");
  131. break;
  132. case "call_11":
  133. //手表呼叫护士主机");
  134. break;
  135. case "end_1":
  136. //挂断");
  137. break;
  138. case "deposit_1":
  139. //主机托管给主机");
  140. break;
  141. case "deposit_2":
  142. //取消托管");
  143. break;
  144. case "nursing_1"://进入护理
  145. UdpEntity nursing_1 = new UdpEntity();
  146. nursing_1.setIndexes(data[0]);
  147. nursing_1.setNurseHostID(data[1]);
  148. nursing_1.setDoorwayMachineID(data[2]);
  149. nursing_1.setHeadMachineID(data[3]);
  150. nursing_1.setSipAddress(data[4]);
  151. nursing_1.setRoomNumber(data[5]);
  152. nursing_1.setBedNumber(data[6]);
  153. nursing_1.setLevel(data[7]);
  154. nursing_1.setType(data[8]);
  155. nursing_1.setName(data[9]);
  156. LogUtil.d(AnalysisUdpUtil.class, "nursing_1==" + nursing_1.toString());
  157. EventBus.getDefault().post(new MessageEvent(nursing_1, Constants.EVENT_UDP));
  158. break;
  159. case "nursing_2"://退出护理
  160. UdpEntity nursing_2 = new UdpEntity();
  161. nursing_2.setIndexes(data[0]);
  162. nursing_2.setNurseHostID(data[1]);
  163. nursing_2.setDoorwayMachineID(data[2]);
  164. nursing_2.setHeadMachineID(data[3]);
  165. nursing_2.setSipAddress(data[4]);
  166. nursing_2.setRoomNumber(data[5]);
  167. nursing_2.setBedNumber(data[6]);
  168. nursing_2.setLevel(data[7]);
  169. nursing_2.setType(data[8]);
  170. nursing_2.setName(data[9]);
  171. LogUtil.d(AnalysisUdpUtil.class, "nursing_2==" + nursing_2.toString());
  172. EventBus.getDefault().post(new MessageEvent(nursing_2, Constants.EVENT_UDP));
  173. break;
  174. case "call_8_upremove": //主机上滑移除了呼叫列表中的一个条目
  175. UdpEntity call_8_upremove = new UdpEntity();
  176. call_8_upremove.setIndexes(data[0]);
  177. call_8_upremove.setNurseHostID(data[1]);
  178. call_8_upremove.setDoorwayMachineID(data[2]);
  179. call_8_upremove.setHeadMachineID(data[3]);
  180. call_8_upremove.setSipAddress(data[4]);
  181. call_8_upremove.setRoomNumber(data[5]);
  182. call_8_upremove.setBedNumber(data[6]);
  183. call_8_upremove.setLevel(data[7]);
  184. call_8_upremove.setType(data[8]);
  185. call_8_upremove.setName(data[9]);
  186. EventBus.getDefault().post(new MessageEvent(call_8_upremove, Constants.EVENT_UDP));
  187. break;
  188. case "call_8_transfer": //转接护士主机电话
  189. UdpEntity call_8_transfer = new UdpEntity();
  190. call_8_transfer.setIndexes(data[0]);
  191. call_8_transfer.setNurseHostID(data[1]);
  192. call_8_transfer.setDoorwayMachineID(data[2]);
  193. call_8_transfer.setHeadMachineID(data[3]);
  194. call_8_transfer.setSipAddress(data[4]);
  195. call_8_transfer.setRoomNumber(data[5]);
  196. call_8_transfer.setBedNumber(data[6]);
  197. call_8_transfer.setLevel(data[7]);
  198. call_8_transfer.setType(data[8]);
  199. call_8_transfer.setName(data[9]);
  200. EventBus.getDefault().post(new MessageEvent(call_8_transfer, Constants.EVENT_UDP));
  201. break;
  202. case "noany_request":
  203. //护士主机通知外部当前房间无任何请求;
  204. UdpEntity noany_request = new UdpEntity();
  205. noany_request.setIndexes(data[0]);
  206. noany_request.setRoomNumber(data[5]);
  207. EventBus.getDefault().post(new MessageEvent(noany_request, Constants.EVENT_UDP));
  208. break;
  209. case "call_host_exception": //主机发生异常
  210. UdpEntity call_host_exception = new UdpEntity();
  211. call_host_exception.setIndexes(data[0]);
  212. call_host_exception.setNurseHostID(data[1]);
  213. call_host_exception.setDoorwayMachineID(data[2]);
  214. call_host_exception.setHeadMachineID(data[3]);
  215. call_host_exception.setSipAddress(data[4]);
  216. call_host_exception.setRoomNumber(data[5]);
  217. call_host_exception.setBedNumber(data[6]);
  218. call_host_exception.setLevel(data[7]);
  219. call_host_exception.setType(data[8]);
  220. call_host_exception.setName(data[9]);
  221. EventBus.getDefault().post(new MessageEvent(call_host_exception, Constants.EVENT_UDP));
  222. break;
  223. case "back_1":
  224. //呼叫回复");
  225. break;
  226. case "sickbed_inuse"://床头分机数据更新
  227. UdpEntity updating_hospital_bed = new UdpEntity();
  228. updating_hospital_bed.setIndexes(data[0]);
  229. updating_hospital_bed.setDeviceMAC("");
  230. updating_hospital_bed.setType("");
  231. updating_hospital_bed.setRoomNumber("");
  232. EventBus.getDefault().post(new MessageEvent(updating_hospital_bed, Constants.EVENT_UDP));
  233. break;
  234. case "sickbed_unuse"://床头分机无病床数据更新
  235. UdpEntity null_hospital_bed = new UdpEntity();
  236. null_hospital_bed.setIndexes(data[0]);
  237. null_hospital_bed.setDeviceMAC("");
  238. null_hospital_bed.setType("");
  239. null_hospital_bed.setRoomNumber("");
  240. EventBus.getDefault().post(new MessageEvent(null_hospital_bed, Constants.EVENT_UDP));
  241. break;
  242. }
  243. } else if ("#".equals(udpMsg.substring(0, 1))) {
  244. LogUtil.d("isBelongToHostMachine", "udpMsg==" + udpMsg);
  245. //判断是否为服务端发过来的命令
  246. udpMsg = delHeadAndEnd(udpMsg, "#", "$");
  247. String[] data = udpMsg.split(Constants.DELIMITER);
  248. if(StringUtils.notEmpty(Constants.PartID)){
  249. try {
  250. LogUtil.d("AAGGH", "PartID==" + Constants.PartID+"-----UDPPartID=="+data[data.length - 1]);
  251. if (!StringUtils.notEmpty(data[data.length - 1]) || !Constants.PartID.equals(data[data.length - 1])) {// 协议规定所有UDP最后一条为 PartID (科室ID)。只有属于自己科室的才能作用
  252. return;
  253. }
  254. } catch (Exception e) {
  255. return;
  256. }}
  257. switch (data[0]) {
  258. case "HEART"://服务端定时发送心跳监听;APP回复
  259. if (data[1].equals(Constants.MAC_ADDRESS)) {
  260. sendString("HEART," + Constants.MAC_ADDRESS);
  261. }
  262. break;
  263. case "MGR_SHUTDOWN": //关机 //批量关机
  264. if (data[1].equals(Constants.MAC_ADDRESS) || (data[1].equals("FF:FF:FF:FF:FF:FF"))) {
  265. //AutoRebootUtil.shutdown(context);//调用关机命令
  266. }
  267. break;
  268. case "MGR_RESET"://重启APP //批量重启()
  269. boolean isRESET = false;
  270. if (!isRESET) {
  271. LogUtil.d("isBelongToHostMachine", "data[1]==" + data[1]);
  272. if (data[1].equals(Constants.MAC_ADDRESS) || (data[1].equals("FF:FF:FF:FF:FF:FF") && isBelongToHostMachine(data[2]))) {
  273. EventBus.getDefault().post(new MessageEvent("reset", Constants.EVENT_MGR_RESET));
  274. }
  275. }
  276. break;
  277. case "MGR_SYSTEM_RESET":
  278. if (data[1].equals(Constants.MAC_ADDRESS)) {
  279. //MyApplication.serialPortUtil.systemRestart();//调用吴总串口
  280. AutoRebootUtil.reboot(context);//调用系统自己API
  281. }
  282. break;
  283. case "MGR_REG_Q": //给出设备信息
  284. try {
  285. if (data[1].equals(Constants.MAC_ADDRESS)) {
  286. //有线mac地址,设备出场信息,无线mac地址
  287. String str = "$MGR_REG_A" + Constants.DELIMITER + Constants.MAC_ADDRESS + Constants.DELIMITER + "4" + Constants.DELIMITER + android.os.Build.DISPLAY +
  288. Constants.DELIMITER + Constants.MAC_ADDRESS + Constants.DELIMITER + "FF:FF:FF:FF:FF:FF" + Constants.DELIMITER + SerialPortUtil.KEY_ID + "#";
  289. UdpHelper.send(str);
  290. }
  291. } catch (ArrayIndexOutOfBoundsException e) {
  292. e.printStackTrace();
  293. }
  294. break;
  295. case "MGR_MACHINE_SETSYS": //系统设置
  296. if (!Constants.MORNING_NIGTH.equals(data[1])
  297. || !Constants.SCREENLIGHT.equals(data[2])
  298. || !Constants.SYSVOICE.equals(data[3])
  299. || !Constants.RINGLVOICE.equals(data[4])
  300. || !Constants.RINGLVOICELOOP.equals(data[5])
  301. || !Constants.NURSINGLIGHT.equals(data[6])
  302. || !Constants.CALLINGTIMEOUT.equals(data[7])
  303. || !Constants.SCREENEXTINGUISHTIME.equals(data[8])
  304. || !Constants.DOORCALLVOICE.equals(data[9])
  305. || !Constants.BEDCALLVOICE.equals(data[10])
  306. ) {
  307. Constants.MORNING_NIGTH = data[1];
  308. Constants.SCREENLIGHT = data[2];
  309. Constants.SYSVOICE = data[3];
  310. Constants.RINGLVOICE = data[4];
  311. Constants.RINGLVOICELOOP = data[5];
  312. Constants.NURSINGLIGHT = data[6];
  313. Constants.CALLINGTIMEOUT = data[7];
  314. Constants.SCREENEXTINGUISHTIME = data[8];
  315. Constants.DOORCALLVOICE = data[9];
  316. Constants.BEDCALLVOICE = data[10];
  317. SystemSetEntity machine_setsys = new SystemSetEntity(data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8]);
  318. LogUtil.d(AnalysisUdpUtil.class, "MGR_MACHINE_SETSYS==" + machine_setsys.toString());
  319. EventBus.getDefault().post(new MessageEvent(machine_setsys, Constants.EVENT_SETSYS));
  320. } else {
  321. return;
  322. }
  323. break;
  324. case "MGR_PATIENTUPDATE": //后台数据改变刷新UI
  325. LogUtil.d("MGR_PATIENTUPDATE", "bed--11");
  326. <<<<<<< HEAD
  327. LogUtil.d("MGR_PATIENTUPDATE","data[2] "+data[2]+" ddd "+Constants.MYSELF_ID);
  328. if (data[2].equals(Constants.MYSELF_ID)) { //ID匹配;刷新本机
  329. LogUtil.d("MGR_PATIENTUPDATE","Constants.UPDATE_PATIENTUPDATE_FLAG "+Constants.UPDATE_PATIENTUPDATE_FLAG);
  330. if (!Constants.UPDATE_PATIENTUPDATE_FLAG) {
  331. LogUtil.d("MGR_PATIENTUPDATE", "bed--22");
  332. =======
  333. if (data[2].equals(Constants.MYSELF_ID) || data[2].equals(Constants.MAC_ADDRESS)) {
  334. if (!Constants.UPDATE_PATIENTUPDATE_FLAG) {
  335. Constants.UPDATE_PATIENTUPDATE_FLAG = true;
  336. LogUtil.d("MGR_PATIENTUPDATE", "MGR_PATIENTUPDATE");
  337. >>>>>>> c7fa4d87eae36f5045acc0af939c0acfbc019628
  338. EventBus.getDefault().post(new MessageEvent(null, Constants.EVENT_MGR_PATIENTUPDATE));
  339. }
  340. }
  341. break;
  342. case "MGR_APPUPDATE": //APP更新
  343. if (data[1].equals("4")) {
  344. if (!Constants.UPDATE_APP_FLAG) {
  345. Constants.UPDATE_APP_FLAG = true;
  346. EventBus.getDefault().post(new MessageEvent(null, Constants.EVENT_MGR_APP_UPDATE));
  347. }
  348. }
  349. break;
  350. }
  351. }
  352. } catch (Exception e) {
  353. e.printStackTrace();
  354. }
  355. }
  356. /**
  357. * 是否是属于所指定的主机<br></>
  358. */
  359. public static boolean isBelongToHostMachine(String nurseHostID) {
  360. if (!StringUtils.notEmpty(nurseHostID)) return false;
  361. String n = StringUtils.substringByLengh(Constants.CALLMAIN_ID, 0, 1);
  362. if ("#".equals(n)) {
  363. String nDis = StringUtils.deleteCharAt(Constants.CALLMAIN_ID, 0);
  364. String my = nDis.split(",")[0];
  365. String his = nDis.split(",")[1];
  366. return nurseHostID.equals(my) || nurseHostID.equals(his);
  367. } else {
  368. return StringUtils.notEmpty(nurseHostID) && nurseHostID.equals(Constants.CALLMAIN_ID);
  369. }
  370. }
  371. public static void sendAndroidUdpData(String Indexes, String nurseHostID, String doorwayMachineID, String headMachineID, String sipAddress, String roomNumber, String bedNumber, String level, String type, String name, String deviceMAC) {
  372. final String strUdp = Indexes + Constants.DELIMITER + nurseHostID +
  373. Constants.DELIMITER + doorwayMachineID + Constants.DELIMITER
  374. + headMachineID + Constants.DELIMITER + sipAddress + Constants.DELIMITER
  375. + roomNumber + Constants.DELIMITER + bedNumber + Constants.DELIMITER + level + Constants.DELIMITER + type + Constants.DELIMITER + name + Constants.DELIMITER + deviceMAC
  376. + Constants.DELIMITER + Constants.PartID;//add by waderson 20190627 加了一个partId (科室ID)
  377. new Thread() {
  378. @Override
  379. public void run() {
  380. //把网络访问的代码放在这里
  381. UdpHelper.send("$" + strUdp + "#");
  382. }
  383. }.start();
  384. }
  385. /**
  386. * 直接UDP 发送一条字符串
  387. */
  388. public static void sendString(final String str) {
  389. new Thread() {
  390. @Override
  391. public void run() {
  392. //把网络访问的代码放在这里
  393. UdpHelper.send("$" + str + "#");
  394. }
  395. }.start();
  396. }
  397. public static String delHeadAndEnd(String source, String beginTrim, String endTrim) {
  398. if (source == null) {
  399. return "";
  400. }
  401. source = source.trim(); // 循环去掉字符串首的beTrim字符
  402. if (source.isEmpty()) {
  403. return "";
  404. }
  405. String beginChar = source.substring(0, 1);
  406. if (beginChar.equalsIgnoreCase(beginTrim)) {
  407. source = source.substring(1, source.length());
  408. beginChar = source.substring(0, 1);
  409. }
  410. // 循环去掉字符串尾的beTrim字符
  411. String endChar = source.substring(source.length() - 1, source.length());
  412. if (endChar.equalsIgnoreCase(endTrim)) {
  413. source = source.substring(0, source.length() - 1);
  414. endChar = source.substring(source.length() - 1, source.length());
  415. }
  416. return source;
  417. }
  418. }