public Task <RestoreContextsLinkageResponse> RestoreContextsLinkage(RestoreContextsLinkageRequest request, MethodCallContext callContext) { return(Task.Factory.StartNew(() => { var newCreatedContexts = new Dictionary <string, Context>(); foreach (var restoringAppInstance in request.Apps) { foreach (var contextId in restoringAppInstance.ContextIds) { if (!newCreatedContexts.TryGetValue(contextId, out var context)) { context = _contextsSet.CreateContext(); newCreatedContexts[contextId] = context; } context.AppLaunched(restoringAppInstance.AppInstanceId.ToUniqueId(), restoringAppInstance.AppIds); } } var response = new RestoreContextsLinkageResponse(); foreach (var pair in newCreatedContexts) { response.CreatedContextsMap[pair.Key] = new ContextDto { Id = pair.Value.Id }; } return response; })); }
public Task <RestoreContextsLinkageResponse> RestoreContextsLinkage(RestoreContextsLinkageRequest request, MethodCallContext callContext) { return(Task.Factory.StartNew(() => { var newCreatedContexts = new Dictionary <string, Context>(); var contextsOwners = request.Apps .SelectMany(app => app.Contexts .Where(ctx => ctx.Own) .Select(ctx => new { app.AppInstanceId, ContextId = ctx.Id })) .GroupBy(x => x.ContextId) .ToDictionary(xs => xs.Key, xs => xs.First().AppInstanceId.ToUniqueId()); foreach (var restoringAppInstance in request.Apps) { var contexts = restoringAppInstance.Contexts.Count > 0 ? restoringAppInstance.Contexts : restoringAppInstance.ContextIds.Select(id => new ContextDto { Id = id }); foreach (var context in contexts) { if (!newCreatedContexts.TryGetValue(context.Id, out var newContext)) { if (!contextsOwners.TryGetValue(context.Id, out var ownerAppInstanceId)) { ownerAppInstanceId = default; } newContext = _contextsSet.CreateContext(context.Kind, ownerAppInstanceId); newCreatedContexts[context.Id] = newContext; } newContext.AppLaunched(restoringAppInstance.AppInstanceId.ToUniqueId(), restoringAppInstance.AppIds); } } var response = new RestoreContextsLinkageResponse(); foreach (var pair in newCreatedContexts) { response.CreatedContextsMap[pair.Key] = ConvertContextToProto(pair.Value, callContext.ConsumerApplicationInstanceId); } return response; })); }