@@ -20,7 +20,6 @@ internal class WebSocketWrapper
20
20
private const int ReceiveChunkSize = 1024 ;
21
21
private volatile ClientWebSocket WebSocket ;
22
22
private readonly Uri _uri ;
23
- private readonly object ReconnectLock = new object ( ) ;
24
23
private Action OnConnectedAction ;
25
24
private Action < byte [ ] > OnMessageAction ;
26
25
@@ -59,53 +58,52 @@ public async Task HandleOutgoingWS(CancellationToken token)
59
58
{
60
59
Logger . LogWarning ( "HandleOutgoingWS send failed ({0})" , e . Message ) ;
61
60
Logger . LogInformation ( "HandleOutgoingWS reconnecting" ) ;
62
- Reconnect ( token ) ;
61
+ await Reconnect ( token ) ;
63
62
}
64
63
}
65
64
}
66
65
//TODO dispose
67
66
Logger . LogTrace ( "HandleOutgoingWS task finished" ) ;
68
67
}
69
68
70
- public void Reconnect ( CancellationToken token )
69
+ public async Task Reconnect ( CancellationToken token )
71
70
{
72
- lock ( ReconnectLock )
71
+ if ( WebSocket . State == WebSocketState . Open )
73
72
{
74
- if ( WebSocket . State == WebSocketState . Open )
75
- return ;
73
+ return ;
74
+ }
76
75
77
- var tries = 0 ;
76
+ var tries = 0 ;
77
+ try
78
+ {
79
+ await WebSocket . CloseOutputAsync ( WebSocketCloseStatus . NormalClosure , "goodbye" , token ) ;
80
+ }
81
+ catch ( Exception )
82
+ {
83
+ Logger . LogTrace ( "could not close old websocket gracefully" ) ;
84
+ }
85
+ while ( true )
86
+ {
78
87
try
79
88
{
80
- WebSocket . CloseOutputAsync ( WebSocketCloseStatus . NormalClosure , "goodbye" , token ) . Wait ( ) ;
81
- }
82
- catch ( Exception )
83
- {
84
- Logger . LogTrace ( "could not close old websocket gracefully" ) ;
89
+ if ( token . IsCancellationRequested )
90
+ return ;
91
+ tries ++ ;
92
+ CreateSocket ( ) ;
93
+ await WebSocket . ConnectAsync ( _uri , token ) ;
94
+ break ;
85
95
}
86
- while ( true )
96
+ catch ( Exception e )
87
97
{
88
- try
89
- {
90
- if ( token . IsCancellationRequested )
91
- return ;
92
- tries ++ ;
93
- CreateSocket ( ) ;
94
- WebSocket . ConnectAsync ( _uri , token ) . Wait ( ) ;
95
- break ;
96
- }
97
- catch ( Exception e )
98
- {
99
- var delay_length = 15 ;
100
- if ( tries > 20 )
101
- delay_length = 60 * 5 ;
102
- else if ( tries > 10 )
103
- delay_length = 60 ;
104
- else if ( tries > 5 )
105
- delay_length = 30 ;
106
- Logger . LogWarning ( "Failed to reconnect ({0}). Retrying in {1} seconds" , e . Message , delay_length ) ;
107
- Task . Delay ( 1000 * delay_length , token ) . Wait ( ) ;
108
- }
98
+ var delay_length = 15 ;
99
+ if ( tries > 20 )
100
+ delay_length = 60 * 5 ;
101
+ else if ( tries > 10 )
102
+ delay_length = 60 ;
103
+ else if ( tries > 5 )
104
+ delay_length = 30 ;
105
+ Logger . LogWarning ( "Failed to reconnect ({0}). Retrying in {1} seconds" , e . Message , delay_length ) ;
106
+ await Task . Delay ( 1000 * delay_length , token ) ;
109
107
}
110
108
}
111
109
Logger . LogInformation ( "Successfully reconnected to the server" ) ;
@@ -146,7 +144,7 @@ public async Task HandleIncomingWS(CancellationToken token)
146
144
{
147
145
Logger . LogWarning ( "HandleIncomingWS recv failed ({0})" , e . Message ) ;
148
146
Logger . LogInformation ( "HandleIncomingWS reconnecting" ) ;
149
- Reconnect ( token ) ;
147
+ await Reconnect ( token ) ;
150
148
}
151
149
}
152
150
}
@@ -180,14 +178,8 @@ public async Task Connect(CancellationToken token)
180
178
Logger . LogTrace ( "Connect()" ) ;
181
179
try
182
180
{
183
- await Task . Run ( ( ) =>
184
- {
185
- lock ( ReconnectLock ) //TODO async lock
186
- {
187
- WebSocket . ConnectAsync ( _uri , token ) . Wait ( ) ;
188
- CallOnConnected ( ) ;
189
- }
190
- } ) ;
181
+ await WebSocket . ConnectAsync ( _uri , token ) ;
182
+ CallOnConnected ( ) ;
191
183
}
192
184
catch ( Exception e )
193
185
{
0 commit comments