public MessageStatus UpdateMessageStatus(string codingID, string station, string status) { int lastackno = 0; string acktotal = ""; //Update Message Status foreach (MessageStatus messagestatus in _MessageStatusList) { if (messagestatus.CodingID.Equals(codingID)) { //find latest ack no lastackno = Math.Max(lastackno, Int32.Parse(messagestatus.AckNo)); //get ackTotal acktotal = messagestatus.AckTotal; } } //Create new entry base on the coding ack message MessageStatus newMsgStatus = new MessageStatus(); newMsgStatus.CodingID = codingID; DateTime currentdt = DateTime.Now; newMsgStatus.AckTimeStamp = String.Format("{0:g}", currentdt); newMsgStatus.AckFrom = station; newMsgStatus.AckStatus = status; newMsgStatus.AckNo = (lastackno + 1).ToString(); newMsgStatus.AckTotal = acktotal; _MessageStatusList.Add(newMsgStatus); //Update on gateway tracker foreach (GatewayTracker gatewaytrack in _GatewayTrackerList) { //if match codingID and station name, update the station status if (gatewaytrack.CodingID.Equals(codingID) && gatewaytrack.StationStatus.ContainsKey(station)) { gatewaytrack.StationStatus[station] = status; } } return newMsgStatus; }
//Retrieve Incident Coding Status base on Query public void IncidentCodingStatus(string querycodingID) { SendOrPostCallback callback = delegate (object state) { //Gather incident coding status base on coding ID int acktotal = 0; int pendingno = 0; DateTime currentdt = DateTime.Now; bool validCodingID = false; //Update coding status (received time) foreach (CodingStatus codingstatus in _CodingStatusList) { if (codingstatus.CodingID.Equals(querycodingID)) { //There is such codingID exist validCodingID = true; //Update the updated timestamp from Console codingstatus.Updated = String.Format("{0:g}", currentdt); acktotal = Int32.Parse(codingstatus.Pending) + Int32.Parse(codingstatus.Acknowledged) + Int32.Parse(codingstatus.Rejected) + Int32.Parse(codingstatus.Failed); pendingno = Int32.Parse(codingstatus.Pending); } } if (validCodingID) { //Update message status (-1 in ack No) //Create new entry base on the coding ack message MessageStatus newMsgStatus = new MessageStatus(); newMsgStatus.CodingID = querycodingID; newMsgStatus.AckTimeStamp = String.Format("{0:g}", currentdt); newMsgStatus.AckFrom = "Gateway"; if (pendingno == 0) { newMsgStatus.AckStatus = "Completed"; } else { newMsgStatus.AckStatus = "Pending"; } newMsgStatus.AckNo = "-1"; newMsgStatus.AckTotal = acktotal.ToString(); _MessageStatusList.Add(newMsgStatus); //Response back to CAD List<Tracking> trackingList = new List<Tracking>(); foreach (GatewayTracker gatewaytrack in _GatewayTrackerList) { if (gatewaytrack.CodingID.Equals(querycodingID)) { //Only take out the stations on the Current Station foreach (KeyValuePair<string, string> station in gatewaytrack.StationStatus) { Tracking newstation = new Tracking(); newstation.Station = station.Key; newstation.Status = station.Value; List<string> unitcallsign = new List<string>(); //To give relevant station units callsign foreach (CodingUnits unit in gatewaytrack.DispatchUnits) { if (unit.UnitCurrentStation.Equals(station.Key)) { unitcallsign.Add(unit.Callsign); } //For Test message if (unit.UnitCurrentStation.Equals("Test")) { unitcallsign.Add(unit.Callsign); } } newstation.Unit = unitcallsign.ToArray(); trackingList.Add(newstation); //Add into tracking list } } } CADIncidentAck codingQueryRsponse = new CADIncidentAck(); codingQueryRsponse.CodingID = newMsgStatus.CodingID; codingQueryRsponse.AckTracking = trackingList.ToArray(); codingQueryRsponse.AckTimeStamp = currentdt; codingQueryRsponse.AckNo = Int32.Parse(newMsgStatus.AckNo); codingQueryRsponse.AckTotal = Int32.Parse(newMsgStatus.AckTotal); Log("Respond to requested ad hoc request from simulate CAD"); _CallOut_CADService.IncidentCodingStatusResponse(codingQueryRsponse); } }; _uiSyncContext.Post(callback, "Request incident coding status"); }
private void CreateMessageEntry(CodingIncidentMessage codingIncidentMsg, string acktotal) { MessageStatus messagestatus = new MessageStatus(); messagestatus.CodingID = codingIncidentMsg.CodingID; DateTime currentdt = DateTime.Now; messagestatus.AckTimeStamp = String.Format("{0:g}", currentdt); messagestatus.AckFrom = "Gateway"; messagestatus.AckStatus = "Pending"; messagestatus.AckNo = "0"; messagestatus.AckTotal = acktotal; _MessageStatusList.Add(messagestatus); }
public void SendBroadcastIncidentCoding(string console, string status, string[] unitcallsign, MessageStatus messagestatus) { //Get Station tracking Tracking stationTrack = new Tracking(); stationTrack.Station = console; stationTrack.Status = status; stationTrack.Unit = unitcallsign; //Broadcast Coding status back to CAD (failed) CADIncidentCodingStatus incidentcodingstatus = new CADIncidentCodingStatus(); incidentcodingstatus.CodingID = messagestatus.CodingID; incidentcodingstatus.AckTracking = stationTrack; incidentcodingstatus.AckFrom = messagestatus.AckFrom; incidentcodingstatus.AckStatus = messagestatus.AckStatus; DateTime currentdt = DateTime.Now; incidentcodingstatus.AckTimeStamp = currentdt; incidentcodingstatus.AckNo = Int32.Parse(messagestatus.AckNo); incidentcodingstatus.AckTotal = Int32.Parse(messagestatus.AckTotal); //incidentcodingstatus.AckTotal = string.IsNullOrEmpty(messagestatus.AckTotal) ? 0 : Int32.Parse(messagestatus.AckTotal); Log("Broadcast status back to CAD"); _CallOut_CADService.BroadcastIncidentCodingStatus(incidentcodingstatus); }