changed adding tokens to work on reconnect
This commit is contained in:
		
							parent
							
								
									dbf8832aa9
								
							
						
					
					
						commit
						425cf4bc24
					
				
							
								
								
									
										55
									
								
								wsclient.js
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								wsclient.js
									
									
									
									
									
								
							| @ -7,7 +7,7 @@ var sni = require('sni'); | |||||||
| var Packer = require('tunnel-packer'); | var Packer = require('tunnel-packer'); | ||||||
| 
 | 
 | ||||||
| function run(copts) { | function run(copts) { | ||||||
|   var tunnelUrl = copts.stunneld.replace(/\/$/, '') + '/?access_token=' + copts.token; |   var tokens = [ copts.token ]; | ||||||
|   var activityTimeout = copts.activityTimeout || 2*60*1000; |   var activityTimeout = copts.activityTimeout || 2*60*1000; | ||||||
|   var pongTimeout = copts.pongTimeout || 10*1000; |   var pongTimeout = copts.pongTimeout || 10*1000; | ||||||
| 
 | 
 | ||||||
| @ -224,7 +224,6 @@ function run(copts) { | |||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   var retry = true; |  | ||||||
|   var lastActivity; |   var lastActivity; | ||||||
|   var timeoutId; |   var timeoutId; | ||||||
|   var wsHandlers = { |   var wsHandlers = { | ||||||
| @ -269,6 +268,16 @@ function run(copts) { | |||||||
|       console.info("[open] connected to '" + copts.stunneld + "'"); |       console.info("[open] connected to '" + copts.stunneld + "'"); | ||||||
|       wsHandlers.refreshTimeout(); |       wsHandlers.refreshTimeout(); | ||||||
|       timeoutId = setTimeout(wsHandlers.checkTimeout, activityTimeout); |       timeoutId = setTimeout(wsHandlers.checkTimeout, activityTimeout); | ||||||
|  | 
 | ||||||
|  |       tokens.forEach(function (jwtoken) { | ||||||
|  |         sendCommand('add_token', jwtoken) | ||||||
|  |           .catch(function (err) { | ||||||
|  |             console.error('failed re-adding token', jwtoken, 'after reconnect', err); | ||||||
|  |             // Not sure if we should do something like remove the token here. It worked
 | ||||||
|  |             // once or it shouldn't have stayed in the list, so it's less certain why
 | ||||||
|  |             // it would have failed here.
 | ||||||
|  |           }); | ||||||
|  |       }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   , onClose: function () { |   , onClose: function () { | ||||||
| @ -287,7 +296,7 @@ function run(copts) { | |||||||
|         console.info('[close] failed on first attempt... check authentication.'); |         console.info('[close] failed on first attempt... check authentication.'); | ||||||
|         timeoutId = null; |         timeoutId = null; | ||||||
|       } |       } | ||||||
|       else if (retry) { |       else if (tokens.length) { | ||||||
|         console.info('[retry] disconnected and waiting...'); |         console.info('[retry] disconnected and waiting...'); | ||||||
|         timeoutId = setTimeout(connect, 5000); |         timeoutId = setTimeout(connect, 5000); | ||||||
|       } |       } | ||||||
| @ -314,13 +323,14 @@ function run(copts) { | |||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   function connect() { |   function connect() { | ||||||
|     if (!retry) { |     if (!tokens.length) { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     timeoutId = null; |     timeoutId = null; | ||||||
|     var machine = require('tunnel-packer').create(packerHandlers); |     var machine = require('tunnel-packer').create(packerHandlers); | ||||||
| 
 | 
 | ||||||
|     console.info("[connect] '" + copts.stunneld + "'"); |     console.info("[connect] '" + copts.stunneld + "'"); | ||||||
|  |     var tunnelUrl = copts.stunneld.replace(/\/$/, '') + '/?access_token=' + tokens[0]; | ||||||
|     wstunneler = new WebSocket(tunnelUrl, { rejectUnauthorized: !copts.insecure }); |     wstunneler = new WebSocket(tunnelUrl, { rejectUnauthorized: !copts.insecure }); | ||||||
|     wstunneler.on('open', wsHandlers.onOpen); |     wstunneler.on('open', wsHandlers.onOpen); | ||||||
|     wstunneler.on('close', wsHandlers.onClose); |     wstunneler.on('close', wsHandlers.onClose); | ||||||
| @ -342,7 +352,7 @@ function run(copts) { | |||||||
| 
 | 
 | ||||||
|   return { |   return { | ||||||
|     end: function() { |     end: function() { | ||||||
|       retry = false; |       tokens.length = 0; | ||||||
|       if (timeoutId) { |       if (timeoutId) { | ||||||
|         clearTimeout(timeoutId); |         clearTimeout(timeoutId); | ||||||
|         timeoutId = null; |         timeoutId = null; | ||||||
| @ -358,10 +368,41 @@ function run(copts) { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   , append: function (token) { |   , append: function (token) { | ||||||
|       return sendCommand('add_token', token); |       if (tokens.indexOf(token) >= 0) { | ||||||
|  |         return PromiseA.resolve(); | ||||||
|  |       } | ||||||
|  |       tokens.push(token); | ||||||
|  | 
 | ||||||
|  |       var prom = sendCommand('add_token', token); | ||||||
|  |       prom.catch(function (err) { | ||||||
|  |         console.error('adding token', token, 'failed:', err); | ||||||
|  |         // Most probably an invalid token of some kind, so we don't really want to keep it.
 | ||||||
|  |         tokens.splice(tokens.indexOf(token)); | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       return prom; | ||||||
|     } |     } | ||||||
|   , clear: function (token) { |   , clear: function (token) { | ||||||
|       return sendCommand('delete_token', token || '*'); |       if (typeof token === 'undefined') { | ||||||
|  |         token = '*'; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (token === '*') { | ||||||
|  |         tokens.length = 0; | ||||||
|  |       } else { | ||||||
|  |         var index = tokens.indexOf(token); | ||||||
|  |         if (index < 0) { | ||||||
|  |           return PromiseA.resolve(); | ||||||
|  |         } | ||||||
|  |         tokens.splice(index); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       var prom = sendCommand('delete_token', token); | ||||||
|  |       prom.catch(function (err) { | ||||||
|  |         console.error('clearing token', token, 'failed:', err); | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       return prom; | ||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user