Пример #1
0
 /// <summary>
 /// Creates a new comparison item and add it to the CopmparisonRepository
 /// </summary>
 /// <param name="id">The comparison unit Id</param>
 /// <param name="comparsionSide">The side of the first string to compare</param>
 /// <param name="str">The string to compare</param>
 public bool LoadString(string id, ComparisonSide comparsionSide, string str, out string message)
 {
     //check the string validity:
     if (!IsValidString(str, out message))
     {
         message = "String is not valid";
         return(false);
     }
     lock (LockObj)
     {
         if (ComparisonRepository.ContainsKey(id))
         {
             //places the string in the correct side of the unit
             var comparisonUnit = ComparisonRepository[id];
             AssignString(comparisonUnit, comparsionSide, str);
             return(true);
         }
         else
         {
             //creates a new comparison unit in the repository
             CreateNewComparisonUnit(id, comparsionSide, str);
             return(true);
         }
     }
 }
Пример #2
0
 /// <summary>
 /// Creates a new comparison item and add it to the CopmparisonRepository
 /// </summary>
 /// <param name="id">The comparison unit Id</param>
 /// <param name="comparsionSide">The side of the first string to compare</param>
 /// <param name="str">The string to compare</param>
 private void CreateNewComparisonUnit(string id, ComparisonSide comparsionSide, string str)
 {
     lock (LockObj)//for thread saftey
     {
         var comparisonUnit = new ComparisonUnit(_stringCoparerService);
         //Adds the string to the proper side
         AssignString(comparisonUnit, comparsionSide, str);
         ComparisonRepository.Add(id, comparisonUnit);
     }
 }
Пример #3
0
        private void AssignString(ComparisonUnit comparisonUnit, ComparisonSide comparsionSide, string str)
        {
            switch (comparsionSide)
            {
            case ComparisonSide.Right:
                comparisonUnit.Right = str;
                break;

            case ComparisonSide.Left:
                comparisonUnit.Left = str;
                break;
            }
        }
Пример #4
0
        public Task SetContent(string id, string content, ComparisonSide side)
        {
            if (string.IsNullOrWhiteSpace(id))
            {
                throw new ArgumentException("Value can't be null or empty string", nameof(id));
            }

            if (content?.Length > MaxLength)
            {
                throw new NotSupportedException("Content is to large");
            }

            using (var client = _clientManager.GetClient())
            {
                client.Set($"{id}:{side.ToString()}", content);
            }

            return(Task.CompletedTask);
        }
Пример #5
0
        public Task SetContent(string id, string content, ComparisonSide side)
        {
            if (string.IsNullOrWhiteSpace(id))
            {
                throw new ArgumentException("Value can't be null or empty string", nameof(id));
            }

            if (content?.Length > MaxLength)
            {
                throw new NotSupportedException("Content is to large");
            }

            var comparisonContent = new ComparisonContent {
                Id = id
            };

            Set(comparisonContent, content, side);

            _store.AddOrUpdate(id, comparisonContent, (key, val) => Set(val, content, side));

            return(Task.CompletedTask);
        }
Пример #6
0
        private static ComparisonContent Set(ComparisonContent comparisonContent, string content, ComparisonSide side)
        {
            if (side == ComparisonSide.Left)
            {
                comparisonContent.Left = content;
            }

            if (side == ComparisonSide.Right)
            {
                comparisonContent.Right = content;
            }

            return(comparisonContent);
        }
Пример #7
0
        private async Task <IActionResult> SetComparisonContent(string id, string content, ComparisonSide side)
        {
            if (content == null)
            {
                return(BadRequest());
            }

            IDisposable loggingScope = null;

            if (content.Length > _contentRepository.MaxLength)
            {
                return(StatusCode(413));
            }

            try
            {
                loggingScope = _logger.BeginScope("ComparisonID: {0}; Side: {2}", id, side);
                _logger.LogInformation("Setting comparison content");

                byte[] buffer;

                try
                {
                    buffer = Convert.FromBase64String(content);
                }
                catch (FormatException ex)
                {
                    _logger.LogError(ex, "Failed to parse content. Content: {0}", content);
                    return(BadRequest("Invalid content format. Expected base64 encoded string."));
                }

                var decodedContent = Encoding.UTF8.GetString(buffer);

                await _contentRepository.SetContent(id, decodedContent, side).ConfigureAwait(false);

                _logger.LogInformation("Content set");

                return(Ok());
            }
            finally
            {
                loggingScope?.Dispose();
            }
        }