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); }
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"]); } }