@@ -95,22 +95,21 @@ static void Beat([NotNull] SchedulerTask scheduledTask)
9595
9696 static HttpWebRequest heartBeatRequest ;
9797
98- static void SendHeartBeat ( )
99- {
98+ static void SendHeartBeat ( ) {
10099 HeartbeatData data = new HeartbeatData ( HeartbeatServerUrl ) ;
101- if ( ! RaiseHeartbeatSendingEvent ( data , HeartbeatServerUrl ) )
102- {
100+ if ( ! RaiseHeartbeatSendingEvent ( data , HeartbeatServerUrl ) ) {
103101 return ;
104102 }
103+
105104 try {
106105 heartBeatRequest = CreateRequest ( data . CreateUri ( ) ) ;
107- } catch ( Exception UriFormatException ) {
108- Logger . Log ( LogType . Debug , UriFormatException . ToString ( ) ) ;
109- return ;
110- }
111- var state = new HeartbeatRequestState ( heartBeatRequest , data ) ;
112- heartBeatRequest . BeginGetResponse ( ResponseCallback , state ) ;
106+ } catch ( Exception UriFormatException ) {
107+ Logger . Log ( LogType . Debug , UriFormatException . ToString ( ) ) ;
108+ return ;
109+ }
113110
111+ var state = new HeartbeatRequestState ( heartBeatRequest , data ) ;
112+ heartBeatRequest . BeginGetResponse ( ResponseCallback , state ) ;
114113 }
115114
116115
@@ -125,18 +124,15 @@ public static HttpWebRequest CreateRequest([NotNull] Uri uri) {
125124
126125
127126 // Called when the heartbeat server responds.
128- static void ResponseCallback ( [ NotNull ] IAsyncResult result )
129- {
127+ static void ResponseCallback ( [ NotNull ] IAsyncResult result ) {
130128 if ( Server . IsShuttingDown ) return ;
131129 HeartbeatRequestState state = ( HeartbeatRequestState ) result . AsyncState ;
132- try
133- {
130+
131+ try {
134132 string responseText ;
135- using ( HttpWebResponse response = ( HttpWebResponse ) state . Request . EndGetResponse ( result ) )
136- {
133+ using ( HttpWebResponse response = ( HttpWebResponse ) state . Request . EndGetResponse ( result ) ) {
137134 // ReSharper disable AssignNullToNotNullAttribute
138- using ( StreamReader responseReader = new StreamReader ( response . GetResponseStream ( ) ) )
139- {
135+ using ( StreamReader responseReader = new StreamReader ( response . GetResponseStream ( ) ) ) {
140136 // ReSharper restore AssignNullToNotNullAttribute
141137 responseText = responseReader . ReadToEnd ( ) ;
142138 }
@@ -145,43 +141,43 @@ static void ResponseCallback([NotNull] IAsyncResult result)
145141
146142 // try parse response as server Url, if needed
147143 string replyString = responseText . Trim ( ) ;
148- if ( replyString . CaselessStarts ( "bad heartbeat" ) )
149- {
150- Logger . Log ( LogType . Error , "Heartbeat: {0}" , replyString ) ;
151- }
152- else
153- {
154- try
155- {
156- Uri newUri = new Uri ( replyString ) ;
157- Uri oldUri = Url ;
158- if ( newUri != oldUri )
159- {
160- Url = newUri ;
161- RaiseUriChangedEvent ( oldUri , newUri ) ;
162- }
163- }
164- catch ( UriFormatException )
165- {
166- Logger . Log ( LogType . Error ,
167- "Heartbeat: Server replied with: {0}" ,
168- replyString ) ;
144+ ParseHeartbeatResponse ( replyString ) ;
145+ } catch ( Exception ex ) {
146+ LogHeartbeatError ( state , ex ) ;
147+ }
148+ }
149+
150+ static void ParseHeartbeatResponse ( string replyString ) {
151+ if ( replyString . CaselessStarts ( "bad heartbeat" ) ) {
152+ Logger . Log ( LogType . Error , "Heartbeat: {0}" , replyString ) ;
153+ } else {
154+ try {
155+ Uri newUri = new Uri ( replyString ) ;
156+ Uri oldUri = Url ;
157+ if ( newUri != oldUri ) {
158+ Url = newUri ;
159+ RaiseUriChangedEvent ( oldUri , newUri ) ;
169160 }
161+ } catch ( UriFormatException ) {
162+ Logger . Log ( LogType . Error , "Heartbeat: Server replied with: {0}" , replyString ) ;
170163 }
171164 }
172- catch ( Exception ex )
173- {
174- if ( ex is WebException || ex is IOException )
175- {
176- Logger . Log ( LogType . Warning ,
177- "Heartbeat: {0} is probably down ({1})" ,
178- state . Request . RequestUri . Host ,
179- ex . Message ) ;
180- }
181- else
182- {
183- Logger . Log ( LogType . Error , "Heartbeat: {0}" , ex ) ;
184- }
165+ }
166+
167+ static void LogHeartbeatError ( HeartbeatRequestState state , Exception ex ) {
168+ if ( ex is WebException || ex is IOException ) {
169+ string host = state . Request . RequestUri . Host ;
170+ Logger . Log ( LogType . Warning , "Heartbeat: {0} is probably down ({1})" , host , ex . Message ) ;
171+
172+ // avoid leaking resources in case of error
173+ try {
174+ WebException webEx = ex as WebException ;
175+ if ( webEx != null && webEx . Response != null ) {
176+ webEx . Response . Close ( ) ;
177+ }
178+ } catch { }
179+ } else {
180+ Logger . Log ( LogType . Error , "Heartbeat: {0}" , ex ) ;
185181 }
186182 }
187183
0 commit comments