public void ReceiveS2F35(PrimaryMessageWrapper e, ref byte[] LRACK) { //Structure: L,2 // 1. < DATAID > // 2.L,a # event // 1.L,2 #event 1 // 1. < CEID1> // 2. L,b // 1. <RPTID1> // . // . // b. <RPTIDb> // a.L,2 #event a // 1. < CEIDa > // 2.L,c // 1.<RPTID1> // . // . // c. <RPTIDc> LRACK[0] = SanwaACK.LRACK_ACK; Item EventListItem = e.Message.SecsItem.Items[1]; //不符合資料格式 start ++ if (EventListItem.Format != SecsFormat.List) { LRACK[0] = SanwaACK.LRACK_INVALID_FORMAT; return; } for (int i = 0; i < EventListItem.Count; i++) { Item CEIDItem = EventListItem.Items[i].Items[0]; Item RPTIDListItem = EventListItem.Items[i].Items[1]; if (!CheckFomart3x5x20(CEIDItem)) { LRACK[0] = SanwaACK.LRACK_INVALID_FORMAT; return; } if (RPTIDListItem.Count > 0) { SetItemToStringType(CEIDItem, out string ceid); bool FindEventObj = false; SanwaEvent eventObj = null; foreach (SanwaEvent EvntObj in _eventList.Values) { if (EvntObj._id == ceid) { eventObj = EvntObj; FindEventObj = true; break; } } if (!FindEventObj) { LRACK[0] = SanwaACK.LRACK_INVALID_FORMAT; return; } //RPID List 清單已經滿了 if (eventObj._rptidList.Count > 0) { LRACK[0] = SanwaACK.LRACK_CEID_DEFINED; return; } for (int j = 0; j < RPTIDListItem.Count; j++) { Item RPTIDItem = RPTIDListItem.Items[j]; if (!CheckFomart3x5x20(RPTIDItem)) { LRACK[0] = SanwaACK.LRACK_INVALID_FORMAT; return; } SetItemToStringType(RPTIDItem, out string rptid); _reportList.TryGetValue(rptid, out SanwaRPTID sanwaRPTID); if (sanwaRPTID == null) { LRACK[0] = SanwaACK.LRACK_RPTID_NOT_EXIST; return; } } } } //不符合資料格式 End ++ if (EventListItem.Count == 0) { foreach (var eventObj in _eventList) { SanwaEvent eventList = eventObj.Value; eventList.ClearRPTIDList(); } } for (int i = 0; i < EventListItem.Count; i++) { Item CEIDItem = EventListItem.Items[i].Items[0]; Item RPTIDListItem = EventListItem.Items[i].Items[1]; SetItemToStringType(CEIDItem, out string ceid); //_eventList.TryGetValue(ceid, out SanwaEvent eventObj); bool FindEventObj = false; SanwaEvent eventObj = null; foreach (SanwaEvent EvntObj in _eventList.Values) { if (EvntObj._id == ceid) { eventObj = EvntObj; FindEventObj = true; break; } } if (FindEventObj) { if (RPTIDListItem.Count == 0) { eventObj.ClearRPTIDList(); } else { for (int j = 0; j < RPTIDListItem.Count; j++) { Item RPTIDItem = RPTIDListItem.Items[j]; SetItemToStringType(RPTIDItem, out string rptid); eventObj.AddRPTID(rptid); } } } } }
public void ReceiveS2F33(PrimaryMessageWrapper e, ref byte[] DRACK) { //Structure: L,2 // 1. < DATAID > // 2.L,a # reports // 1.L,2 report 1 // 1. < RPTID1 > // 2.L,b #VIDs this report // 1. < VID1 > // . // . // b.< VIDb > // a.L,2 report a // 1. < RPTIDa > // 2.L,c #VIDs this report // 1. < VID1 > // . // . // c. < VIDc > DRACK[0] = SanwaACK.DRACK_ACK; Item ReportListItem = e.Message.SecsItem.Items[1]; //不符合資料格式 start ++ if (ReportListItem.Format != SecsFormat.List) { DRACK[0] = SanwaACK.DRACK_INVALID_FORMAT; return; } for (int i = 0; i < ReportListItem.Count; i++) { Item RPTIDItem = ReportListItem.Items[i].Items[0]; Item VIDListItem = ReportListItem.Items[i].Items[1]; if (!CheckFomart3x5x20(RPTIDItem)) { DRACK[0] = SanwaACK.DRACK_INVALID_FORMAT; return; } if (VIDListItem.Count > 0) { SetItemToStringType(RPTIDItem, out string rptid); foreach (var reportObj in _reportList) { SanwaRPTID sanwaRPTID = reportObj.Value; //RPTID 已經被定義 if (sanwaRPTID._id == rptid) { DRACK[0] = SanwaACK.DRACK_RPTID_DEFINED; return; } } for (int j = 0; j < VIDListItem.Count; j++) { Item VIDItem = VIDListItem.Items[j]; if (!CheckFomart3x5x20(VIDItem)) { DRACK[0] = SanwaACK.DRACK_INVALID_FORMAT; return; } SetItemToStringType(VIDItem, out string vid); _svIDList.TryGetValue(vid, out SanwaSV svObj); if (svObj != null) { continue; } _ecIDList.TryGetValue(vid, out SanwaEC ecObj); if (ecObj != null) { continue; } _dvIDList.TryGetValue(vid, out SanwaDV dvObj); if (ecObj != null) { continue; } DRACK[0] = SanwaACK.DRACK_VID_NOT_EXIST; return; } } } //不符合資料格式 End ++ //是否停止移除所有Host定義的PRID if (ReportListItem.Count == 0) { foreach (var reportObj in _reportList) { SanwaRPTID sanwaRPTID = reportObj.Value; sanwaRPTID.Clear(); } foreach (var eventObj in _eventList) { SanwaEvent eventList = eventObj.Value; eventList.ClearRPTIDList(); } _reportList.Clear(); } //寫入_reportList中 for (int i = 0; i < ReportListItem.Count; i++) { Item RPTIDItem = ReportListItem.Items[i].Items[0]; Item VIDListItem = ReportListItem.Items[i].Items[1]; SetItemToStringType(RPTIDItem, out string rptid); if (VIDListItem.Count != 0) { SanwaRPTID rptObj = new SanwaRPTID { _id = rptid, _format = RPTIDItem.Format }; for (int j = 0; j < VIDListItem.Count; j++) { Item VIDItem = VIDListItem.Items[j]; SetItemToStringType(VIDItem, out string vid); SanwaVID vidObj = new SanwaVID(); vidObj._id = vid; vidObj._format = VIDItem.Format; rptObj.Add(vidObj); } _reportList.Add(rptid, rptObj); } else//VIDListItem.Count { bool RemoveRPTID = false; foreach (var reportObj in _reportList) { SanwaRPTID sanwaRPTID = reportObj.Value; if (sanwaRPTID._id == rptid) { sanwaRPTID.Clear(); RemoveRPTID = true; break; } } if (RemoveRPTID) { //移除_reportList中的實體物件 _reportList.Remove(rptid); //移除eventList中的註冊 foreach (var sanwaEventObj in _eventList) { SanwaEvent sanwaEvent = sanwaEventObj.Value; if (sanwaEvent._rptidList.Count > 0) { sanwaEvent._rptidList.RemoveAll(id => id == rptid); } } } } } }