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); }
public MessageFixture() { c = new Commit(); nv = new NewView(); p = new Prepare(); pp = new PrePrepare(); vc = new ViewChange(); }
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); } }); }
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); }
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); }
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); }
private void ViewSync(ViewChange viewChange) { ServerSessionManager.ViewSynchronizer.GetAtlas(viewChange.AtlasIndex); }