@@ -153,11 +153,11 @@ exports.createTransport = (runtime, adapter) => {
153153
154154 transport . log = runtime . createLogger ( 'TRANSPORT' )
155155 transport . isConnected = false
156+ transport . isDisconnecting = false
156157 transport . isReady = false
157158 transport . pending = pending
158159 transport . resolveConnect = null
159160 transport . adapterName = adapter . name
160-
161161 transport . statistics = {
162162 received : {
163163 packages : 0
@@ -173,9 +173,18 @@ exports.createTransport = (runtime, adapter) => {
173173 transport . log . info ( 'Connecting to transport adapter...' )
174174
175175 const doConnect = ( isTryReconnect ) => {
176- const errorHandler = error => {
176+ let reconnectInProgress = false
177+
178+ const errorHandler = ( error ) => {
179+ // Skip reconnect, if the adapter is disconnecting or an reconnect is in progress.
180+ if ( transport . isDisconnecting || reconnectInProgress ) {
181+ return
182+ }
183+
177184 transport . log . warn ( 'Connection failed' )
178- transport . log . debug ( 'Error ' + error . message )
185+ transport . log . debug ( error )
186+
187+ reconnectInProgress = true
179188
180189 if ( ! error . skipRetry ) {
181190 setTimeout ( ( ) => {
@@ -194,16 +203,22 @@ exports.createTransport = (runtime, adapter) => {
194203 }
195204
196205 transport . disconnect = ( ) => {
197- runtime . eventBus . broadcastLocal ( '$transporter.disconnected' , { isGracefull : true } )
198-
206+ transport . isDisconnecting = true
199207 transport . isConnected = false
200208 transport . isReady = false
201209
210+ runtime . eventBus . broadcastLocal ( '$transporter.disconnected' , { isGracefull : true } )
211+
202212 stopTimers ( )
203213
204214 const message = transport . createMessage ( MessageTypes . MESSAGE_DISCONNECT )
205215 return transport . send ( message )
206- . then ( ( ) => adapter . close ( ) )
216+ . then ( ( ) => {
217+ adapter . close ( )
218+ } )
219+ . then ( ( ) => {
220+ transport . isDisconnecting = false
221+ } )
207222 }
208223
209224 transport . setReady = ( ) => {
@@ -334,13 +349,16 @@ exports.createTransport = (runtime, adapter) => {
334349 transport . response = ( target , contextId , data , meta , error ) => {
335350 // Check if data is a stream
336351 const isStream = utils . isStream ( data )
352+
353+ // Build response payload
337354 const payload = {
338355 id : contextId ,
339356 meta,
340357 data,
341358 success : error == null
342359 }
343360
361+ // If an error is occurs, we attach the an error object to the payload.
344362 if ( error ) {
345363 payload . error = {
346364 name : error . name ,
0 commit comments