Exemplo n.º 1
0
        public CoreProxy(ICoreController controller, IModelUpdater modelUpdater)
        {
            m_controller = controller;
            ModelUpdater = modelUpdater;

            m_controller.StartStateChecking(HandleKeepaliveStateResponse);
            modelUpdater.Start();
        }
 public Task UpdateEditorAsync(UpdateEditorContext context, IModelUpdater modelUpdater)
 {
     return _drivers.InvokeAsync(async driver => {
         var result = await driver.UpdateEditorAsync(context, modelUpdater);
         if (result != null)
             result.Apply(context);
     }, Logger);
 }
        protected ModelUpdaterTestBase()
        {
            var coreControllerMock = new Mock <ICoreController>();

            CoreController = coreControllerMock.Object;

            CoreLink = new DummyModelResponseCoreLink();

            ModelDiffApplier = new DummyModelDiffApplier();

            m_modelUpdater = SetupModelUpdater();
        }
Exemplo n.º 4
0
        public async Task ConnectToCoreAsync(ICoreConnectionParams connectionParams)
        {
            EndPoint endPoint = connectionParams.EndPoint;

            if (CoreProxy != null)
            {
                Log.Error("Cannot connect to core, there is still a core proxy present");
                throw new InvalidOperationException(
                          "There is still a core proxy present");
            }

            if (connectionParams.IsCoreLocal)
            {
                if (m_process == null)
                {
                    await m_charmdRunner.StartIfNotRunningAndWaitAsync(
                        Path.Combine(connectionParams.CoreProcessParams.WorkingDirectory, CharmdRelativePath),
                        CharmdStartWaitMs);

                    // TODO(HonzaS): Move this elsewhere when we have finer local process control.
                    Log.Info("Starting a local core process");
                    m_process = m_coreProcessFactory.Create(connectionParams.CoreProcessParams);
                }

                endPoint = m_process.EndPoint;
            }

            if (endPoint == null)
            {
                Log.Error("Endpoint not set up, cannot connect to core");
                throw new InvalidOperationException("Endpoint not set");
            }

            m_isCoreLocal = connectionParams.IsCoreLocal;

            Log.Info("Connecting to Core running at {hostname:l}:{port}", endPoint.Hostname, endPoint.Port);
            ICoreLink coreLink = m_coreLinkFactory.Create(endPoint);
            // TODO(HonzaS): Check if the endpoint exists (handshake), await the response.


            // TODO(HonzaS): Move these inside the factory method.
            ICoreController coreController = m_coreControllerFactory.Create(coreLink);
            IModelUpdater   modelUpdater   = m_modelUpdaterFactory.Create(coreLink, coreController);

            CoreProxy = m_coreProxyFactory.Create(coreController, modelUpdater);

            RegisterCoreEvents();
        }
Exemplo n.º 5
0
        public override async Task UpdateEditorAsync(UpdateEditorContext context, IModelUpdater updater)
        {
            var testContentPart = context.Content.As <TestContentPartA>();

            if (testContentPart == null)
            {
                return;
            }

            if (await updater.TryUpdateModelAsync(testContentPart, ""))
            {
                context.Content.ContentItem.Weld(testContentPart);
            }

            return;
        }
Exemplo n.º 6
0
        public override async Task UpdateEditorAsync(UpdateEditorContext context, IModelUpdater updater)
        {
            var testContentPart = context.Content.As<TestContentPartA>();

            if (testContentPart == null)
            {
                return;
            }

            if(await updater.TryUpdateModelAsync(testContentPart, ""))
            {
                context.Content.ContentItem.Weld(testContentPart);
            }

            return;
        }
Exemplo n.º 7
0
        //TODO при запуске проверяет наличие миграций. Пока в топку
        //public static bool AllMigrationsApplied(this DbContext context)
        //{
        //    var applied = context.GetService<IHistoryRepository>()
        //        .GetAppliedMigrations()
        //        .Select(m => m.MigrationId);

        //    var total = context.GetService<IMigrationsAssembly>()
        //        .Migrations
        //        .Select(m => m.Key);

        //    return !total.Except(applied).Any();
        //}

        // Импровизированный Seed как в EF6
        public static void EnsureSeeded(this IModelUpdater context)
        {
            //Ensure we have some Roles
            if (!context.Roles.Any())
            {
                var roles = new List <RoleModel>()
                {
                    new RoleModel(Guid.NewGuid())
                    {
                        Name = "user", RolePermission = ";user;"
                    },
                    new RoleModel(Guid.NewGuid())
                    {
                        Name = "admin", RolePermission = ";admin;"
                    },
                };

                context.Roles.AddRange(roles);
                context.SaveChangesAsync();
            }
        }
Exemplo n.º 8
0
        public override async Task<DisplayResult> UpdateEditorAsync(UpdateEditorContext context, IModelUpdater updater)
        {
            var testContentPart = context.Content.As<TestContentPartA>();

            if (testContentPart == null)
            {
                return null;
            }

            if (await updater.TryUpdateModelAsync(testContentPart, ""))
            {
                if (testContentPart.Line.EndsWith(" "))
                {
                    updater.ModelState.AddModelError(nameof(testContentPart.Line), "Value cannot end with a space");
                }
                else
                {
                    context.Content.ContentItem.Weld(testContentPart);
                }
            }
            
            return Shape("TestContentPartA_Edit", testContentPart).Location("Content");
        }
Exemplo n.º 9
0
 public void WriteHeader(IModelUpdater worker)
 {
     Write("{0}", worker.GetType().Name);
 }
Exemplo n.º 10
0
        public CoreProxyTests()
        {
            var modelUpdaterMock = new Mock <IModelUpdater>();

            m_modelUpdater = modelUpdaterMock.Object;
        }
Exemplo n.º 11
0
 public CityUpdater(IModelUpdater context)
 {
     _context = context;
 }
Exemplo n.º 12
0
 public WorkshopUpdater(IModelUpdater context)
 {
     _context = context;
 }
Exemplo n.º 13
0
 public UserUpdater(IModelUpdater context)
 {
     _context = context;
 }
Exemplo n.º 14
0
 public ProjectUpdater(IModelUpdater context)
 {
     _context = context;
 }
Exemplo n.º 15
0
 public JobUpdater(IModelUpdater context)
 {
     _context = context;
 }
Exemplo n.º 16
0
        public async Task<dynamic> UpdateEditorAsync(IContent content, IModelUpdater updater, string groupInfoId)
        {
            if (content == null || content.ContentItem == null)
            {
                throw new ArgumentNullException(nameof(content));
            }

            var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(content.ContentItem.ContentType);
            JToken stereotype;
            if (!contentTypeDefinition.Settings.TryGetValue("Stereotype", out stereotype))
            {
                stereotype = "Content";
            }

            var actualShapeType = stereotype + "_Edit";

            dynamic itemShape = CreateContentShape(actualShapeType);
            itemShape.ContentItem = content.ContentItem;

            var theme = await _themeManager.GetThemeAsync();
            var shapeTable = _shapeTableManager.GetShapeTable(theme.Id);

            // adding an alternate for [Stereotype]_Edit__[ContentType] e.g. Content-Menu.Edit
            ((IShape)itemShape).Metadata.Alternates.Add(actualShapeType + "__" + content.ContentItem.ContentType);

            var context = new UpdateEditorContext(itemShape, content, groupInfoId, _shapeFactory);
            await BindPlacementAsync(context, null, stereotype.Value<string>());

            await _handlers.InvokeAsync(handler => handler.UpdateEditorAsync(context, updater), Logger);

            return context.Shape;
        }
Exemplo n.º 17
0
 public CustomerUpdater(IModelUpdater context, IMessagePublisher messagePublisher)
 {
     _messagePublisher = messagePublisher;
     _context          = context;
 }
Exemplo n.º 18
0
 public ICoreProxy Create(ICoreController controller, IModelUpdater modelUpdater)
 {
     return(InjectProperties(new CoreProxy(controller, modelUpdater)));
 }
Exemplo n.º 19
0
 public virtual Task UpdateEditorAsync(UpdateEditorContext context, IModelUpdater updater)
 {
     return(Task.CompletedTask);
 }
Exemplo n.º 20
0
        private ServiceTypeProvider()
        {
            var modelFactories = new IModelFactory[]
            {
                new SessionTimeFactory(),
                new MageKnightFactory(),
                new UserFactory(),
                new UserCollectionFactory(),
                new GameFactory(),
                new GamesFactory(),
                new DialFactory(),
                new StatFactory(),
                new ClickFactory(),
            };

            this.modelFactoryResolver = new ModelFactoryResolver(modelFactories);
            this.defaultModel         = new DefaultModel.DefaultModel(this.modelFactoryResolver);

            IEnumerable <IQueryFactory> queryFactories;

            queryFactories = new IQueryFactory[]
            {
                new SessionTimeQueryFactory(this.modelFactoryResolver, this.defaultModel),
                new MageKnightQueryFactory(this.modelFactoryResolver, this.defaultModel),
                new UserQueryFactory(this.modelFactoryResolver, this.defaultModel),
                new UserCollectionQueryFactory(this.modelFactoryResolver, this.defaultModel),
                new GameQueryFactory(this.modelFactoryResolver, this.defaultModel),
                new GamesQueryFactory(this.modelFactoryResolver, this.defaultModel),
                new DialQueryFactory(this.modelFactoryResolver, this.defaultModel),
                new ClickQueryFactory(this.modelFactoryResolver, this.defaultModel),
                new StatQueryFactory(this.modelFactoryResolver, this.defaultModel),
            };

            this.queryFactoryResolver = new QueryFactoryResolver(queryFactories);

            var modelUpdaters = new IModelUpdater[]
            {
                new SessionTimeChangedUpdater(this.modelFactoryResolver, this.defaultModel),
                new MageKnightChangedUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserChangedUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserCollectionAddedUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserInventoryAddUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserArmyAddUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserAddedMageToArmyUpdater(this.modelFactoryResolver, this.defaultModel),
                new GameChangedModelUpdater(this.modelFactoryResolver, this.defaultModel),
                new GamesChangedModelUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserSignUpUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserBoosterPackCountChangedUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserSignInUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserIsSignedInChangedUpdater(this.modelFactoryResolver, this.defaultModel),
                new GameJoinedUpdater(this.modelFactoryResolver, this.defaultModel),
                new MageKnightCoordinatesChangedUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserSelectedMageChangedUpdater(this.modelFactoryResolver, this.defaultModel),
                new UserAddedMageToInventoryUpdater(this.modelFactoryResolver, this.defaultModel),
            };

            this.modelUpdaterResolver = new ModelUpdaterResolver(modelUpdaters);

            var serverMessageHandlers = new IServerMessageHandler[]
            {
                new SessionTimeChangedHandler(this.modelUpdaterResolver),
                new MageKnightChangedHandler(this.modelUpdaterResolver),
                new UserChangedHandler(this.modelUpdaterResolver),
                new UserCollectionAddedHandler(this.modelUpdaterResolver),
                new UserInventoryAddHandler(this.modelUpdaterResolver),
                new UserAddedMageToArmyHandler(this.modelUpdaterResolver),
                new UserArmyAddHandler(this.modelUpdaterResolver),
                new GameChangedHandler(this.modelUpdaterResolver),
                new GamesChangedHandler(this.modelUpdaterResolver),
                new UserSignUpHandler(this.modelUpdaterResolver),
                new UserBoosterPackCountChangedHandler(this.modelUpdaterResolver),
                new UserSignInHandler(this.modelUpdaterResolver),
                new UserIsSignedInChangedHandler(this.modelUpdaterResolver),
                new GameJoinedHandler(this.modelUpdaterResolver),
                new MageKnightCoordinatesChangedHandler(this.modelUpdaterResolver),
                new UserSelectedMageChangedHandler(this.modelUpdaterResolver),
                new UserAddedMageToInventoryHandler(this.modelUpdaterResolver),
            };

            var serverMessageHandlerResolver = new ServerMessageHandlerResolver(serverMessageHandlers);

            this.QueryHandlerCollectionFactory = new QueryHandlerCollectionFactory(
                this.queryFactoryResolver,
                serverMessageHandlerResolver);

            this.serviceClient = new Lazy <IServiceClient>(
                this.CreateServiceClient,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.sessionTimeProxyFactory = new Lazy <ISessionTimeProxyFactory>(
                this.CreateSessionTimeProxyFactory,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.sessionTime = new Lazy <ISessionTime>(
                this.CreateSessionTime,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.mageKnightProxyFactory = new Lazy <IMageKnightModelProxyFactory>(
                this.CreateMageKnightProxyFactory,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.mageKnight = new Lazy <IMageKnightModel>(
                this.CreateMageKnight,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.userProxyFactory = new Lazy <IUserModelProxyFactory>(
                this.CreateUserProxyFactory,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.user = new Lazy <IUserModel>(
                this.CreateUser,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.userCollectionProxyFactory = new Lazy <IUserCollectionProxyFactory>(
                this.CreateUserCollectionProxyFactory,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.userCollection = new Lazy <IUserCollection>(
                this.CreateUserCollection,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.gameProxyFactory = new Lazy <IGameModelProxyFactory>(
                this.CreateGameProxyFactory,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.game = new Lazy <IGameModel>(
                this.CreateGame,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.gamesProxyFactory = new Lazy <IGamesModelProxyFactory>(
                this.CreateGamesProxyFactory,
                LazyThreadSafetyMode.ExecutionAndPublication);

            this.games = new Lazy <IGameModels>(
                this.CreateGames,
                LazyThreadSafetyMode.ExecutionAndPublication);
        }