// Handle a TMA message public void HandleTMAMessage(TMAOriginalMessage message) { SystemTracks sysTracks = new SystemTracks(); sysTracks.timeStamp = convertTime(message.timeStamp); sysTracks.systemTracks = new List <TrackData>(); foreach (OriginalSystemTrack OrigTrack in message.systemTracks) { // if track exists if (OrigTrack.trackId != 0) { TrackData newTrackData = new TrackData(); newTrackData.trackID = OrigTrack.trackId; newTrackData.relativeBearing = OrigTrack.bearing; if (OrigTrack.bearingRate.valid) { newTrackData.relativeBearingRate = OrigTrack.bearingRate.value; } // if new track if (!isKnownTarget[OrigTrack.trackId - 1]) { isKnownTarget[OrigTrack.trackId - 1] = true; creationTime[OrigTrack.trackId - 1] = OrigTrack.timeStamp; newTrackData.trackState = State.NewTrack; newTrackData.creationTime = convertTime(OrigTrack.timeStamp); } // if old track else { newTrackData.trackState = State.UpdateTrack; newTrackData.creationTime = convertTime(creationTime[OrigTrack.trackId - 1]); } sysTracks.systemTracks.Add(newTrackData); } } if (lastTracksMessage != null) { foreach (var currTrack in lastTracksMessage.systemTracks) { if (currTrack.trackId != 0) { // check if track was deleted if (!sysTracks.systemTracks.Exists(x => x.trackID == currTrack.trackId)) { isKnownTarget[currTrack.trackId - 1] = false; TrackData newTrack = new TrackData() { trackID = currTrack.trackId, trackState = State.DeleteTrack }; sysTracks.systemTracks.Add(newTrack); } } } } lastTracksMessage = message; // send to stiching sender.SendTrackData(sysTracks); // save to db db.saveRecord(sysTracks, "SystemTrack"); }