public PeerServices(ulong messageTag,
                     ulong livenessMessageTag,
                     string networkName,
                     string networkProtocolName,
                     int listeningBufferSize,
                     ILoggerFactory loggerFactory,
                     IExternalAccessDiscoverer discoverer,
                     SocketFactory socketFactory,
                     int inactivityTimeoutInMinutes,
                     int maxConcurrentConnections)
 {
     if (messageTag == livenessMessageTag)
     {
         throw new ArgumentException($"{nameof(livenessMessageTag)} (value: {livenessMessageTag}) must be different from {nameof(messageTag)} (value: {messageTag})! ");
     }
     MessageTag                 = messageTag;
     LivenessMessageTag         = livenessMessageTag;
     NetworkName                = networkName.Required(nameof(networkName));
     NetworkProtocolName        = networkProtocolName.Required(nameof(networkProtocolName));
     ListeningBufferSize        = Math.Max(512, listeningBufferSize);
     InactivityTimeoutInMinutes = Math.Max(inactivityTimeoutInMinutes, 0);
     _loggerFactory             = loggerFactory.Required(nameof(loggerFactory));
     _discoverer                = discoverer.Required(nameof(discoverer));
     _socketFactory             = socketFactory.Required(nameof(socketFactory));
     _knownNodes                = new ConcurrentDictionary <string, (string address, int port, bool retain)>();
     _clients = new ConcurrentDictionary <string, IConnection>();
     _logger  = LoggerNamed(nameof(PeerServices));
     MaxConcurrentConnections = Math.Max(maxConcurrentConnections, 0);
 }
 public TestListenerForPeer(TestSocket testSocket, INodeSink nodeSink, IExternalAccessDiscoverer discoverer, CancellationTokenSource source, ILogger logger) : base(nodeSink, discoverer, source, logger)
     => _testSocket = new SingleUseSocket(testSocket, _source);
 public ListenerForPeer(INodeSink nodeSink, IExternalAccessDiscoverer discoverer, CancellationTokenSource source, ILogger logger)
     : base(nodeSink.NodeId, nodeSink, source, logger)
     => (_nodeSink, _socket, _route) = DetermineExternalAccess(nodeSink.Required(nameof(nodeSink)), discoverer.Required(nameof(discoverer)));