예제 #1
0
 /// <summary>
 /// Shut Link to LiveTraffic down
 /// </summary>
 public void RemoveLink()
 {
     Logger.Instance.Log($"TrafficHandler-RemoveLink");
     Valid = false;
     Error = "";
     try {
         LTLink.LTEvent -= LTLink_LTEvent;
         LT_Traffic      = null;
         LT_Weather      = null;
         LTLink.Disconnect( );
         m_userAcft = null;
         POOL       = null;
     }
     catch (Exception e) {
         Error = $"Error: {e.Message}";
         Logger.Instance.Log($"TrafficHandler: {Error}");
     }
 }
예제 #2
0
        // Asynch processing from receiving actual user position (Triggered by TCPclient)
        private void LTLink_LTEvent(object sender, LTEventArgs e)
        {
            long secSinceLastPing = (long)(DateTime.Now - m_lastUpdate).TotalSeconds;

            OnTraffic(secSinceLastPing);

            if (!Valid)
            {
                return;     // catch out of bounds messages
            }
            m_userAcft.NewPos(e.LatLon);
            if (POOL == null)
            {
                // create the first subset with our AcftPos
                POOL = new VAcftPool(m_radius_nm, m_stepLen_sec)
                {
                    NumAcft     = m_numAcft,
                    NumVFRcraft = m_numVFR
                };
                POOL.CreateAwySelection(AWYDB.GetTable( ), RWYDB.GetTable( ), m_userAcft.LatLon);
                POOL.UpdateVFRscripts(CMDS);
                Logger.Instance.Log($"TrafficHandler: Create POOL with {m_numAcft} aircrafts where {m_numVFR} are VFR, one sim step is >= {m_stepLen_sec} seconds");
            }
            // push an update only after 'StepLen_sec' secs
            if (secSinceLastPing >= POOL.StepLen_sec)
            {
                m_lastUpdate = DateTime.Now;                      // reset timer

                LT_Weather.SendMsg(RealTraffic.WeatherString( )); // send a 'generic' weather string
                // do POOL maintenance
                POOL.ReGenerate( );
                POOL.Update( );
                // send updates to LiveTraffic - TODO need to pace it ??
                foreach (var vac in POOL.AircraftPoolRef)
                {
                    string msg = RealTraffic.AITrafficString(vac);
                    LT_Traffic.SendMsg(msg);
                }
                // recreates the airway selection if needed
                POOL.UpdateAwySelection(AWYDB.GetTable( ), RWYDB.GetTable( ), m_userAcft.LatLon);
            }
        }