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;
            }));
        }
Example #2
0
        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;
            }));
        }