public ITransport MakeTransport() { switch (_options.TransportType) { case SinkTransportType.Udp: { var ipAddress = Task.Run(() => GetIpAddress(_options.HostnameOrAddress)).GetAwaiter().GetResult(); var ipEndpoint = new IPEndPoint(ipAddress ?? throw new InvalidOperationException(), _options.Port); var chunkSettings = new ChunkSettings(_options.MessageGeneratorType, _options.MaxMessageSizeInUdp); IDataToChunkConverter chunkConverter = new DataToChunkConverter(chunkSettings, new MessageIdGeneratorResolver()); var udpClient = new UdpTransportClient(ipEndpoint); var udpTransport = new UdpTransport(udpClient, chunkConverter); return(udpTransport); } case SinkTransportType.Http: { var httpClient = new HttpTransportClient($"{_options.HostnameOrAddress}:{_options.Port}/gelf"); var httpTransport = new HttpTransport(httpClient); return(httpTransport); } case SinkTransportType.Tcp: { var ipAddress = Task.Run(() => GetIpAddress(_options.HostnameOrAddress)).GetAwaiter().GetResult(); var tcpClient = new TcpTransportClient(ipAddress, _options.Port); Task.Run(() => tcpClient.Connect()).GetAwaiter().GetResult(); var transport = new TcpTransport(tcpClient); return(transport); } default: throw new ArgumentOutOfRangeException(nameof(_options), _options.TransportType, null); } }