예제 #1
0
        public ActionResponseMessage AddModule(byte[] zip)
        {
            try
            {
                logger?.LogDebug("Adding new module DLLs from Zip.");
                var modules = PluginHelper.ExtractModulesFromZipData(zip, logger);
                if (modules != null)
                {
                    AllModules.AddRange(modules);
                    logger?.LogDebug("Modules added: " + string.Join(", ", modules.Select(m => m.Name)));

                    db.Modules.AddRange(modules.Select(m => ModuleConfig.From(m, zip, true)));
                    db.SaveChanges();

                    return(ActionResponseMessage.Success("Modules added: " + string.Join(", ", modules.Select(m => m.Name))));
                }
                else
                {
                    logger?.LogWarning("Modules failed to load.");
                    return(ActionResponseMessage.Failure("Modules failed to load. Did you provide a zip file?"));
                }
            }
            catch (Exception e)
            {
                logger?.LogWarning("Modules failed to load.");
                return(ActionResponseMessage.Failure(e, "Modules failed to load. Did you provide a zip file?"));
            }
        }
예제 #2
0
        public ActionResponseMessage RemoveModule(string reference)
        {
            AllModules.RemoveAll(m => m.UniqueReference == reference);
            db.Modules.RemoveRange(db.Modules.Where(m => m.UniqueReference == reference));
            db.SaveChanges();

            return(ActionResponseMessage.Success("Removed: " + reference));
        }
예제 #3
0
        public async Task <ActionResponseMessage> SetRoboConfigAsync(string robotName, string robotSerial, string email, string password, string ipOverride = null)
        {
            try
            {
                var roboConfig = new RoboConfig()
                {
                    RobotName     = robotName,
                    RobotSerial   = robotSerial,
                    Email         = email,
                    Password      = password,
                    IpOverrideStr = string.IsNullOrWhiteSpace(ipOverride) ? ipOverride : null
                };

                StoreRoboConfig(roboConfig); // store an early version with entered details

                // validations
                var validations = new List <string>();
                if (!Authentication.SerialNumberIsValid(robotSerial))
                {
                    validations.Add("Serial number invalid.");
                }
                if (!Authentication.RobotNameIsValid(robotName))
                {
                    validations.Add("Robot name invalid.");
                }
                if (validations.Count > 0)
                {
                    return(ActionResponseMessage.Failure(validations));
                }

                IPAddress ipAddressOverride = null;
                if (!string.IsNullOrWhiteSpace(ipOverride))
                {
                    IPAddress.TryParse(ipOverride, out ipAddressOverride);
                }

                var loginResult = await Authentication.Login(robotSerial, robotName, email, password, ipAddressOverride);

                roboConfig.RobotName     = loginResult.RobotName;
                roboConfig.RobotGuid     = loginResult.Guid;
                roboConfig.RobotCert     = loginResult.Certificate;
                roboConfig.IpOverrideStr = ipAddressOverride?.ToString();

                StoreRoboConfig(roboConfig); // store final version with cert and guid

                // if all else has succeeded, now reconnect to the robot
                return(await ReconnectAsync());
            }
            catch (VectorAuthenticationException ex)
            {
                return(ActionResponseMessage.Failure(ex));
            }
        }
예제 #4
0
        public async Task <ActionResponseMessage> ActivateBehaviourAsync(string reference)
        {
            var allBehaviours = AllModules.SelectMany(m => m.Behaviours);
            var behaviour     = allBehaviours.SingleOrDefault(b => b.UniqueReference == reference);

            if (behaviour != null)
            {
                await Controller.AddBehaviourAsync(behaviour);

                return(ActionResponseMessage.Success("Behaviour activated."));
            }
            else
            {
                return(ActionResponseMessage.Failure("Behaviour not found."));
            }
        }
예제 #5
0
        public async Task <ActionResponseMessage> DeactivateBehaviourAsync(string reference)
        {
            await Controller.RemoveBehaviourAsync(reference);

            return(ActionResponseMessage.Success("Behaviour deactivated."));
        }
예제 #6
0
        public async Task <ActionResponseMessage> DisconnectAsync()
        {
            await DisconnectAsync(executionStoppingToken);

            return(ActionResponseMessage.Success("Disconnected."));
        }
예제 #7
0
        public async Task <ActionResponseMessage> ReconnectAsync()
        {
            bool reconnected = await ReconnectAsync(executionStoppingToken);

            return(reconnected ? ActionResponseMessage.Success("Connected") : ActionResponseMessage.Failure("Failed to connect."));
        }