Exemple #1
0
        public async Task <IActionResult> AddScript(ScriptBindingModel scriptBindingModel)
        {
            var result   = new Response <BaseDto>();
            var username = HttpContext.User.Claims.First(c => c.Type == ClaimTypes.GivenName).Value;

            result = await _scriptService.AddAsync(scriptBindingModel, username);

            if (result.ErrorOccured)
            {
                return(BadRequest(result));
            }
            return(Ok(result));
        }
Exemple #2
0
        public async Task <Response <BaseDto> > AddAsync(ScriptBindingModel scriptBindingModel, string userName)
        {
            var result   = new Response <BaseDto>();
            var lines    = scriptBindingModel.Script.Split('\n').Length;
            var robot    = _robotRepository.Get(r => r.Id == scriptBindingModel.RobotId);
            var user     = _userRepository.Get(u => u.Username == userName);
            var filePath = $@"../Scripts/{userName}/{scriptBindingModel.Name}.rl";

            if (user == null)
            {
                result.Errors.Add("Something went wrong, please log out and log in to proceed");
                return(result);
            }

            var player = _playerRepository.Get(p => p.UserId == user.Id);

            if (robot == null)
            {
                result.Errors.Add("The robot you have selected does not exist");
                return(result);
            }
            if (File.Exists(filePath))
            {
                result.Errors.Add($"A script named {scriptBindingModel.Name} already exists");
                return(result);
            }
            //try
            //{
            //    File.CreateText(filePath);
            //}
            //catch (Exception e)
            //{
            //    result.Errors.Add(e.Message);
            //    result.Errors.Add(e.InnerException.Message);
            //    return result;
            //}
            using (var writer = File.CreateText(filePath))
            {
                try
                {
                    writer.Write(scriptBindingModel.Script); //or .Write(), if you wish
                }
                catch (Exception e)
                {
                    result.Errors.Add(e.Message);
                    result.Errors.Add(e.InnerException.Message);
                    return(result);
                }
            }


            //here goes script validation

            var script = new Script
            {
                CreatedAt  = DateTime.Now,
                ForRobot   = robot,
                Lines      = lines,
                Name       = scriptBindingModel.Name,
                ServerPath = filePath,
                Owner      = player,
                UpdatedAt  = DateTime.Now,
            };

            var insertResult = await _scriptRepository.AddAsync(script);

            if (!insertResult)
            {
                result.Errors.Add("Something went wrong, please contact DevBots support");
                return(result);
            }

            return(result);
        }