Exemplo n.º 1
0
        private CPUUpdateResult Resume(LuaArgs args)
        {
            try
            {
                // Setup
                m_updateResult        = CPUUpdateResult.Continue;
                m_nextBootMount.Value = null;

                // Resume
                var results = m_mainRoutine.Resume(args);

                // Update event filter
                m_eventFilter.Clear();
                for (int i = 0; i < results.Length; ++i)
                {
                    if (results.IsNil(i))
                    {
                        break;
                    }
                    else if (results.IsString(i))
                    {
                        m_eventFilter.Add(results.GetString(i));
                    }
                    else
                    {
                        m_eventFilter.Add(null);
                    }
                }

                // Handle result
                if (m_mainRoutine.IsFinished)
                {
                    Halt();
                    return(m_isMainCPU ? CPUUpdateResult.Shutdown : m_updateResult);
                }
                else
                {
                    if (m_updateResult == CPUUpdateResult.Continue)
                    {
                        m_machine.CollectGarbage();
                    }
                    return(m_updateResult);
                }
            }
            catch (LuaError e)
            {
                var bootPath = new FilePath("boot.lua");
                m_computer.ErrorOutput.WriteLine("Error resuming {0}: {1}", bootPath, e.Message);
                Halt();
                return(m_isMainCPU ? CPUUpdateResult.Shutdown : m_updateResult);
            }
        }
Exemplo n.º 2
0
        private DeviceUpdateResult HandleUpdateResult(CPUUpdateResult result)
        {
            switch (result)
            {
            case CPUUpdateResult.Continue:
            default:
            {
                return(DeviceUpdateResult.Continue);
            }

            case CPUUpdateResult.Reboot:
            {
                return(DeviceUpdateResult.Reboot);
            }

            case CPUUpdateResult.Shutdown:
            {
                return(DeviceUpdateResult.Shutdown);
            }

            case CPUUpdateResult.Halt:
            {
                if (!Halted)
                {
                    Halt();
                }
                return(DeviceUpdateResult.Continue);
            }

            case CPUUpdateResult.Boot:
            {
                if (!Halted)
                {
                    Halt();
                }
                return(HandleUpdateResult(ReallyBoot(m_nextBootMount.Value)));
            }
            }
        }
Exemplo n.º 3
0
 internal void RequestReboot()
 {
     m_updateResult = CPUUpdateResult.Reboot;
 }
Exemplo n.º 4
0
 internal void RequestShutdown()
 {
     m_updateResult = CPUUpdateResult.Shutdown;
 }
Exemplo n.º 5
0
 internal void RequestBoot(LuaMount mount)
 {
     m_updateResult        = CPUUpdateResult.Boot;
     m_nextBootMount.Value = mount;
 }
Exemplo n.º 6
0
 internal void RequestHalt()
 {
     m_updateResult = CPUUpdateResult.Halt;
 }