Пример #1
0
        public async Task UpdateStatus_ConnectedEquipment_UpdateSynchronizedObject()
        {
            // arrange
            var testMic     = new EquipmentDevice("mic1", "Microphone", DeviceType.Mic);
            var testDevices = new List <EquipmentDevice> {
                testMic
            };

            var(user, equipmentHub) = await ConnectEquipment(testDevices);

            var update = new Dictionary <ProducerSource, UseMediaStateInfo>
            {
                { ProducerSource.Mic, new UseMediaStateInfo(true, true, false, null) }
            };

            // act
            await equipmentHub.InvokeAsync(nameof(EquipmentHub.UpdateStatus), update);

            // assert
            await user.SyncObjects.AssertSyncObject <SynchronizedEquipment>(
                SynchronizedEquipment.SyncObjId(user.User.Sub), syncObj =>
            {
                var connection = Assert.Single(syncObj.Connections).Value;
                Assert.Equal(update, connection.Status);
            });
        }
        public async Task Handle(EquipmentDisconnectedNotification notification, CancellationToken cancellationToken)
        {
            await _repository.RemoveConnection(notification.Participant, notification.ConnectionId);

            await _mediator.Send(new UpdateSynchronizedObjectRequest(notification.Participant.ConferenceId,
                                                                     SynchronizedEquipment.SyncObjId(notification.Participant.Id)));
        }
Пример #3
0
        public async Task InitializeEquipment_MultipleDevicesSameId_UpdateSynchronizedObject()
        {
            // arrange
            var testMic     = new EquipmentDevice("mic1", "Microphone", DeviceType.Mic);
            var testMic2    = new EquipmentDevice("mic1", "Webcam", DeviceType.Webcam);
            var testDevices = new List <EquipmentDevice> {
                testMic, testMic2
            };

            var(user, _) = await ConnectEquipment(testDevices);

            // assert
            await user.SyncObjects.AssertSyncObject <SynchronizedEquipment>(
                SynchronizedEquipment.SyncObjId(user.User.Sub), syncEquipment =>
            {
                var connection = Assert.Single(syncEquipment.Connections);
                AssertHelper.AssertScrambledEquals(testDevices, connection.Value.Devices);
            });
        }
Пример #4
0
        public async Task Disconnect_EquipmentConnected_RemoveFromSynchronizedObject()
        {
            // arrange
            var testDevices = Array.Empty <EquipmentDevice>();

            var(user, equipmentHub) = await ConnectEquipment(testDevices);

            await user.SyncObjects.AssertSyncObject <SynchronizedEquipment>(
                SynchronizedEquipment.SyncObjId(user.User.Sub),
                syncEquipment => { Assert.Single(syncEquipment.Connections); });

            // act
            await equipmentHub.DisposeAsync();

            // assert
            await user.SyncObjects.AssertSyncObject <SynchronizedEquipment>(
                SynchronizedEquipment.SyncObjId(user.User.Sub),
                syncEquipment => { Assert.Empty(syncEquipment.Connections); });
        }
Пример #5
0
        public async Task <Unit> Handle(InitializeEquipmentRequest request, CancellationToken cancellationToken)
        {
            var connection = new EquipmentConnection(request.ConnectionId, request.Name, request.Devices,
                                                     ImmutableDictionary <ProducerSource, UseMediaStateInfo> .Empty);

            await _repository.SetConnection(request.Participant, connection);

            var isJoined = await _mediator.Send(new CheckIsParticipantJoinedRequest(request.Participant));

            if (!isJoined)
            {
                await _repository.RemoveConnection(request.Participant, connection.ConnectionId);

                throw EquipmentError.ParticipantNotJoined.ToException();
            }

            await _mediator.Send(new UpdateSynchronizedObjectRequest(request.Participant.ConferenceId,
                                                                     SynchronizedEquipment.SyncObjId(request.Participant.Id)));

            return(Unit.Value);
        }
Пример #6
0
        public async Task InitializeEquipment_WithValidToken_UpdateSynchronizedObject()
        {
            // arrange
            var testMic     = new EquipmentDevice("mic1", "Microphone", DeviceType.Mic);
            var testDevices = new List <EquipmentDevice> {
                testMic
            };

            var(user, _) = await ConnectEquipment(testDevices);

            // assert
            await user.SyncObjects.AssertSyncObject <SynchronizedEquipment>(
                SynchronizedEquipment.SyncObjId(user.User.Sub), syncEquipment =>
            {
                var connection = Assert.Single(syncEquipment.Connections);
                Assert.Equal(EquipmentName, connection.Value.Name);
                Assert.Empty(connection.Value.Status);
                var actualDevice = Assert.Single(connection.Value.Devices);

                Assert.Equal(testMic, actualDevice);
            });
        }
Пример #7
0
        public async Task <Unit> Handle(UpdateStatusRequest request, CancellationToken cancellationToken)
        {
            var(participant, connectionId, status) = request;

            var connection = await _repository.GetConnection(participant, connectionId);

            if (connection == null)
            {
                throw EquipmentError.NotInitialized.ToException();
            }

            var updatedConnection = connection with {
                Status = status
            };
            await _repository.SetConnection(participant, updatedConnection);

            await _mediator.Send(new UpdateSynchronizedObjectRequest(participant.ConferenceId,
                                                                     SynchronizedEquipment.SyncObjId(participant.Id)));

            return(Unit.Value);
        }
    }