Exemplo n.º 1
0
 private async Task WriteCacheItem(ResourceRequestModel requestModel, ResourceResponseModel responseModel, CancellationToken cancel)
 {
     if (cacheProvider != null)
     {
         await cacheProvider.WriteChacheItemAsync(requestModel, responseModel, cancel);
     }
 }
        public Task WriteChacheItemAsync(ResourceRequestModel requestModel, ResourceResponseModel responseModel, CancellationToken cancel)
        {
            var hashKey = BuildRequestHashCode(requestModel);

            cancel.ThrowIfCancellationRequested();
            memoryCache.Set(hashKey, responseModel);
            return(Task.CompletedTask);
        }
Exemplo n.º 3
0
        protected string ResolveRequestSync(string resourceName, string?culture = null)
        {
            culture ??= options.DefaultCulture;
            string?appName = null;

            if (options.UseApplicationName && !string.IsNullOrEmpty(options.ApplicationName))
            {
                appName = options.ApplicationName;
            }
            var requestModel = new ResourceRequestModel(resourceName, culture, appName);
            var result       = localizeService.Localize(requestModel);

            return(result.Value);
        }
        public Task <ResourceResponseModel?> GetCachedItemAsync(ResourceRequestModel model, CancellationToken cancel)
        {
            var hashKey = BuildRequestHashCode(model);

            cancel.ThrowIfCancellationRequested();
            var success = memoryCache.TryGetValue(hashKey, out ResourceResponseModel result);

            if (success)
            {
                return(Task.FromResult <ResourceResponseModel?>(result));
            }
            else
            {
                return(Task.FromResult <ResourceResponseModel?>(null));
            }
        }
Exemplo n.º 5
0
        public HttpResponseMessage Put([FromUri] string model)
        {
            try
            {
                JObject jObj = JObject.Parse(model);
                ResourceRequestModel myModel = new ResourceRequestModel();
                myModel = jObj.ToObject <ResourceRequestModel>();

                var resource = ModelDataConversion.RequestModelToDataModel(myModel);
                ResourceRepository.UpdateResourceInfo(resource);

                var response = ModelDataConversion.DataModelToResponseModel(myModel);
                return(Request.CreateResponse(System.Net.HttpStatusCode.OK, response));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(System.Net.HttpStatusCode.NotFound, ex));
            }
        }
        public static string DataModelToResponseModel(ResourceRequestModel request)
        {
            string jsonRsponse = @"{  
                                    'header': {
                                                'sourceRequest': {
                                                                   'requestId': " + request.header.requestId + @"                                                                
                                                                   'requestType': " + request.header.requestType + @"  
	                                                               'version': "     + request.header.version + @"  
	                                                             },
	                                            'messageType':"     + request.header.requestType + @"  
	                                            'version':"     + request.header.version + @"  
	                                            'dateMsg':	"     + request.header.dateMsg + @"  
	                                     },
	                                'body':{
                                                'resourceState': {
                                                                    'id':" + request.body.itemSet.items.id + @" 
			                                                        'updateDataDate':"             + DateTime.Now + @"
						                                             'tags': {
                                                                               'Id': " + request.body.itemSet.items.tags.Id + @" , 
									                                            'TypeId': "                                     + request.body.itemSet.items.tags.TypeId + @", 
									                                            'Type': "                                     + request.body.itemSet.items.tags.Type + @", 
					                                                            'StatusId': "                                     + request.body.itemSet.items.tags.StatusId + @", 
									                                            'Status': "                                     + request.body.itemSet.items.tags.Status + @", 
									                                            'LocationId': "                                     + request.body.itemSet.items.tags.LocationId + @",
									                                            'LocationValue': {
                                                                                                    'Id': " + request.body.itemSet.items.tags.LocationValue.Id + @" ,
														                                            'X': "                                                         + request.body.itemSet.items.tags.LocationValue.X + @" ,
														                                            'Y': "                                                         + request.body.itemSet.items.tags.LocationValue.Y + @" ,
														                                            'Z': "                                                         + request.body.itemSet.items.tags.LocationValue.Z + @" ,
														                                            'Rotation': "                                                         + request.body.itemSet.items.tags.LocationValue.Rotation + @"
                                                                                                    }, 
									                                            'Name': "                                     + request.body.itemSet.items.tags.Name + @"
                                                                             }
                                                                  }
                                            }
                                    }";


            jsonRsponse = jsonRsponse.Replace("\n", "").ToString();
            jsonRsponse = jsonRsponse.Replace("\t", "").ToString();
            jsonRsponse = jsonRsponse.Replace("\r", "").ToString();
            return(jsonRsponse);
        }
Exemplo n.º 7
0
        public async Task <IActionResult> GetAsync([FromQuery] ResourceRequestModel request)
        {
            try
            {
                // TODO: Use automapper here!
                var appRequest = new ResourcePaginatedRequestDto
                {
                    WithId  = request.WithId,
                    WithKey = request.WithKey
                              //LanguageCode = request.lang
                };
                var appResponse = await _resourcesAppService.GetAllAsync(appRequest);

                var response = appResponse.ToPaginatedResponseModel <ResourceModel, ResourceDto>();
                return(Ok(response));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                return(StatusCode((int)HttpStatusCode.InternalServerError));
            }
        }
        private string BuildRequestHashCode(ResourceRequestModel model)
        {
            var hashAlg = MD5.Create();
            var sb      = new StringBuilder();

            sb.Append(typeof(ResourceRequestModel).FullName);
            sb.Append("!;");
            sb.Append(model.Key);
            sb.Append("!;");
            sb.Append(model.Culture);
            sb.Append("!;");
            sb.Append(model.System);
            var array = Encoding.ASCII.GetBytes(sb.ToString());

            var hashBytes = hashAlg.ComputeHash(array);

            sb = new StringBuilder();
            foreach (var hashByte in hashBytes)
            {
                sb.Append(hashByte.ToString("X2"));
            }
            return(sb.ToString());
        }
Exemplo n.º 9
0
        public async Task <ResourceResponseModel> LocalizeAsync(ResourceRequestModel request, CancellationToken cancel)
        {
            if (cacheProvider != null)
            {
                var result = await cacheProvider.GetCachedItemAsync(request, cancel);

                if (result != null)
                {
                    return(result);
                }
            }
            var sb = new StringBuilder();

            sb.Append(apiPath);
            sb.Append(request.Key);
            sb.Append("/");
            sb.Append(request.Culture);
            if (request.System != null)
            {
                sb.Append("?system=" + request.System);
            }
            var webRequest = await httpClient.GetAsync(sb.ToString());

            if (webRequest.StatusCode == System.Net.HttpStatusCode.OK)
            {
                var response = JsonConvert.DeserializeObject <ResourceResponseModel>(await webRequest.Content.ReadAsStringAsync());
                if (response != null)
                {
                    if (cacheProvider != null && response.ResolveState.HasFlag(Common.Models.Utils.EResolveState.CultureComplete))
                    {
                        await cacheProvider.WriteChacheItemAsync(request, response, cancel);
                    }
                    return(response);
                }
            }
            throw new ApplicationException("Resource Server isn't reachable");
        }
Exemplo n.º 10
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var provider = new ServiceCollection()
                           .AddMemoryCache()
                           .AddSingleton(new WebLocalizeConfiguration
            {
                Host = "localhost",
                Port = 5001
            })
                           .AddTransient <ILocalizeCacheProvider, MemoryLocalizeCacheProvider>()
                           .AddTransient <ILocalizeService, WebLocalizeService>()
                           .BuildServiceProvider();

            var serivce = provider.GetRequiredService <ILocalizeService>();

            var request = new ResourceRequestModel("test", "de-de", null);

            var stopwatch = new Stopwatch();

            Console.WriteLine("Start request 1...");
            stopwatch.Start();
            var response = await serivce.LocalizeAsync(request, CancellationToken.None);

            stopwatch.Stop();
            Console.WriteLine($"Ergebnis: {response.Value} in {stopwatch.ElapsedMilliseconds}ms.");

            stopwatch = new Stopwatch();
            Console.WriteLine("Start request 2...");
            stopwatch.Start();
            response = await serivce.LocalizeAsync(request, CancellationToken.None);

            stopwatch.Stop();
            Console.WriteLine($"Ergebnis: {response.Value} in {stopwatch.ElapsedMilliseconds}ms.");
            Console.ReadKey();
        }
        public static ResourceResponseModel Localize(this ILocalizeService localizeService, ResourceRequestModel requestModel)
        {
            var task = localizeService.LocalizeAsync(requestModel, CancellationToken.None);

            task.Wait();
            return(task.Result);
        }
Exemplo n.º 12
0
        public async Task <ResourceResponseModel> LocalizeAsync(ResourceRequestModel request, CancellationToken cancel)
        {
            if (cacheProvider != null)
            {
                var entry = await cacheProvider.GetCachedItemAsync(request, cancel);

                if (entry != null)
                {
                    return(entry);
                }
            }

            var itemCursor = await collection.FindAsync(m => m.ResourceKey == request.Key, cancellationToken : cancel);

            var item = itemCursor.FirstOrDefault();

            if (item == null)
            {
                return(new ResourceResponseModel(request.Key, EResolveState.None));
            }
            var partCulture    = string.Empty;
            var itemCandidates = item.ResourceItems.Where(m => m.Culture != null && m.Culture !.Equals(request.Culture, StringComparison.CurrentCultureIgnoreCase));
            IEnumerable <MongoDbResourceItem> partCultureCandidatestes = new List <MongoDbResourceItem>();

            if (request.Culture.Contains('-'))
            {
                partCulture = request.Culture.Split('-')[0];
                partCultureCandidatestes = item.ResourceItems.Where(m => m.Culture != null && m.Culture !.Equals(partCulture, StringComparison.CurrentCultureIgnoreCase));
            }
            cancel.ThrowIfCancellationRequested();
            MongoDbResourceItem?resultItem;

            if (request.System != null)
            {
                resultItem = itemCandidates.FirstOrDefault(m => m.Application != null && m.Application !.Equals(request.System, StringComparison.CurrentCultureIgnoreCase));
                if (resultItem != null)
                {
                    var result = new ResourceResponseModel(resultItem.Value, EResolveState.System | EResolveState.CultureComplete);
                    await WriteCacheItem(request, result, cancel);

                    return(result);
                }
                resultItem = partCultureCandidatestes.FirstOrDefault(m => m.Application != null && m.Application !.Equals(request.System, StringComparison.CurrentCultureIgnoreCase));
                if (resultItem != null)
                {
                    return(new ResourceResponseModel(resultItem.Value, EResolveState.System | EResolveState.CultureParent));
                }
            }
            cancel.ThrowIfCancellationRequested();
            resultItem = itemCandidates.FirstOrDefault(m => string.IsNullOrEmpty(m.Application));
            if (resultItem != null)
            {
                var result = new ResourceResponseModel(resultItem.Value, EResolveState.CultureComplete);
                if (request.System == null)
                {
                    await WriteCacheItem(request, result, cancel);
                }
                return(result);
            }
            cancel.ThrowIfCancellationRequested();
            resultItem = partCultureCandidatestes.FirstOrDefault(m => string.IsNullOrEmpty(m.Application));
            if (resultItem != null)
            {
                return(new ResourceResponseModel(resultItem.Value, EResolveState.CultureParent));
            }
            return(new ResourceResponseModel(request.Key, EResolveState.None));
        }
Exemplo n.º 13
0
        public async Task <ActionResult <ResourceResponseModel> > Localize(string key, string culture, CancellationToken cancel, string application = null)
        {
            var model = new ResourceRequestModel(key, culture, application);

            return(await Localize(model, cancel));
        }
Exemplo n.º 14
0
 public async Task <ActionResult <ResourceResponseModel> > Localize(ResourceRequestModel model, CancellationToken cancel)
 {
     return(await localizeService.LocalizeAsync(model, cancel));
 }
 public static ResourceWithValue RequestModelToDataModel(ResourceRequestModel data)
 {
     return(data.body.itemSet.items.tags);
 }