示例#1
0
        public static IServiceProvider CreateServiceProvider(
            AppSettingsModel settings,
            Action <global::Serilog.LoggerConfiguration> loggerConfigureAction)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            var loggerFactory = LoggerConfiguration.CreateLoggerFactory(settings.LogLevel, loggerConfigureAction);

            return(ClientServiceConfiguration.CreateServiceProvider(
                       new IPEndPoint(IPAddress.Loopback, settings.ListenPort),
                       loggerFactory,
                       serviceCollection =>
            {
                switch (settings.Mode)
                {
                case ClientMode.Simple:
                    serviceCollection.AddTransient <IDatagramInterceptor, PassthroughInterceptor>();
                    return;

                case ClientMode.UdpRandomFirstSessionPrefix:
                    if (!(settings.DatagramInterceptorSettings is RandomFirstSessionPrefixInterceptor.Settings
                          interceptorSettings))
                    {
                        interceptorSettings = new RandomFirstSessionPrefixInterceptor.Settings();
                        settings.DatagramInterceptorSettings = interceptorSettings;
                    }

                    serviceCollection.AddSingleton(interceptorSettings);
                    serviceCollection.AddTransient <IDatagramInterceptor, RandomFirstSessionPrefixInterceptor>();
                    return;
        public async Task Random_packets_sent_only_before_first_packet_to_first_destination()
        {
            var settings = new RandomFirstSessionPrefixInterceptor.Settings {
                CountMin = 2, CountMax = 2
            };
            var interceptor = new RandomFirstSessionPrefixInterceptor(this._bufferPool, settings, new NullLoggerFactory());
            var client      = new FakeUdpClient();

            var destinationEndPoint = FakeEndPoints.CreateRemote();

            var payload = new ArraySegment <byte>(new byte[] { 1, 2, 3, 4 });
            var isSendingHandledByInterceptor = await interceptor
                                                .TryInterceptOutgoingAsync(payload, destinationEndPoint, client)
                                                .ConfigureAwait(true);

            isSendingHandledByInterceptor.Should().BeFalse();

            payload = new ArraySegment <byte>(new byte[] { 5, 6, 7, 8 });
            isSendingHandledByInterceptor = await interceptor
                                            .TryInterceptOutgoingAsync(payload, destinationEndPoint, client)
                                            .ConfigureAwait(true);

            isSendingHandledByInterceptor.Should().BeFalse();

            var packets = client.WaitForSentPackets(2);

            packets[0].Packet.Length.Should().BeInRange(settings.BytesMin, settings.BytesMax);
            packets[1].Packet.Length.Should().BeInRange(settings.BytesMin, settings.BytesMax);
        }
示例#3
0
        void HandleModePickerSelectedIndexChanged(object sender, EventArgs e)
        {
            var picker       = (Picker)sender;
            var selectedMode = (ClientMode)picker.SelectedItem;

            this.UdpInterceptorSection.Clear();

            var currentSettings = this.ViewModel.AppSettings.DatagramInterceptorSettings;

            object newSettingsInstance;

            switch (selectedMode)
            {
            case ClientMode.UdpRandomFirstSessionPrefix:
                newSettingsInstance = new RandomFirstSessionPrefixInterceptor.Settings();
                break;

            default:
                newSettingsInstance = null;
                break;
            }

            if (newSettingsInstance == null)
            {
                currentSettings = this.ViewModel.AppSettings.DatagramInterceptorSettings = null;
            }
            else if (currentSettings == null || currentSettings.GetType() != newSettingsInstance.GetType())
            {
                currentSettings = this.ViewModel.AppSettings.DatagramInterceptorSettings = newSettingsInstance;
            }

            if (currentSettings != null)
            {
                foreach (var section in TableSectionGenerator.GenerateSettingsFormCells(currentSettings))
                {
                    this.UdpInterceptorSection.Add(section);
                }
            }

            if (this.UdpInterceptorSection.Count == 0)
            {
                this.UdpInterceptorSection.Add((Cell)this.Settings.Resources["NoSettingsAvailableCell"]);
            }
        }