コード例 #1
0
        public static IEnumerable <string> GetParticipantIdsSubscribedTo(
            IReadOnlyDictionary <string, IReadOnlyList <string>?> subscriptions,
            SynchronizedObjectId synchronizedObjectId)
        {
            var idString = synchronizedObjectId.ToString();

            return(subscriptions.Where(x => x.Value?.Contains(idString) == true).Select(x => x.Key));
        }
コード例 #2
0
        private async ValueTask SendCurrentSynchronizedObjectValue(Participant participant,
                                                                   SynchronizedObjectId syncObjId)
        {
            var value = await _mediator.Send(new FetchSynchronizedObjectRequest(participant.ConferenceId, syncObjId));

            await _mediator.Publish(new SynchronizedObjectUpdatedNotification(participant.Yield().ToImmutableList(),
                                                                              syncObjId.ToString(), value, null));
        }
コード例 #3
0
 public static void SetupSyncObj <T>(this Mock <IMediator> mediator, SynchronizedObjectId syncObjId, T syncObj)
     where T : notnull
 {
     mediator.Setup(x =>
                    x.Send(
                        It.Is <FetchSynchronizedObjectRequest>(request =>
                                                               request.SyncObjId.ToString().Equals(syncObjId.ToString())), It.IsAny <CancellationToken>()))
     .ReturnsAsync(syncObj);
 }
コード例 #4
0
        private ISynchronizedObjectProvider GetProvider(SynchronizedObjectId synchronizedObjectId)
        {
            var provider = _providers.FirstOrDefault(x => x.Id == synchronizedObjectId.Id);

            if (provider == null)
            {
                throw new InvalidOperationException($"There was no provider registered for {synchronizedObjectId.Id}.");
            }

            return(provider);
        }
コード例 #5
0
 public static bool TryParseChatChannel(string s, [NotNullWhen(true)] out ChatChannel?channel)
 {
     try
     {
         channel = ChannelSerializer.Decode(SynchronizedObjectId.Parse(s));
         return(true);
     }
     catch (Exception)
     {
         channel = null;
         return(false);
     }
 }
コード例 #6
0
        protected override async ValueTask <SynchronizedChat> InternalFetchValue(string conferenceId,
                                                                                 SynchronizedObjectId synchronizedObjectId)
        {
            var conference = await _mediator.Send(new FindConferenceByIdRequest(conferenceId));

            if (!conference.Configuration.Chat.ShowTyping)
            {
                return(new SynchronizedChat(ImmutableDictionary <string, bool> .Empty));
            }

            var participantsTyping =
                await _chatRepository.GetAllParticipantsTyping(conferenceId, synchronizedObjectId.ToString());

            return(new SynchronizedChat(participantsTyping.ToImmutableDictionary(x => x, _ => true)));
        }
コード例 #7
0
        protected override async ValueTask <SynchronizedPoll> InternalFetchValue(string conferenceId,
                                                                                 SynchronizedObjectId synchronizedObjectId)
        {
            var pollId = synchronizedObjectId.Parameters[PROP_POLL_ID];

            var poll = await _repository.GetPoll(conferenceId, pollId);

            if (poll == null)
            {
                return(GetDefaultSynchronizedPoll(pollId));
            }

            var state = await _repository.GetPollState(conferenceId, pollId) ?? PollState.Default;

            return(new SynchronizedPoll(pollId, poll.Instruction, poll.Config, state, poll.CreatedOn));
        }
コード例 #8
0
ファイル: ChannelSerializer.cs プロジェクト: Anapher/Strive
        public static ChatChannel Decode(SynchronizedObjectId channel)
        {
            var typeString = channel.Parameters[PROP_TYPE];
            var type       = StringToChannelType(typeString);

            switch (type)
            {
            case ChatChannelType.Global:
                return(GlobalChatChannel.Instance);

            case ChatChannelType.Room:
                return(new RoomChatChannel(channel.Parameters["roomId"]));

            case ChatChannelType.Private:
                return(new PrivateChatChannel(new HashSet <string>
                {
                    channel.Parameters["p1"], channel.Parameters["p2"],
                }));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #9
0
        protected override async ValueTask <SynchronizedEquipment> InternalFetchValue(string conferenceId,
                                                                                      SynchronizedObjectId synchronizedObjectId)
        {
            var participantId     = synchronizedObjectId.Parameters[SynchronizedEquipment.PROP_PARTICIPANT_ID];
            var joinedParticipant = new Participant(conferenceId, participantId);

            var connections = await _repository.GetConnections(joinedParticipant);

            return(new SynchronizedEquipment(connections));
        }
コード例 #10
0
 public static async Task <T> FetchSynchronizedObject <T>(this IMediator mediator, string conferenceId,
                                                          SynchronizedObjectId id) where T : class
 {
     return((T)await mediator.Send(new FetchSynchronizedObjectRequest(conferenceId, id)));
 }
コード例 #11
0
        protected override async ValueTask <SynchronizedPollAnswers> InternalFetchValue(string conferenceId,
                                                                                        SynchronizedObjectId synchronizedObjectId)
        {
            var participantId = synchronizedObjectId.Parameters[PROP_PARTICIPANT_ID];

            var conferencePolls = await _repository.GetPollsOfConference(conferenceId);

            var answers = await _repository.GetPollAnswersOfParticipant(new Participant(conferenceId, participantId),
                                                                        conferencePolls.Select(x => x.Id));

            return(new SynchronizedPollAnswers(answers.ToDictionary(x => x.Key, x => x.Value)));
        }
コード例 #12
0
        protected override async ValueTask <SynchronizedPollResult> InternalFetchValue(string conferenceId,
                                                                                       SynchronizedObjectId synchronizedObjectId)
        {
            var pollId = synchronizedObjectId.Parameters[PROP_POLL_ID];

            var result = await _mediator.Send(new FetchPollResultsRequest(conferenceId, pollId));

            return(new SynchronizedPollResult(pollId, result.Results, result.ParticipantsAnswered,
                                              result.TokenIdToParticipant));
        }