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.GetValueOrDefault(12201));


                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 builder = new UriBuilder(_options.HostnameOrAddress)
                {
                    Port = _options.Port.GetValueOrDefault(12201),
                    Path = "gelf"
                };

                var httpClient = new HttpTransportClient(builder.Uri.ToString());

                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.GetValueOrDefault(12201), _options.UseSsl ? _options.HostnameOrAddress : null);
                var transport = new TcpTransport(tcpClient);
                return(transport);
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(_options), _options.TransportType, null);
            }
        }
        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);
            }
        }