11using Microsoft . Extensions . Logging ;
2- using Microsoft . Extensions . Options ;
32using NetCoreStack . WebSockets . Interfaces ;
43using NetCoreStack . WebSockets . Internal ;
54using System ;
109
1110namespace NetCoreStack . WebSockets . ProxyClient
1211{
13- internal class ClientWebSocketConnector : IWebSocketConnector
12+ public abstract class ClientWebSocketConnector : IWebSocketConnector
1413 {
1514 private string _connectionId ;
1615 private ClientWebSocket _webSocket ;
16+ private readonly IServiceProvider _serviceProvider ;
1717 private readonly IStreamCompressor _compressor ;
1818 private readonly ILoggerFactory _loggerFactory ;
19- private readonly InvocatorRegistry _invocatorRegistry ;
2019
2120 public string ConnectionId
2221 {
@@ -37,44 +36,42 @@ public WebSocketState WebSocketState
3736 }
3837 }
3938
40- public ProxyOptions Options { get ; }
41-
42- public ClientWebSocketConnector ( IOptions < ProxyOptions > options ,
43- IStreamCompressor compressor ,
44- InvocatorRegistry invocatorRegistry ,
39+ public ClientWebSocketConnector ( IServiceProvider serviceProvider ,
40+ IStreamCompressor compressor ,
4541 ILoggerFactory loggerFactory )
4642 {
43+ _serviceProvider = serviceProvider ;
4744 _compressor = compressor ;
48- _invocatorRegistry = invocatorRegistry ;
4945 _loggerFactory = loggerFactory ;
50- Options = options . Value ;
5146 }
5247
48+ protected abstract InvocatorContext CreateInvocatorContext ( ) ;
49+
5350 private async Task TryConnectAsync ( CancellationTokenSource cancellationTokenSource = null )
5451 {
55- var name = Options . ConnectorName ;
56- var uri = new Uri ( $ "ws://{ Options . WebSocketHostAddress } ") ;
52+ var invocatorContext = CreateInvocatorContext ( ) ;
53+ var uri = new Uri ( $ "ws://{ invocatorContext . HostAddress } ") ;
5754 _webSocket = new ClientWebSocket ( ) ;
58- _webSocket . Options . SetRequestHeader ( SocketsConstants . ConnectorName , Options . ConnectorName ) ;
55+ _webSocket . Options . SetRequestHeader ( SocketsConstants . ConnectorName , invocatorContext . ConnectorName ) ;
5956 try
6057 {
6158 CancellationToken token = cancellationTokenSource != null ? cancellationTokenSource . Token : CancellationToken . None ;
6259 await _webSocket . ConnectAsync ( uri , CancellationToken . None ) ;
6360 }
6461 catch ( Exception ex )
6562 {
66- ProxyLogHelper . Log ( _loggerFactory , Options , "Error" , ex ) ;
63+ ProxyLogHelper . Log ( _loggerFactory , invocatorContext , "Error" , ex ) ;
6764 return ;
6865 }
66+
6967 var receiverContext = new WebSocketReceiverContext
7068 {
7169 Compressor = _compressor ,
72- InvocatorRegistry = _invocatorRegistry ,
70+ InvocatorContext = invocatorContext ,
7371 LoggerFactory = _loggerFactory ,
74- Options = Options ,
7572 WebSocket = _webSocket
7673 } ;
77- var receiver = new WebSocketReceiver ( receiverContext , Close , ( connectionId ) => {
74+ var receiver = new WebSocketReceiver ( _serviceProvider , receiverContext , Close , ( connectionId ) => {
7875 _connectionId = connectionId ;
7976 } ) ;
8077 await receiver . ReceiveAsync ( ) ;
@@ -93,7 +90,8 @@ public async Task ConnectAsync(CancellationTokenSource cancellationTokenSource =
9390 }
9491 catch ( Exception ex )
9592 {
96- ProxyLogHelper . Log ( _loggerFactory , Options , "Error" , ex ) ;
93+ var invocatorContext = CreateInvocatorContext ( ) ;
94+ ProxyLogHelper . Log ( _loggerFactory , invocatorContext , "Error" , ex ) ;
9795 }
9896
9997 if ( WebSocketState == WebSocketState . Open )
0 commit comments