示例#1
0
 public static bool IsAvailable()
 {
     if (_method != null && _isCovered != null)
     {
         return(true);
     }
     if (_ran)
     {
         return(false);
     }
     _ran = true;
     try
     {
         System.Type type = AssemblyLoader.loadedAssemblies.SelectMany((AssemblyLoader.LoadedAssembly loaded) => loaded.assembly.GetExportedTypes()).SingleOrDefault((System.Type t) => t.FullName == "SCANsat.SCANUtil");
         bool        result;
         if (type == null)
         {
             result = false;
             return(result);
         }
         _method = type.GetMethod("isCovered", new System.Type[]
         {
             typeof(double),
             typeof(double),
             typeof(CelestialBody),
             typeof(int)
         });
         if (_method == null)
         {
             result = false;
             return(result);
         }
         _isCovered = (IsCoveredDelegate)System.Delegate.CreateDelegate(typeof(IsCoveredDelegate), _method);
         Log.Debug(_isCovered == null
                         ? "[ScienceAlert]:SCANsatInterface: Failed to create method delegate"
                         : "[ScienceAlert]:SCANsatInterface: Interface available");
         result = _isCovered != null;
         return(result);
     }
     catch (System.Exception ex)
     {
         Log.Debug("[ScienceAlert]:Exception in SCANsatInterface.IsAvailable: {0}", ex);
     }
     return(false);
 }
示例#2
0
        private void InitializeScansatIntegration()
        {
            var scanutil = AssemblyLoader.loadedAssemblies.SelectMany(x => x.assembly.GetExportedTypes())
                           .FirstOrDefault(x => x.FullName == "SCANsat.SCANUtil");
            var scandata =
                AssemblyLoader.loadedAssemblies.SelectMany(x => x.assembly.GetExportedTypes())
                .FirstOrDefault(x => x.FullName == "SCANsat.SCANdata");

            if (scanutil != null && scandata != null)
            {
                var method = scanutil.GetMethod("isCovered",
                                                new[] { typeof(double), typeof(double), typeof(CelestialBody), typeof(int) });
                if (method != null)
                {
                    _scansatIsCoveredDelegate = (IsCoveredDelegate)Delegate.CreateDelegate(typeof(IsCoveredDelegate), method);
                }
                _scansatEnum = scandata.GetNestedType("SCANtype");
            }
        }
        /// <summary>
        /// Checks to ensure the SCANsat interface is available
        /// </summary>
        /// <returns></returns>
        public static bool IsAvailable()
        {
            if (_method != null && _isCovered != null)
            {
                return(true);
            }
            if (_ran)
            {
                //Log.Debug("SCANsatInterface.IsAvailable already ran; not available.");
                return(false);
            }

            Log.Verbose("Performing SCANsat check...");
            _ran = true;

            try
            {
                Type utilType = AssemblyLoader.loadedAssemblies
                                .SelectMany(loaded => loaded.assembly.GetExportedTypes())
                                .SingleOrDefault(t => t.FullName == SCANutilTypeName);
#if DEBUG
                AssemblyLoader.loadedAssemblies.ToList().ForEach(a =>
                {
                    if (a.name == "SCANsat")
                    {
                        Log.Debug("Assembly {0}:", a.assembly.FullName);

                        a.assembly.GetExportedTypes().ToList().ForEach(t =>
                        {
                            Log.Debug("   exports: {0}", t.FullName);
                        });
                    }
                    else
                    {
                        Log.Debug("Assembly [brief]: {0}", a.name);
                    }
                });
#endif

                if (utilType == null)
                {
                    Log.Warning("SCANsatInterface.IsAvailable: Failed to find SCANsat.SCANutil type. SCANsat interface will not be available.");
                    return(false);
                }

                _method = utilType.GetMethod("isCovered", new Type[] { typeof(double), typeof(double), typeof(CelestialBody), typeof(int) });

                if (_method == null)
                {
                    Log.Error("SCANsatInterface: Failed to locate SCANutil.isCovered!");
                    return(false);
                }
                else
                {
                    _isCovered = (IsCoveredDelegate)Delegate.CreateDelegate(typeof(IsCoveredDelegate), _method);

                    if (_isCovered == null)
                    {
                        Log.Error("SCANsatInterface: Failed to create method delegate");
                    }
                    else
                    {
                        Log.Normal("SCANsatInterface: Interface available");
                    }

                    return(_isCovered != null);
                }
            } catch (Exception e)
            {
                Log.Error("Exception in SCANsatInterface.IsAvailable: {0}", e);
            }

            return(false);
        }