internal static void Start()
 {
     try
     {
         LayoutManager.InitOpengl();
         new Thread((ThreadStart)(() =>
         {
             try
             {
                 AndroidBootUp.AttachMonitor();
             }
             catch (Exception ex)
             {
                 Logger.Error("Exception in AndroidBootUp.Start. Err : ", (object)ex.ToString());
                 AndroidBootUp.HandleBootError();
                 throw ex;
             }
         }))
         {
             IsBackground = true
         }.Start();
     }
     catch (Exception ex)
     {
         Logger.Error("Error in Android bootup start: " + ex.ToString());
         AndroidBootUp.HandleBootError();
         throw ex;
     }
 }
Exemple #2
0
 private void EnterStateStarting()
 {
     Logger.Info("{0}", (object)MethodBase.GetCurrentMethod().Name);
     this.SerialQueueCheck();
     this.mState = StateMachine.State.Starting;
     try
     {
         VBoxBridgeService.Instance.Connect();
     }
     catch (Exception ex1)
     {
         Logger.Info("Cannot connect VBoxBridge");
         Logger.Info(ex1.ToString());
         try
         {
             ComRegistration.Register();
             Logger.Info("Reconnecting to VBoxBridge");
             VBoxBridgeService.Instance.Connect();
         }
         catch (Exception ex2)
         {
             Logger.Info("Got exception {0} while re-registering COM", (object)ex2.ToString());
             AndroidBootUp.HandleBootError();
         }
     }
     if (VBoxBridgeService.Instance.StartMachineAsync(this.mVmName, (VBoxBridgeService.BooleanCallback)(success => this.mWorkQueue.DispatchAsync((SerialWorkQueue.Work)(() => this.StartMachineCompletion(success)))), (VBoxBridgeService.BooleanCallback)(success => this.mWorkQueue.DispatchAsync((SerialWorkQueue.Work)(() => this.StopMachineCompletion(success))))))
     {
         return;
     }
     Logger.Info("Cannot begin starting guest");
     this.EnterStateError();
     AndroidBootUp.HandleBootError();
 }
 public static void GuestBootCompletedEvent(object sender, EventArgs e)
 {
     if (AndroidBootUp.sHasNotifiedClientForGuestBooted)
     {
         return;
     }
     lock (AndroidBootUp.sSendBootCompleteLockObject)
     {
         if (AndroidBootUp.sHasNotifiedClientForGuestBooted)
         {
             return;
         }
         try
         {
             Logger.Info("BOOT_STAGE: Sending boot completed event");
             AndroidBootUp.sHasNotifiedClientForGuestBooted = true;
             try
             {
                 if (!Opt.Instance.sysPrep)
                 {
                     if (Oem.Instance.IsSendGameManagerRequest)
                     {
                         HTTPUtils.SendRequestToClientAsync("guestBootCompleted", (Dictionary <string, string>)null, MultiInstanceStrings.VmName, 0, (Dictionary <string, string>)null, false, 1, 0, "bgp");
                     }
                 }
             }
             catch (Exception ex)
             {
                 Logger.Error("An exception in sending boot completed request to client: {0}", (object)ex.ToString());
             }
             if (LoadingScreen.mLoadingScreen != null)
             {
                 LoadingScreen.RemoveLoadingScreen();
             }
             AndroidBootUp.isAndroidBooted      = true;
             StateMachine.mForceShutdownDueTime = 60000;
             Stats.SendFrontendStatusUpdate("frontend-ready", MultiInstanceStrings.VmName);
             AndroidBootUp.SendSecurityMessageToAndroidOnBootFinish();
             if (AndroidBootUp.HideBootProgress())
             {
                 AndroidBootUp.ShowConnectedView();
                 AndroidBootUp.PerformDeferredSetup();
                 AndroidBootUp.CheckVtxAndShowPopup();
             }
             UIHelper.RunOnUIThread((Control)VMWindow.Instance, (UIHelper.Action)(() =>
             {
                 --VMWindow.Instance.Width;
                 ++VMWindow.Instance.Width;
             }));
             Utils.SyncAppJson(MultiInstanceStrings.VmName);
         }
         catch (Exception ex)
         {
             Logger.Error("Exception on GuestBootCompletedEvent. Err : " + ex.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();
     }));
 }
 internal static void HandleBootError()
 {
     lock (AndroidBootUp.mSendingBootFailureLogsLock)
     {
         Logger.Error("Handling Boot Error");
         Logger.Error(new StackTrace().ToString());
         AndroidBootUp.SendBootFailureLogs();
         if (string.Equals(Oem.Instance.OEM, "dmm", StringComparison.InvariantCultureIgnoreCase))
         {
             HTTPUtils.SendRequestToAgent("guestBootFailed", (Dictionary <string, string>)null, MultiInstanceStrings.VmName, 0, (Dictionary <string, string>)null, false, 1, 0, "bgp", true);
         }
         if (Oem.Instance.IsOEMWithBGPClient)
         {
             HTTPUtils.SendRequestToClientAsync("bootFailedPopup", (Dictionary <string, string>)null, MultiInstanceStrings.VmName, 0, (Dictionary <string, string>)null, false, 1, 0, "bgp");
         }
         else
         {
             int num = (int)System.Windows.Forms.MessageBox.Show(LocaleStrings.GetLocalizedString("STRING_SOME_ERROR_OCCURED", ""));
         }
         Environment.Exit(-1);
     }
 }
        private static void CheckVtxAndShowPopup()
        {
            Logger.Info("In CheckVtxAndShowPopup");
            int    systemInfoStats2 = RegistryManager.Instance.SystemInfoStats2;
            string deviceCaps       = RegistryManager.Instance.DeviceCaps;

            if (systemInfoStats2 == 1 && !deviceCaps.Equals(""))
            {
                Logger.Info("Sending DeviceCaps stats");
                Dictionary <string, string> data = new Dictionary <string, string>();
                Logger.Info("DeviceCaps: " + deviceCaps);
                data.Add("data", deviceCaps);
                data.Add("install_id", RegistryManager.Instance.InstallID);
                try
                {
                    BstHttpClient.Post(RegistryManager.Instance.Host + "/stats/systeminfostats2", data, (Dictionary <string, string>)null, false, MultiInstanceStrings.VmName, 0, 1, 0, false, "bgp");
                    RegistryManager.Instance.SystemInfoStats2 = 0;
                }
                catch (Exception ex)
                {
                    Logger.Error("Exception in Sending systeminfostats2. Err : " + ex.ToString());
                }
            }
            try
            {
                JObject jobject = JObject.Parse(deviceCaps);
                if (!Oem.Instance.IsVTPopupEnabled || !jobject["cpu_hvm"].ToString().Equals("True", StringComparison.OrdinalIgnoreCase) || !jobject["bios_hvm"].ToString().Equals("False", StringComparison.OrdinalIgnoreCase) || !jobject["engine_enabled"].ToString().Equals("legacy", StringComparison.OrdinalIgnoreCase) && !jobject["engine_enabled"].ToString().Equals("raw", StringComparison.OrdinalIgnoreCase))
                {
                    return;
                }
                AndroidBootUp.ShowVtxPopup();
            }
            catch (Exception ex)
            {
                Logger.Error("Exception in showing vtxpopup {0}. Err : ", (object)ex.ToString());
            }
        }
 private static void SendControllerEvent(string name, int identity, string type)
 {
     AndroidBootUp.SendControllerEventInternal(string.Format("controller_{0} {1} {2}", (object)name, (object)identity, (object)type), (UIHelper.Action)null);
 }
 private static void PerformDeferredSetup()
 {
     if (Opt.Instance.sysPrep)
     {
         return;
     }
     Logger.Info("Console PerformDeferredSetup");
     Stats.SendBootStats("frontend", true, false, MultiInstanceStrings.VmName);
     VMWindow.Instance.SendOrientationToGuest();
     if (RegistryManager.Instance.DefaultGuest.ConfigSynced == 0)
     {
         Logger.Info("Config not synced. Syncing now.");
         ThreadPool.QueueUserWorkItem((WaitCallback)(stateInfo =>
         {
             VmCmdHandler.SyncConfig(InputMapper.GetKeyMappingParserVersion(), MultiInstanceStrings.VmName);
             VmCmdHandler.SetKeyboard(LayoutManager.IsDesktop(), MultiInstanceStrings.VmName);
         }));
     }
     else
     {
         string currentKeyboardLayout = Utils.GetCurrentKeyboardLayout();
         VMWindow.Instance.SetKeyboardLayout(currentKeyboardLayout);
         Logger.Info("Config already synced.");
     }
     ThreadPool.QueueUserWorkItem((WaitCallback)(stateInfo =>
     {
         Logger.Info("Started fqdnSender thread for agent");
         VmCmdHandler.FqdnSend(0, "Agent", MultiInstanceStrings.VmName);
         Logger.Info("fqdnSender thread exiting");
     }));
     ThreadPool.QueueUserWorkItem((WaitCallback)(stateInfo =>
     {
         Logger.Info("Started fqdnSender thread for frontend");
         VmCmdHandler.FqdnSend(0, "frontend", MultiInstanceStrings.VmName);
         Logger.Info("fqdnSender thread exiting");
     }));
     UIHelper.RunOnUIThread((Control)VMWindow.Instance, (UIHelper.Action)(() =>
     {
         try
         {
             string text = System.Windows.Clipboard.GetText(System.Windows.TextDataFormat.Text);
             Logger.Debug("sending clipboard data to android.." + text);
             HTTPUtils.SendRequestToGuestAsync("clipboard", new Dictionary <string, string>()
             {
                 {
                     "text",
                     text
                 }
             }, MultiInstanceStrings.VmName, 0, (Dictionary <string, string>)null, false, 1, 0, "bgp");
         }
         catch (Exception ex)
         {
             Logger.Error(" error in sending clipboard data to android.." + ex?.ToString());
         }
     }));
     ThreadPool.QueueUserWorkItem((WaitCallback)(stateInfo => VmCmdHandler.SetMachineType(LayoutManager.IsDesktop(), MultiInstanceStrings.VmName)));
     AndroidBootUp.GpsAttach();
     SensorDevice.Instance.Start(MultiInstanceStrings.VmName);
     AndroidBootUp.CameraAttach();
     AndroidBootUp.SendControllerEventInternal("controller_flush", (UIHelper.Action)(() =>
     {
         foreach (int key in VMWindow.Instance.mControllerMap.Keys)
         {
             SensorDevice.Instance.ControllerAttach(SensorDevice.Type.Accelerometer);
             AndroidBootUp.SendControllerEvent("attach", key, VMWindow.Instance.mControllerMap[key]);
         }
         VMWindow.Instance.mControllerMap.Clear();
     }));
     ThreadPool.QueueUserWorkItem((WaitCallback)(stateInfo =>
     {
         Logger.Info("Checking for Black Screen Error");
         AndroidBootUp.CheckBlackScreenAndRestartGMifOccurs();
     }));
 }