Example #1
0
        public async Task UpdateViewTest()
        {
            IEntity entity = await GetNewRoleAsync();

            var position = Cluster.GrainFactory.GetGrain <IComponent <PositionState> >(entity.GetPrimaryKey());
            var observer = Cluster.GrainFactory.GetGrain <IObserver>(entity.GetPrimaryKey());
            await position.SetData(new PositionState(100f, 100f));

            IEntity testEntity = await GetNewRoleAsync();

            await testEntity.Enable();

            await testEntity.Add <IComponent <PositionState> >();

            await Cluster.GrainFactory.GetGrain <IComponent <PositionState> >(testEntity.GetPrimaryKey())
            .SetData(new PositionState(100f, 100.5f));

            await Task.Delay(100);

            ViewChange viewChange = await observer.UpdateView();

            Assert.NotNull(viewChange.EntityChange);
            Assert.NotEmpty(viewChange.EntityChange);
            Assert.Contains(viewChange.EntityChange, e => e.MaxSpeed != null && e.Hp != null);
        }
Example #2
0
 public MessageFixture()
 {
     c  = new Commit();
     nv = new NewView();
     p  = new Prepare();
     pp = new PrePrepare();
     vc = new ViewChange();
 }
Example #3
0
 private FileMetadata CreateFileMetadata(ViewChange viewChange)
 {
     return(new FileMetadata
     {
         Id = viewChange.id,
         Name = viewChange.name,
         IsFolder = viewChange.folder != null
     });
 }
        public void StartSync(RpcServer server)
        {
            Task.Run(
                () =>
            {
                while (true)
                {
                    var sessions = server.Sessions.Where(s => s.IsSet <Action <ViewChange> >()).ToArray();
                    Logger.Info($"Start updating {sessions.Length} clients");
                    foreach (IRpcSession session in sessions)
                    {
                        ViewChange viewChange =
                            GrainFactory.Get <IObserver>(session.Get <IEntity>()).UpdateView().Result;
                        session.Get <Action <ViewChange> >()(viewChange);
                    }

                    Thread.Sleep(50);
                }
            });
        }
Example #5
0
        public async Task <ViewChange> UpdateView()
        {
            var viewChange = new ViewChange();

            var entities = await Task.WhenAll(
                Entities.Select(
                    async e =>
            {
                var dto    = new EntityDto();
                var entity = GrainFactory.GetGrain <IEntity>(e);

                dto.Name = await entity.GetName();

                return(dto);
            }));

            Entities.Clear();

            viewChange.EntityChange = entities;

            return(viewChange);
        }
Example #6
0
        public async Task <ViewChange> UpdateView()
        {
            PositionState position = await GrainFactory.Get <IPosition>(this).GetData();

            var viewChange = new ViewChange
            {
                Position   = position,
                AtlasIndex = position.Tile.DivDown(SyncOptions.Value.ChunkSize)
            };

            if (await GrainFactory.GetEntity(this).Has <IUnit>())
            {
                viewChange.Speed = await GrainFactory.Get <IUnit>(this).GetMoveSpeed();
            }

            var entities = await Task.WhenAll(Entities.Select(ToEntityDto));

            Entities.Clear();

            viewChange.EntityChange = entities;

            return(viewChange);
        }
Example #7
0
        public async Task <ViewChange> UpdateView()
        {
            Position position = await GrainFactory.Get <IPosition>(this).GetData();

            var viewChange = new ViewChange
            {
                Position   = position,
                AtlasIndex = position.Tile.DivDown(SyncOptions.Value.ChunkSize)
            };

            if (await GrainFactory.GetEntity(this).Has <IUnit>())
            {
                viewChange.Speed = (await GrainFactory.Get <IUnit>(this).GetData()).MoveSpeed;
            }

            var entities = await Task.WhenAll(
                Entities.Select(
                    async e =>
            {
                var entity = GrainFactory.GetGrain <IEntity>(e);
                var dto    = new EntityDto
                {
                    Name = await entity.GetName(),
                    Pos  = await GrainFactory.Get <IPosition>(e).GetData(),
                    Id   = e
                };

                return(dto);
            }));

            Entities.Clear();

            viewChange.EntityChange = entities;

            return(viewChange);
        }
Example #8
0
 private void ViewSync(ViewChange viewChange)
 {
     ServerSessionManager.ViewSynchronizer.GetAtlas(viewChange.AtlasIndex);
 }