コード例 #1
0
        public void Should_map_conference_event_to_callback_event()
        {
            var testConference = new Conference
            {
                Id           = Guid.NewGuid(),
                HearingId    = Guid.NewGuid(),
                Participants = new List <Participant>()
                {
                    Builder <Participant> .CreateNew()
                    .With(x => x.Role = Role.Judge).With(x => x.Id = Guid.NewGuid())
                    .Build(),
                    Builder <Participant> .CreateNew().With(x => x.Role = Role.Individual)
                    .With(x => x.Id = Guid.NewGuid()).Build(),
                    Builder <Participant> .CreateNew().With(x => x.Role = Role.Representative)
                    .With(x => x.Id = Guid.NewGuid()).Build(),
                    Builder <Participant> .CreateNew().With(x => x.Role = Role.Individual)
                    .With(x => x.Id = Guid.NewGuid()).Build(),
                    Builder <Participant> .CreateNew().With(x => x.Role = Role.Representative)
                    .With(x => x.Id = Guid.NewGuid()).Build()
                }
            };
            var conferenceEventRequest = Builder <ConferenceEventRequest> .CreateNew()
                                         .With(x => x.Conference_id  = testConference.Id.ToString())
                                         .With(x => x.Participant_id = testConference.Participants[0].Id.ToString())
                                         .With(x => x.Event_type     = EventType.Joined)
                                         .Build();

            var result =
                CallbackEventMapper.MapConferenceEventToCallbackEventModel(conferenceEventRequest, testConference);

            result.Should().NotBeNull();
            result.TransferFrom.Should().Be(conferenceEventRequest.Transfer_from);
            result.TransferTo.Should().Be(conferenceEventRequest.Transfer_to);
        }
コード例 #2
0
        public void should_map_callback_to_endpoint_transferred()
        {
            var testConference = CreateTestConferenceForEndpointEvent();

            var conferenceEventRequest = Builder <ConferenceEventRequest> .CreateNew()
                                         .With(x => x.Conference_id  = testConference.Id.ToString())
                                         .With(x => x.Participant_id = testConference.Endpoints[0].Id.ToString())
                                         .With(x => x.Event_type     = EventType.Transfer)
                                         .Build();

            var result =
                CallbackEventMapper.MapConferenceEventToCallbackEventModel(conferenceEventRequest, testConference);

            result.Should().NotBeNull();
            result.EventType.Should().Be(EventType.EndpointTransfer);
        }
コード例 #3
0
        public async Task <IActionResult> UpdateParticipantStatusAsync(Guid conferenceId,
                                                                       UpdateParticipantStatusEventRequest updateParticipantStatusEventRequest)
        {
            var conference = await _conferenceCache.GetOrAddConferenceAsync(conferenceId, () =>
            {
                _logger.LogTrace($"Retrieving conference details for conference: ${conferenceId}");

                return(_videoApiClient.GetConferenceDetailsByIdAsync(conferenceId));
            });

            var username               = User.Identity.Name;
            var participantId          = GetIdForParticipantByUsernameInConference(conference, username);
            var conferenceEventRequest = new ConferenceEventRequest
            {
                Conference_id  = conferenceId.ToString(),
                Participant_id = participantId.ToString(),
                Event_id       = Guid.NewGuid().ToString(),
                Event_type     = updateParticipantStatusEventRequest.EventType,
                Time_stamp_utc = DateTime.UtcNow,
                Reason         = EventTypeReasonMapper.Map(updateParticipantStatusEventRequest.EventType)
            };

            var callbackEvent =
                CallbackEventMapper.MapConferenceEventToCallbackEventModel(conferenceEventRequest, conference);
            var handler = _eventHandlerFactory.Get(callbackEvent.EventType);

            try
            {
                await handler.HandleAsync(callbackEvent);
            }
            catch (ConferenceNotFoundException)
            {
                return(BadRequest());
            }

            try
            {
                await _videoApiClient.RaiseVideoEventAsync(conferenceEventRequest);

                return(NoContent());
            }
            catch (VideoApiException e)
            {
                return(StatusCode(e.StatusCode, e.Response));
            }
        }
コード例 #4
0
        public async Task <IActionResult> SendHearingEventAsync(ConferenceEventRequest request)
        {
            try
            {
                _logger.LogTrace("Received callback from Kinly.");
                _logger.LogTrace($"ConferenceId: {request.Conference_id}, EventType: {request.Event_type}, Participant ID : {request.Participant_id}");

                var conferenceId = Guid.Parse(request.Conference_id);
                var conference   = await _conferenceCache.GetOrAddConferenceAsync(conferenceId, () =>
                {
                    _logger.LogTrace($"Retrieving conference details for conference: ${conferenceId}");
                    return(_videoApiClient.GetConferenceDetailsByIdAsync(conferenceId));
                });

                var callbackEvent = CallbackEventMapper.MapConferenceEventToCallbackEventModel(request, conference);
                request.Event_type = Enum.Parse <VAEventType>(callbackEvent.EventType.ToString());
                if (callbackEvent.EventType != EventType.VhoCall)
                {
                    _logger.LogTrace($"Raising video event: ConferenceId: {request.Conference_id}, EventType: {request.Event_type}");
                    await _videoApiClient.RaiseVideoEventAsync(request);
                }

                if (!string.IsNullOrEmpty(request.Phone))
                {
                    return(NoContent());
                }

                var handler = _eventHandlerFactory.Get(callbackEvent.EventType);
                await handler.HandleAsync(callbackEvent);

                return(NoContent());
            }
            catch (VideoApiException e)
            {
                _logger.LogError(e, $"ConferenceId: {request.Conference_id}, ErrorCode: {e.StatusCode}");
                return(StatusCode(e.StatusCode, e.Response));
            }
        }