internal async Task DeployMono() { var writer = OutputWriter.Instance; writer.Clear(); //Connect to RoboRIO writer.WriteLine("Attempting to Connect to RoboRIO"); Task <bool> rioConnectionTask = m_deployManager.StartConnectionTask(m_teamNumber); Task delayTask = Task.Delay(10000); bool success = await m_monoFile.UnzipMonoFile(); if (!success) { return; } //Successfully extracted files. writer.WriteLine("Waiting for Connection to Finish"); if (await Task.WhenAny(rioConnectionTask, delayTask) == rioConnectionTask) { //Completed if (rioConnectionTask.Result) { writer.WriteLine("Successfully Connected to RoboRIO"); List <string> deployFiles = m_monoFile.GetUnzippedFileList(); writer.WriteLine("Creating Opkg Directory"); await RoboRIOConnection.RunCommand($"mkdir -p {DeployProperties.RoboRioOpgkLocation}", ConnectionUser.Admin); writer.WriteLine("Deploying Mono Files"); success = await RoboRIOConnection.DeployFiles(deployFiles, DeployProperties.RoboRioOpgkLocation, ConnectionUser.Admin); if (!success) { return; } writer.WriteLine("Installing Mono"); var monoRet = await RoboRIOConnection.RunCommand(DeployProperties.OpkgInstallCommand, ConnectionUser.Admin); //Check for success. bool monoSuccess = await m_deployManager.CheckMonoInstall(); if (monoSuccess) { writer.WriteLine("Mono Installed Successfully"); } else { writer.WriteLine("Mono not installed successfully. Please try again."); } writer.WriteLine("Cleaning up installation"); // Set allow realtime on Mono instance await RoboRIOConnection.RunCommand("setcap cap_sys_nice=pe /usr/bin/mono-sgen", ConnectionUser.Admin); //Removing ipk files from the RoboRIO await RoboRIOConnection.RunCommand($"rm -rf {DeployProperties.RoboRioOpgkLocation}", ConnectionUser.Admin); writer.WriteLine("Done. You may now deploy code to your robot."); } else { //Did not successfully connect writer.WriteLine("Failed to Connect to RoboRIO. Exiting."); } } else { //Timedout writer.WriteLine("RoboRIO connection timedout. Exiting."); } }
internal async Task DeployMonoAsync() { var writer = OutputWriter.Instance; await writer.ClearAsync().ConfigureAwait(false); //Connect to RoboRIO await writer.WriteLineAsync("Attempting to Connect to RoboRIO").ConfigureAwait(false); Task <RoboRioConnection> rioConnectionTask = RoboRioConnection.StartConnectionTaskAsync(m_teamNumber); bool success = await m_monoFile.UnzipMonoFileAsync().ConfigureAwait(false); if (!success) { return; } //Successfully extracted files. await writer.WriteLineAsync("Waiting for Connection to Finish").ConfigureAwait(false); using (var roboRioConnection = await rioConnectionTask.ConfigureAwait(false)) { if (roboRioConnection.Connected) { await writer.WriteLineAsync("Successfully Connected to RoboRIO").ConfigureAwait(false); List <string> deployFiles = m_monoFile.GetUnzippedFileList(); await writer.WriteLineAsync("Creating Opkg Directory").ConfigureAwait(false); await roboRioConnection.RunCommandAsync($"mkdir -p {DeployProperties.RoboRioOpgkLocation}", ConnectionUser.Admin).ConfigureAwait(false); await writer.WriteLineAsync("Deploying Mono Files").ConfigureAwait(false); success = await roboRioConnection.DeployFiles(deployFiles, DeployProperties.RoboRioOpgkLocation, ConnectionUser.Admin).ConfigureAwait(false); if (!success) { return; } await writer.WriteLineAsync("Installing Mono").ConfigureAwait(false); var monoRet = await roboRioConnection.RunCommandAsync(DeployProperties.OpkgInstallCommand, ConnectionUser.Admin) .ConfigureAwait(false); //Check for success. bool monoSuccess = await CheckMonoInstallAsync(roboRioConnection).ConfigureAwait(false); if (monoSuccess) { await writer.WriteLineAsync("Mono Installed Successfully").ConfigureAwait(false); } else { await writer.WriteLineAsync("Mono not installed successfully. Please try again.") .ConfigureAwait(false); } await writer.WriteLineAsync("Cleaning up installation").ConfigureAwait(false); // Set allow realtime on Mono instance await roboRioConnection.RunCommandAsync("setcap cap_sys_nice=pe /usr/bin/mono-sgen", ConnectionUser.Admin).ConfigureAwait(false); //Removing ipk files from the RoboRIO await roboRioConnection.RunCommandAsync($"rm -rf {DeployProperties.RoboRioOpgkLocation}", ConnectionUser.Admin).ConfigureAwait(false); await writer.WriteLineAsync("Done. You may now deploy code to your robot.").ConfigureAwait(false); } else { //Did not successfully connect await writer.WriteLineAsync("Failed to Connect to RoboRIO. Exiting.").ConfigureAwait(false); } } }