Exemple #1
0
        public static Computer LoadComputer(string filename, bool preventAddingToNetmap = false, bool preventInitDaemons = false)
        {
            filename = LocalizedFileLoader.GetLocalizedFilepath(filename);

            os = OS.currentInstance;

            executor.SetText(filename, true);

            holder = new ComputerHolder();

            foreach (var custom in CustomExecutors)
            {
                var customInstance = (ComputerExecutor)Activator.CreateInstance(custom.ExecutorType);
                customInstance.Init(os, ref holder);
                executor.RegisterTempExecutor(custom.Element, customInstance.Execute, custom.Options);
            }

            foreach (var customDaemon in DaemonManager.CustomDaemons)
            {
                executor.RegisterTempExecutor("Computer." + customDaemon.Name, (exec, info) =>
                {
                    DaemonManager.TryLoadCustomDaemon(info, comp, os);
                });
            }

            if (!executor.TryParse(out var ex))
            {
                throw new FormatException($"{filename}: {ex.Message}", ex);
            }

            var ret = comp;

            comp = null;

            if (ret == null)
            {
                return(null);
            }

            if (!preventInitDaemons)
            {
                ret.initDaemons();
            }
            if (!preventAddingToNetmap)
            {
                os.netMap.nodes.Add(ret);
                eos?.links.Add(os.netMap.nodes.Count - 1);
            }

            os     = null;
            eos    = null;
            holder = null;

            return(ret);
        }
 protected internal override void CallOn(HacknetPlugin plugin, MemberInfo targettedInfo)
 {
     DaemonManager.RegisterDaemon((Type)targettedInfo);
 }
        /// <summary>
        /// Probe a  machine
        /// </summary>
        /// <param name="daemonMachine">Daemon Machine entity</param>
        /// <returns></returns>
        public DaemonProbeResult ProbeMachine(global::Aneka.PAL.Management.Model.Machine daemonMachine)
        {
            DaemonProbeResult result = new DaemonProbeResult(DaemonProbeStatus.Unknown, null);

            if (daemonMachine != null)
            {
                // set the probe status to unknown
                daemonMachine.ProbeResult = result;

                // check service status
                if (daemonMachine.UserAccount != null)
                {
                    // Probe the target machine..
                    DaemonManager daemonManager = new DaemonManager();
                    result = daemonManager.Probe(daemonMachine);

                    //The machine been pinged and it is reachable of course,
                    //so the statues can't be "NetworkNotReachable"!!!
                    //If DaemonManager.Probe returns "NetworkNotReachable"
                    //it is most likely that it is a credential problem, but maybe not.
                    //So the DaemonManager.Probe must be re-implemented to be more accurate.
                    if(result.Status == DaemonProbeStatus.NetworkNotReachable)
                        result =  new DaemonProbeResult(DaemonProbeStatus.BadCredentials, null);
                }
                else
                    result = new DaemonProbeResult(DaemonProbeStatus.BadCredentials, null);

            }

            //set the probe status of the machine
            return result;
        }