@@ -15,24 +15,38 @@ public StaticConnectionPool(IEnumerable<Uri> uris, bool randomize = true, IDateT
1515 : this ( uris . Select ( uri => new Node ( uri ) ) , randomize , dateTimeProvider ) { }
1616
1717 public StaticConnectionPool ( IEnumerable < Node > nodes , bool randomize = true , IDateTimeProvider dateTimeProvider = null )
18- : this ( nodes , null , dateTimeProvider ) => Randomize = randomize ;
18+ {
19+ nodes . ThrowIfEmpty ( nameof ( nodes ) ) ;
20+ Randomize = randomize ;
21+ Initialize ( nodes , dateTimeProvider ) ;
22+ }
1923
2024 //this constructor is protected because nodeScorer only makes sense on subclasses that support reseeding
2125 //otherwise just manually sort `nodes` before instantiating.
2226 protected StaticConnectionPool ( IEnumerable < Node > nodes , Func < Node , float > nodeScorer , IDateTimeProvider dateTimeProvider = null )
2327 {
2428 nodes . ThrowIfEmpty ( nameof ( nodes ) ) ;
25- DateTimeProvider = dateTimeProvider ?? Net . DateTimeProvider . Default ;
29+ _nodeScorer = nodeScorer ;
30+ Initialize ( nodes , dateTimeProvider ) ;
31+ }
2632
27- var nn = nodes . ToList ( ) ;
28- var uris = nn . Select ( n => n . Uri ) . ToList ( ) ;
29- if ( uris . Select ( u => u . Scheme ) . Distinct ( ) . Count ( ) > 1 )
30- throw new ArgumentException ( "Trying to instantiate a connection pool with mixed URI Schemes" ) ;
33+ private void Initialize ( IEnumerable < Node > nodes , IDateTimeProvider dateTimeProvider )
34+ {
35+ DateTimeProvider = dateTimeProvider ?? Net . DateTimeProvider . Default ;
3136
32- UsingSsl = uris . Any ( uri => uri . Scheme == "https" ) ;
37+ string scheme = null ;
38+ foreach ( var node in nodes )
39+ {
40+ if ( scheme == null )
41+ {
42+ scheme = node . Uri . Scheme ;
43+ UsingSsl = scheme == "https" ;
44+ }
45+ else if ( scheme != node . Uri . Scheme )
46+ throw new ArgumentException ( "Trying to instantiate a connection pool with mixed URI Schemes" ) ;
47+ }
3348
34- _nodeScorer = nodeScorer ;
35- InternalNodes = SortNodes ( nn )
49+ InternalNodes = SortNodes ( nodes )
3650 . DistinctBy ( n => n . Uri )
3751 . ToList ( ) ;
3852 LastUpdate = DateTimeProvider . Now ( ) ;
@@ -57,7 +71,7 @@ protected StaticConnectionPool(IEnumerable<Node> nodes, Func<Node, float> nodeSc
5771 public virtual bool SupportsReseeding => false ;
5872
5973 /// <inheritdoc />
60- public bool UsingSsl { get ; }
74+ public bool UsingSsl { get ; private set ; }
6175
6276 protected List < Node > AliveNodes
6377 {
@@ -70,7 +84,7 @@ protected List<Node> AliveNodes
7084 }
7185 }
7286
73- protected IDateTimeProvider DateTimeProvider { get ; }
87+ protected IDateTimeProvider DateTimeProvider { get ; private set ; }
7488
7589 protected List < Node > InternalNodes { get ; set ; }
7690 protected Random Random { get ; } = new Random ( ) ;
0 commit comments