public static void StartAsync()
 {
     AndroidService.androidThread = new Thread((ThreadStart)(() =>
     {
         if (!Utils.CheckIfAndroidBstkExistAndValid(Strings.CurrentDefaultVmName))
         {
             Utils.CreateBstkFileFromPrev(MultiInstanceStrings.VmName);
         }
         ServiceManager.StartService(Strings.BlueStacksDriverName, true);
         ServiceHelper.FindAndSyncConfig();
         MonitorLocator.Publish(Strings.CurrentDefaultVmName, (uint)Process.GetCurrentProcess().Id);
         AndroidService.mAndroidService = new AndroidService(true, Strings.CurrentDefaultVmName);
         ThreadPool.QueueUserWorkItem((WaitCallback)(stateInfo =>
         {
             AndroidService.HDQuitEvent = new EventWaitHandle(false, EventResetMode.AutoReset, string.Format("HD-Plus-{0}", (object)Process.GetCurrentProcess().Id));
             AndroidService.HDQuitEvent.WaitOne();
             AndroidService.mAndroidService.OnStop();
         }));
         AndroidService.mAndroidService.RunDebug();
     }))
     {
         IsBackground = true
     };
     AndroidService.androidThread.Start();
 }
Ejemplo n.º 2
0
        public static void StartZygote(string vmName)
        {
            Monitor monitor;

            while (true)
            {
                uint    id      = MonitorLocator.Lookup(vmName);
                Manager manager = Manager.Open();
                try
                {
                    monitor = manager.Attach(id, true);
                }
                catch (Exception ex)
                {
                    Logger.Debug("Cannot attach to the monitor: " + ex.ToString());
                    Thread.Sleep(500);
                    Logger.Debug("Retrying...");
                    continue;
                }
                try
                {
                    monitor.SendControl(Monitor.BstInputControlType.BST_INPUT_CONTROL_TYPE_START);
                    break;
                }
                catch (Exception ex)
                {
                    Logger.Debug("Cannot start Zygote: " + ex.ToString());
                    Thread.Sleep(500);
                    Logger.Debug("Retrying...");
                }
            }
            monitor?.Close();
        }
Ejemplo n.º 3
0
        public static void StopZygote(string vmName)
        {
            int num = 0;

            while (num < 3)
            {
                ++num;
                Monitor monitor;
                try
                {
                    monitor = Manager.Open().Attach(MonitorLocator.Lookup(vmName), true);
                }
                catch (Exception ex)
                {
                    Logger.Debug("Cannot attach to the monitor: " + ex.ToString());
                    Thread.Sleep(500);
                    Logger.Debug("Retrying...");
                    continue;
                }
                try
                {
                    monitor.SendControl(Monitor.BstInputControlType.BST_INPUT_CONTROL_TYPE_STOP);
                }
                catch (Exception ex)
                {
                    Logger.Debug("Cannot stop Zygote: " + ex.ToString());
                    Thread.Sleep(500);
                    Logger.Debug("Retrying...");
                    continue;
                }
                monitor?.Close();
                break;
            }
        }
Ejemplo n.º 4
0
        public void Attach(string vmName)
        {
            uint vmId = MonitorLocator.Lookup(vmName);

            this.unitId   = (uint)this.random.Next();
            this.vmHandle = Command.CommandAttach(vmId, this.unitId);
            if (this.vmHandle.IsInvalid)
            {
                throw new ApplicationException("Cannot attach to monitor: " + Marshal.GetLastWin32Error().ToString());
            }
        }
 private static void AttachMonitor()
 {
     UIHelper.RunOnUIThread((Control)VMWindow.Instance, (UIHelper.Action)(() =>
     {
         if (AndroidBootUp.mManager != null)
         {
             throw new SystemException("A connection to the manager is already open");
         }
         if (AndroidBootUp.mMonitor != null)
         {
             throw new SystemException("Another monitor is already attached");
         }
         uint id          = MonitorLocator.Lookup(MultiInstanceStrings.VmName);
         Manager manager  = (Manager)null;
         Monitor monitor1 = (Monitor)null;
         bool verbose     = false;
         try
         {
             verbose = AndroidBootUp.mFirstMonitorAttachAttempt;
             AndroidBootUp.mFirstMonitorAttachAttempt = false;
             manager  = Manager.Open();
             monitor1 = manager.Attach(id, verbose, false);
         }
         catch (Exception ex)
         {
             if (!AndroidBootUp.IsExceptionFileNotFound(ex))
             {
                 Logger.Error(ex.ToString());
             }
             if (manager != null)
             {
                 manager = (Manager)null;
             }
         }
         if (monitor1 == null)
         {
             return;
         }
         Monitor monitor2 = manager.Attach(id, verbose, true);
         if (monitor2 == null)
         {
             Logger.Info("Could not Attach to a monitor");
         }
         AndroidBootUp.forceVideoModeChange = true;
         AndroidBootUp.mMonitor             = monitor2;
         AndroidBootUp.mManager             = manager;
         if (AndroidBootUp.HideBootProgress())
         {
             return;
         }
         AndroidBootUp.ShowConnectedView();
     }));
 }
        public void InitCamera(string[] args)
        {
            if (args.Length != 1)
            {
                throw new SystemException("InitCamera: Should have vmName as one arg");
            }
            string vmName = args[0];

            this.keyEnableCam = RegistryManager.Instance.DefaultGuest.Camera;
            if (this.keyEnableCam != 1)
            {
                Logger.Info("Camera is Disabled");
            }
            else
            {
                uint vmId = MonitorLocator.Lookup(vmName);
                lock (CameraManager.s_IoHandleLock)
                {
                    if (CameraManager.s_IoHandle != IntPtr.Zero)
                    {
                        throw new SystemException("I/O handle is already open");
                    }
                    Logger.Info("Attaching to monitor ID {0}", (object)vmId);
                    CameraManager.s_IoHandle = HDPlusModule.CameraIoAttach(vmId);
                    if (CameraManager.s_IoHandle == IntPtr.Zero)
                    {
                        throw new SystemException("Cannot attach for I/O", (Exception) new Win32Exception(Marshal.GetLastWin32Error()));
                    }
                }
                this.s_fpStartStopCamera = new CameraManager.fpStartStopCamera(this.BstStartStopCamera);
                HDPlusModule.SetStartStopCamerCB(this.s_fpStartStopCamera);
                Logger.Info("Waiting for Camera messages...");
                new Thread((ThreadStart)(() =>
                {
                    while (!this.bShutDown)
                    {
                        int num = HDPlusModule.CameraIoProcessMessages(CameraManager.s_IoHandle);
                        if (num != 0)
                        {
                            Logger.Error("Camera: Cannot process VM messages. Error: " + num.ToString());
                            this.Shutdown();
                        }
                    }
                }))
                {
                    IsBackground = true
                }.Start();
            }
        }