< Summary

Information
Class: IceRpc.Transports.Internal.DefaultMultiplexedServerTransport
Assembly: IceRpc
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc/Transports/Internal/DefaultMultiplexedServerTransport.cs
Tag: 1321_24790053727
Line coverage
77%
Covered lines: 17
Uncovered lines: 5
Coverable lines: 22
Total lines: 62
Line coverage: 77.2%
Branch coverage
58%
Covered branches: 7
Total branches: 12
Branch coverage: 58.3%
Method coverage
100%
Covered methods: 6
Fully covered methods: 2
Total methods: 6
Method coverage: 100%
Full method coverage: 33.3%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_DefaultName()100%11100%
get_Instance()50%7671.42%
.cctor()100%11100%
.ctor()100%11100%
Listen(...)100%11100%
Resolve()66.66%8662.5%

File(s)

/home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc/Transports/Internal/DefaultMultiplexedServerTransport.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using IceRpc.Transports.Quic;
 4using IceRpc.Transports.Slic;
 5using IceRpc.Transports.Tcp;
 6using System.Net.Security;
 7using System.Runtime.Versioning;
 8
 9namespace IceRpc.Transports.Internal;
 10
 11/// <summary>Implements <see cref="IMultiplexedServerTransport" /> using two multiplexed transports: QUIC and
 12/// Slic over TCP.</summary>
 13internal class DefaultMultiplexedServerTransport : IMultiplexedServerTransport
 14{
 15    /// <inheritdoc/>
 316    public string DefaultName => _quicTransport.DefaultName;
 17
 18    internal static DefaultMultiplexedServerTransport Instance
 19    {
 20        get
 1021        {
 1022            if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS() || OperatingSystem.IsWindows())
 1023            {
 1024                return _instance;
 25            }
 026            throw new PlatformNotSupportedException(
 027                "The default multiplexed server transport, QUIC, is only available on Linux, macOS, and Windows.");
 1028        }
 29    }
 30
 31    [SupportedOSPlatform("linux")]
 32    [SupportedOSPlatform("macos")]
 33    [SupportedOSPlatform("windows")]
 134    private static readonly DefaultMultiplexedServerTransport _instance = new();
 35
 36    private readonly IMultiplexedServerTransport _quicTransport;
 137    private readonly IMultiplexedServerTransport _tcpTransport = new SlicServerTransport(new TcpServerTransport());
 38
 39    /// <inheritdoc/>
 40    public IListener<IMultiplexedConnection> Listen(
 41        TransportAddress transportAddress,
 42        MultiplexedConnectionOptions options,
 43        SslServerAuthenticationOptions? serverAuthenticationOptions)
 544    {
 545        return Resolve(transportAddress.TransportName).Listen(transportAddress, options, serverAuthenticationOptions);
 46
 47        IMultiplexedServerTransport Resolve(string? transportName) =>
 548            transportName switch
 549            {
 050                null => _quicTransport,
 451                "quic" => _quicTransport,
 152                "tcp" => _tcpTransport,
 053                _ => throw new NotSupportedException(
 054                    $"The default multiplexed server transport does not support transport '{transportName}'.")
 555            };
 556    }
 57
 58    [SupportedOSPlatform("linux")]
 59    [SupportedOSPlatform("macos")]
 60    [SupportedOSPlatform("windows")]
 261    private DefaultMultiplexedServerTransport() => _quicTransport = new QuicServerTransport();
 62}