コード例 #1
0
        public void Enumerable()
        {
            var source  = manager.Create("Name", user, AudioSourceTests.GetTestSource().CodecSettings);
            var source2 = manager.Create("Name2", user, AudioSourceTests.GetTestSource().CodecSettings);

            Assert.Contains(source, handler.ToList());
            Assert.Contains(source2, handler.ToList());
        }
コード例 #2
0
        internal void RequestSourceMessage(MessageEventArgs <RequestSourceMessage> e)
        {
            var request = (RequestSourceMessage)e.Message;

            SourceResult result = SourceResult.FailedUnknown;

            IUserInfo requestingUser = context.Users[e.Connection];

            if (requestingUser == null)
            {
                return;
            }

            if (!context.GetPermission(PermissionName.RequestSource, requestingUser))
            {
                result = SourceResult.FailedPermissions;
            }

            if (String.IsNullOrEmpty(request.Name) ||
                AudioCodecArgs.IsInvalidBitrate(request.AudioSettings.Bitrate) ||
                AudioCodecArgs.IsInvalidComplexity(request.AudioSettings.Complexity) ||
                AudioCodecArgs.IsInvalidFrequency(request.AudioSettings.SampleRate) ||
                AudioCodecArgs.IsInvalidFrameSize(request.AudioSettings.SampleRate, request.AudioSettings.Channels, request.AudioSettings.FrameSize))
            {
                result = SourceResult.FailedInvalidArguments;
            }

            AudioSource source = null;

            try
            {
                if (result == SourceResult.FailedUnknown)
                {
                    int bitrate = context.Settings.DefaultAudioBitrate;
                    if (request.AudioSettings.Bitrate != 0)
                    {
                        bitrate = request.AudioSettings.Bitrate.Trim(context.Settings.MinimumAudioBitrate, context.Settings.MaximumAudioBitrate);
                    }

                    if (manager.IsSourceNameTaken(requestingUser, request.Name))
                    {
                        result = SourceResult.FailedDuplicateSourceName;
                    }
                    else
                    {
                        source = manager.Create(request.Name, requestingUser,
                                                new AudioCodecArgs(request.AudioSettings)
                        {
                            Bitrate = bitrate
                        });
                        result = SourceResult.Succeeded;
                    }
                }
            }
            catch (OverflowException)
            {
                result = SourceResult.FailedLimit;
            }
            finally
            {
                e.Connection.SendAsync(new SourceResultMessage(request.Name, result, source));
                if (result == SourceResult.Succeeded)
                {
                    foreach (IConnection connection in context.Connections)
                    {
                        if (connection == e.Connection)
                        {
                            continue;
                        }

                        connection.SendAsync(new SourceResultMessage(request.Name, SourceResult.NewSource, source));
                    }
                }
            }
        }