Ejemplo n.º 1
0
        public async Task TalkingStick_Race_PresenterLeaves_RemoveScene()
        {
            // arrange
            var(conn, conference) = await ConnectToOpenedConference();

            AssertSuccess(await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetScene),
                                                                              new TalkingStickScene(TalkingStickMode.Race)));

            var pleb     = CreateUser();
            var plebConn = await ConnectUserToConference(pleb, conference);

            AssertSuccess(await plebConn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.TalkingStickTake)));
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.Equal(syncObj.SceneStack, new IScene[]
                {
                    new TalkingStickScene(TalkingStickMode.Race), new PresenterScene(pleb.Sub),
                    new ActiveSpeakerScene(),
                });
            });

            // act
            await plebConn.Hub.DisposeAsync();

            // assert
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.Equal(syncObj.SceneStack, new IScene[]
                {
                    new TalkingStickScene(TalkingStickMode.Race),
                });
            });
        }
Ejemplo n.º 2
0
        public async Task TalkingStick_Race_ParticipantsTakeStick_MakePresenter()
        {
            // arrange
            var(conn, conference) = await ConnectToOpenedConference();

            AssertSuccess(await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetScene),
                                                                              new TalkingStickScene(TalkingStickMode.Race)));

            var pleb     = CreateUser();
            var plebConn = await ConnectUserToConference(pleb, conference);

            // act
            AssertSuccess(await plebConn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.TalkingStickTake)));

            // assert
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.Equal(syncObj.SceneStack, new IScene[]
                {
                    new TalkingStickScene(TalkingStickMode.Race), new PresenterScene(pleb.Sub),
                    new ActiveSpeakerScene(),
                });
            });

            await plebConn.SyncObjects.AssertSyncObject <SynchronizedParticipantPermissions>(
                SynchronizedParticipantPermissions.SyncObjId(pleb.Sub),
                permissions =>
            {
                Assert.Contains(permissions.Permissions,
                                x => Equals(x, DefinedPermissions.Scenes.CanOverwriteContentScene.Configure(true)));
            });
        }
Ejemplo n.º 3
0
        public async Task TalkingStick_Queue_Enqueue_MakePresenter()
        {
            // arrange
            var(conn, conference) = await ConnectToOpenedConference();

            AssertSuccess(await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetScene),
                                                                              new TalkingStickScene(TalkingStickMode.Queue)));

            var pleb     = CreateUser();
            var plebConn = await ConnectUserToConference(pleb, conference);

            // act
            AssertSuccess(await plebConn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.TalkingStickEnqueue)));

            // assert
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.Equal(syncObj.SceneStack, new IScene[]
                {
                    new TalkingStickScene(TalkingStickMode.Queue), new PresenterScene(pleb.Sub),
                    new ActiveSpeakerScene(),
                });
            });

            await conn.SyncObjects.AssertSyncObject <SynchronizedSceneTalkingStick>(
                SynchronizedSceneTalkingStick.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.Equal(pleb.Sub, syncObj.CurrentSpeakerId);
                Assert.Empty(syncObj.SpeakerQueue);
            });
        }
Ejemplo n.º 4
0
        public async Task TalkingStick_Moderated_PassToParticipant_MakePresenter()
        {
            // arrange
            var(conn, conference) = await ConnectToOpenedConference();

            AssertSuccess(await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetScene),
                                                                              new TalkingStickScene(TalkingStickMode.Moderated)));

            var pleb = CreateUser();

            await ConnectUserToConference(pleb, conference);

            await conn.SyncObjects.AssertSyncObject <SynchronizedRooms>(SynchronizedRooms.SyncObjId,
                                                                        participants => Assert.Equal(2, participants.Participants.Count));

            // act
            AssertSuccess(await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.TalkingStickPass), pleb.Sub));

            // assert
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.Equal(syncObj.SceneStack, new IScene[]
                {
                    new TalkingStickScene(TalkingStickMode.Moderated), new PresenterScene(pleb.Sub),
                    new ActiveSpeakerScene(),
                });
            });

            await conn.SyncObjects.AssertSyncObject <SynchronizedSceneTalkingStick>(
                SynchronizedSceneTalkingStick.SyncObjId(RoomOptions.DEFAULT_ROOM_ID),
                syncObj => { Assert.Equal(pleb.Sub, syncObj.CurrentSpeakerId); });
        }
Ejemplo n.º 5
0
        public async ValueTask <IEnumerable <PermissionLayer> > FetchPermissionsForParticipant(Participant participant)
        {
            var rooms = await _mediator.FetchSynchronizedObject <SynchronizedRooms>(participant.ConferenceId,
                                                                                    SynchronizedRooms.SyncObjId);

            if (!rooms.Participants.TryGetValue(participant.Id, out var roomId))
            {
                return(Enumerable.Empty <PermissionLayer>());
            }

            var permissions = new List <PermissionLayer>();

            var scenes = await _mediator.FetchSynchronizedObject <SynchronizedScene>(participant.ConferenceId,
                                                                                     SynchronizedScene.SyncObjId(roomId));

            foreach (var scene in scenes.SceneStack)
            {
                var provider    = FindProviderForScene(scene);
                var sceneLayers = await provider.FetchPermissionsForParticipant(scene, participant, scenes.SceneStack);

                permissions.AddRange(sceneLayers);
            }

            return(permissions);
        }
Ejemplo n.º 6
0
        public async ValueTask InvalidateTalkingSceneWithLockAcquired(string conferenceId, string roomId)
        {
            var scenes =
                await _mediator.FetchSynchronizedObject <SynchronizedScene>(conferenceId,
                                                                            SynchronizedScene.SyncObjId(roomId));

            var talkingStickScene = GetTalkingStickScene(scenes);

            if (talkingStickScene == null)
            {
                return;
            }

            var rooms = await _mediator.FetchSynchronizedObject <SynchronizedRooms>(conferenceId,
                                                                                    SynchronizedRooms.SyncObjId);

            var currentSpeaker = await _repository.GetCurrentSpeaker(conferenceId, roomId);

            currentSpeaker = await VerifyCurrentSpeakerInRoom(currentSpeaker, roomId, rooms);

            if (currentSpeaker == null)
            {
                await ElectNewCurrentSpeaker(conferenceId, roomId, rooms, talkingStickScene.Mode);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Causes this ped to start performing the specified <see cref="SynchronizedScene"/>
        /// </summary>
        /// <param name="ped">The target ped</param>
        /// <param name="duration">in second</param>
        /// <param name="flag">can be 0 or 16</param>
        /// <returns></returns>
        public static Rage.Task StartSynchronizedScene(this Ped ped, SynchronizedScene synchronizedScene, AnimationDictionary animDictionary, string animationName, float speed, float speedMultiplier, int duration, int flag, float playbackRate)
        {
            animDictionary.LoadAndWait();
            uint handle = synchronizedScene.Handle;

            NativeWrappers.TaskSynchronizedScene(ped, handle, animDictionary, animationName, speed, speedMultiplier, duration, flag, playbackRate, 0);
            return(Rage.Task.GetTask(ped, "TASK_SYNCHRONIZED_SCENE"));
        }
Ejemplo n.º 8
0
 public static bool HasSceneStackChanged(SynchronizedScene current, SynchronizedScene?previous)
 {
     if (previous == null)
     {
         return(true);
     }
     return(!current.SceneStack.SequenceEqual(previous.SceneStack));
 }
Ejemplo n.º 9
0
        public void HasSceneStackChanged_PreviousNull_ReturnTrue()
        {
            // arrange
            var current = new SynchronizedScene(AutonomousScene.Instance, null, ImmutableList <IScene> .Empty,
                                                ImmutableList <IScene> .Empty);

            SynchronizedScene?previous = null;

            // act
            var result = SceneUtilities.HasSceneStackChanged(current, previous);

            // assert
            Assert.True(result);
        }
Ejemplo n.º 10
0
        public async Task JoinToRoom_DoNothing_SynchronizeAvailableScenes()
        {
            // arrange
            var(conn, _) = await ConnectToOpenedConference();

            // assert
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.NotEmpty(syncObj.AvailableScenes);
                Assert.Equal(AutonomousScene.Instance, syncObj.SelectedScene);
                Assert.Equal(DefaultSceneStack, syncObj.SceneStack);
            });
        }
Ejemplo n.º 11
0
        public async Task SetScene_MakePresenter_UpdateSceneStack()
        {
            // arrange
            var(conn, _) = await ConnectToOpenedConference();

            // act
            await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetScene),
                                                                new PresenterScene(conn.User.Sub));

            // assert
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID),
                syncObj => Assert.Equal(new IScene[] { new PresenterScene(conn.User.Sub), ActiveSpeakerScene.Instance },
                                        syncObj.SceneStack));
        }
Ejemplo n.º 12
0
        public void HasSceneStackChanged_NotChanged_ReturnFalse()
        {
            // arrange
            var current = new SynchronizedScene(AutonomousScene.Instance, null, ImmutableList <IScene> .Empty,
                                                new IScene[] { AutonomousScene.Instance, GridScene.Instance });

            var previous = new SynchronizedScene(GridScene.Instance, null, ImmutableList <IScene> .Empty,
                                                 new IScene[] { AutonomousScene.Instance, GridScene.Instance });

            // act
            var result = SceneUtilities.HasSceneStackChanged(current, previous);

            // assert
            Assert.False(result);
        }
Ejemplo n.º 13
0
        public async Task OpenBreakoutRooms_Joined_BreakoutRoomSceneBecomesAvailable()
        {
            // arrange
            var(conn, _) = await ConnectToOpenedConference();

            await conn.SyncObjects.AssertSyncObject(SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID),
                                                    (SynchronizedScene syncObj) =>
                                                    Assert.DoesNotContain(syncObj.AvailableScenes, x => x is BreakoutRoomScene));

            // act
            AssertSuccess(await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.OpenBreakoutRooms),
                                                                              new OpenBreakoutRoomsDto(5, null, null, null)));

            // assert
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID),
                syncObj => Assert.Contains(syncObj.AvailableScenes, x => x is BreakoutRoomScene));
        }
Ejemplo n.º 14
0
        public async Task SetScene_SceneIsAvailable_UpdateSynchronizedObject()
        {
            // arrange
            var(conn, _) = await ConnectToOpenedConference();

            // act
            var result = await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetScene), GridScene.Instance);

            // assert
            AssertSuccess(result);

            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.Equal(GridScene.Instance, syncObj.SelectedScene);
                Assert.Single(syncObj.SceneStack, GridScene.Instance);
            });
        }
Ejemplo n.º 15
0
        public async Task SetScene_SceneIsNotAvailable_DontChangeCurrentScene()
        {
            // arrange
            var(conn, _) = await ConnectToOpenedConference();

            var current =
                await conn.SyncObjects.WaitForSyncObj <SynchronizedScene>(
                    SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID));

            // act
            await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetScene), new ScreenShareScene("5342"));

            // assert

            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID),
                syncObj => Assert.Equal(current.SceneStack, syncObj.SceneStack));
        }
Ejemplo n.º 16
0
        public async Task SetOverwrittenScene_SceneIsNotAvailable_DontSetScene()
        {
            // arrange
            var(conn, _) = await ConnectToOpenedConference();

            // act
            var result = await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetOverwrittenScene),
                                                                             new ScreenShareScene("1235"));

            // assert
            AssertSuccess(result);

            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID), syncObj =>
            {
                Assert.Null(syncObj.OverwrittenContent);
                Assert.Equal(syncObj.SceneStack, DefaultSceneStack);
            });
        }
Ejemplo n.º 17
0
        public async Task <Unit> Handle(UpdateScenesRequest request, CancellationToken cancellationToken)
        {
            var(conferenceId, roomId) = request;

            await using (await _sceneRepository.LockScene(conferenceId, roomId))
            {
                var scene = await _sceneRepository.GetScene(conferenceId, roomId);

                scene ??= SynchronizedSceneProvider.GetDefaultActiveScene();

                var state = await _sceneRepository.GetSceneState(conferenceId, roomId);

                state ??= SynchronizedSceneProvider.GetEmptySceneState();

                await ApplyScene(conferenceId, roomId, scene, state);
            }

            await _mediator.Send(
                new UpdateSynchronizedObjectRequest(conferenceId, SynchronizedScene.SyncObjId(roomId)));

            return(Unit.Value);
        }
Ejemplo n.º 18
0
        public async Task CloseBreakoutRooms_BreakoutRoomIsCurrentScene_RemoveCurrentScene()
        {
            // arrange
            var(conn, _) = await ConnectToOpenedConference();

            // act
            AssertSuccess(await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.OpenBreakoutRooms),
                                                                              new OpenBreakoutRoomsDto(5, null, null, null)));

            AssertSuccess(
                await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SetScene), BreakoutRoomScene.Instance));

            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID),
                syncObj => Assert.Equal(BreakoutRoomScene.Instance, syncObj.SelectedScene));

            AssertSuccess(await conn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.CloseBreakoutRooms)));

            // assert
            await conn.SyncObjects.AssertSyncObject <SynchronizedScene>(
                SynchronizedScene.SyncObjId(RoomOptions.DEFAULT_ROOM_ID),
                syncObj => Assert.Equal(AutonomousScene.Instance, syncObj.SelectedScene));
        }
Ejemplo n.º 19
0
        public static void Command_SynchronizedSceneTest()
        {
            if (BenchThreadActivated)
            {
                return;
            }
            GameFiber.StartNew(delegate
            {
                BenchThreadActivated        = true;
                SynchronizedScene syncScene = null;
                List <uint> benchHash       = new List <uint>()
                {
                    0x6ba514ac, //prop_bench_01a
                    0x7977b051, //prop_bench_01b
                    0xb78a2c75, //prop_bench_01c
                    0xda867f80, //prop_bench_02
                    0xc0a6cbcd, //prop_bench_03
                    0xd2786f70, //prop_bench_04
                    0x9ec80810, //prop_bench_05
                    0xb17ead7d, //prop_bench_06
                    0xfbbe41fb, //prop_bench_07
                    0xe7ed1a59, //prop_bench_08
                    0xfa11bea2, //prop_bench_09
                    0x1a117fd1, //prop_bench_10
                    0x4cece57b, //prop_bench_11
                    0xfbca504f, //prop_fib_3b_bench
                    0x723e2ae0, //prop_ld_bench01
                    0x0ff3a92b, //prop_wait_bench_01
                    0x5515a05a, //v_res_fh_benchlong
                    0x883cb2e8, //v_res_fh_benchshort
                    0xbac3f7a8, //v_ind_rc_bench
                    0x90aa8a87, //hei_heist_stn_benchshort
                };
                Rage.Object bench           = null;
                int benchStatus             = 0;
                Vector3 benchInitialPos     = Vector3.Zero;
                Vector3 sitPos              = Vector3.Zero;
                Rage.Task closeTask         = null;
                string sitStr               = Game.GetLocalizedString("MPTV_WALK"); //Press ~INPUT_CONTEXT~ to sit down.
                string standUpStr           = Game.GetLocalizedString("MPOFSEAT_PCEXIT");
                string[] benchIdles         = { "idle_a", "idle_b", "idle_c" };
                AnimationDictionary seating = Game.LocalPlayer.Character.IsMale ? "anim@amb@office@seating@male@var_a@base@" : "anim@amb@office@seating@female@var_d@base@";
                seating.LoadAndWait();
                while (true)
                {
                    GameFiber.Yield();
                    if (Game.LocalPlayer.Character.IsInAnyVehicle(false) || Game.LocalPlayer.Character.IsDead || Game.IsPaused || Game.Console.IsOpen || Game.IsScreenFadingOut)
                    {
                        continue;
                    }
                    switch (benchStatus)
                    {
                    case 0:
                        Entity[] objs = World.GetEntities(Game.LocalPlayer.Character.Position, 2f, GetEntitiesFlags.ConsiderAllObjects).ToArray();
                        bench         = (Rage.Object)objs.Where(x => x && benchHash.Contains(x.Model.Hash)).OrderBy(x => Vector3.DistanceSquared(x.Position, Game.LocalPlayer.Character)).FirstOrDefault();
                        if (!bench)
                        {
                            break;
                        }
                        Game.DisplayHelp(sitStr, 100);
                        if (Game.IsControlPressed(2, GameControl.Context))
                        {
                            benchStatus = 1;
                        }
                        break;

                    case 1:
                        sitPos          = bench.Position + bench.RightVector * 0.85f;
                        benchInitialPos = sitPos + bench.ForwardVector * -1;
                        closeTask       = Game.LocalPlayer.Character.Tasks.FollowNavigationMeshToPosition(benchInitialPos, bench.Heading - 180, 1f, 10000);
                        benchStatus     = 2;
                        break;

                    case 2:
                        if (closeTask.Status == TaskStatus.InProgress)
                        {
                            break;
                        }
                        syncScene = new SynchronizedScene(sitPos, bench.Rotation);
                        synchronizedScenes.Add(syncScene);
                        syncScene.TaskToPed(Game.LocalPlayer.Character, seating, "enter", 13);
                        benchStatus = 3;
                        break;

                    case 3:
                        if (syncScene.Phase != 1f)
                        {
                            break;
                        }
                        syncScene = new SynchronizedScene(sitPos, bench.Rotation);
                        synchronizedScenes.Add(syncScene);
                        syncScene.TaskToPed(Game.LocalPlayer.Character, seating, "base", 13, playbackRate: 1148846080);
                        benchStatus = 4;
                        break;

                    case 4:
                        Game.DisplayHelp(standUpStr, 100);
                        if (Game.IsControlPressed(2, GameControl.ScriptRRight))
                        {
                            benchStatus = 5;
                        }
                        if (syncScene.Phase != 1f)
                        {
                            break;
                        }
                        syncScene = new SynchronizedScene(sitPos, bench.Rotation);
                        synchronizedScenes.Add(syncScene);
                        syncScene.TaskToPed(Game.LocalPlayer.Character, seating, benchIdles.GetRandomElement(), 13, playbackRate: 1148846080);
                        benchStatus = 3;
                        break;

                    case 5:
                        syncScene = new SynchronizedScene(sitPos, bench.Rotation);
                        synchronizedScenes.Add(syncScene);
                        syncScene.TaskToPed(Game.LocalPlayer.Character, seating, "exit", 13, playbackRate: 1000f);
                        benchStatus = 6;
                        break;

                    case 6:
                        if (syncScene.Phase != 1f)
                        {
                            break;
                        }
                        Game.LocalPlayer.Character.Tasks.Clear();
                        synchronizedScenes.ForEach(x =>
                        {
                            if (x.IsValid())
                            {
                                x.Delete();
                            }
                        });
                        synchronizedScenes = new List <SynchronizedScene>();
                        benchStatus        = 0;
                        break;
                    }
                }
            });
        }
Ejemplo n.º 20
0
 private TalkingStickScene?GetTalkingStickScene(SynchronizedScene scenes)
 {
     return(scenes.SceneStack.OfType <TalkingStickScene>().LastOrDefault());
 }
Ejemplo n.º 21
0
        public async Task JoinRoom_DoNothing_HasSceneStack()
        {
            // arrange
            await Mediator.Send(new OpenConferenceRequest(ConferenceId));

            // act
            await JoinParticipant(TestData.Sven);

            // assert
            var scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(TestData.Sven.Participant,
                                                                                              SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(SynchronizedSceneProvider.GetDefaultScene(), scenes.SelectedScene);
            Assert.Equal(DefaultSceneStack, scenes.SceneStack);
            Assert.Null(scenes.OverwrittenContent);
            Assert.NotNull(scenes.AvailableScenes);
        }
Ejemplo n.º 22
0
        public async Task SetSceneRequest_InvalidScene_UpdateSynchronizedObject()
        {
            // arrange
            await Mediator.Send(new OpenConferenceRequest(ConferenceId));

            await JoinParticipant(TestData.Sven);

            var scene = new ScreenShareScene("some participant");

            // act
            await Mediator.Send(new SetSceneRequest(ConferenceId, DefaultRoomId, scene));

            // assert
            var scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(TestData.Sven.Participant,
                                                                                              SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(DefaultSceneStack, scenes.SceneStack);
        }
Ejemplo n.º 23
0
        public async Task SetOverwrittenContentSceneRequest_ValidScene_UpdateSynchronizedObject()
        {
            // arrange
            await Mediator.Send(new OpenConferenceRequest(ConferenceId));

            await JoinParticipant(TestData.Sven);

            var scene = ActiveSpeakerScene.Instance;

            // act
            await Mediator.Send(new SetOverwrittenContentSceneRequest(ConferenceId, DefaultRoomId, scene));

            // assert
            var scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(TestData.Sven.Participant,
                                                                                              SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(DefaultSceneStack.Concat(new[] { ActiveSpeakerScene.Instance }), scenes.SceneStack);
            Assert.Equal(scene, scenes.OverwrittenContent);
        }
Ejemplo n.º 24
0
        public async Task SetSceneRequest_BreakoutRoomsClosed_RevertToOverwrittenScene()
        {
            // arrange
            await Mediator.Send(new OpenConferenceRequest(ConferenceId));

            await JoinParticipant(TestData.Sven);

            await Mediator.Send(new OpenBreakoutRoomsRequest(5, null, null, null, ConferenceId));

            await Mediator.Send(new SetSceneRequest(ConferenceId, DefaultRoomId, BreakoutRoomScene.Instance));

            await Mediator.Send(new SetOverwrittenContentSceneRequest(ConferenceId, DefaultRoomId, GridScene.Instance));

            var scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(TestData.Sven.Participant,
                                                                                              SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(new IScene[] { BreakoutRoomScene.Instance, GridScene.Instance }, scenes.SceneStack);

            // act
            await Mediator.Send(new CloseBreakoutRoomsRequest(ConferenceId));

            // assert
            scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(TestData.Sven.Participant,
                                                                                          SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(GridScene.Instance, scenes.SelectedScene);
            Assert.Null(scenes.OverwrittenContent);

            Assert.Equal(new IScene[] { GridScene.Instance }, scenes.SceneStack);
        }
Ejemplo n.º 25
0
        public async Task ConferenceChanged_DefaultSceneSelected_UpdateSynchronizedObject()
        {
            // arrange
            await Mediator.Send(new OpenConferenceRequest(ConferenceId));

            await JoinParticipant(TestData.Sven);

            var scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(TestData.Sven.Participant,
                                                                                              SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(DefaultSceneStack, scenes.SceneStack);

            // act
            var patchResult = await Mediator.Send(new PatchConferenceRequest(ConferenceId,
                                                                             new JsonPatchDocument <ConferenceData>().Add(x => x.Configuration.Scenes.DefaultScene,
                                                                                                                          SceneOptions.BasicSceneType.ActiveSpeaker)));

            Assert.True(patchResult.Success);

            // assert
            scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(TestData.Sven.Participant,
                                                                                          SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(new IScene[] { AutonomousScene.Instance, ActiveSpeakerScene.Instance }, scenes.SceneStack);
        }
Ejemplo n.º 26
0
        private void AssertSceneStack(Participant participant, params IScene[] expectedStack)
        {
            var scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(participant,
                                                                                              SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(expectedStack, scenes.SceneStack);
        }
Ejemplo n.º 27
0
        public async Task SetScene_SetToTalkingStick_UpdateSynchronizedObject()
        {
            // arrange
            await Mediator.Send(new OpenConferenceRequest(ConferenceId));

            await JoinParticipant(TestData.Sven);

            var talkingStickScene = new TalkingStickScene(TalkingStickMode.Queue);

            // act
            await Mediator.Send(new SetSceneRequest(ConferenceId, DefaultRoomId, talkingStickScene));

            // assert
            var scenes = SynchronizedObjectListener.GetSynchronizedObject <SynchronizedScene>(TestData.Sven.Participant,
                                                                                              SynchronizedScene.SyncObjId(DefaultRoomId));

            Assert.Equal(talkingStickScene, scenes.SelectedScene);
            Assert.Equal(new[] { talkingStickScene }, scenes.SceneStack);
        }