Ejemplo n.º 1
0
        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.");
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }