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; } }
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(); })); }