forked from coolaj86/telebit.js
		
	handled case where append is called with closed websocket
This commit is contained in:
		
							parent
							
								
									6901a4ef2d
								
							
						
					
					
						commit
						00fbd2c27f
					
				
							
								
								
									
										42
									
								
								wsclient.js
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								wsclient.js
									
									
									
									
									
								
							| @ -110,6 +110,8 @@ function run(copts) { | |||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   var connCallback; | ||||||
|  | 
 | ||||||
|   var packerHandlers = { |   var packerHandlers = { | ||||||
|     oncontrol: function (opts) { |     oncontrol: function (opts) { | ||||||
|       var cmd, err; |       var cmd, err; | ||||||
| @ -133,6 +135,9 @@ function run(copts) { | |||||||
| 
 | 
 | ||||||
|       if (cmd[0] === 0) { |       if (cmd[0] === 0) { | ||||||
|         console.warn('received dis-associated error from server', cmd[1]); |         console.warn('received dis-associated error from server', cmd[1]); | ||||||
|  |         if (connCallback) { | ||||||
|  |           connCallback(cmd[1]); | ||||||
|  |         } | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
| @ -140,6 +145,9 @@ function run(copts) { | |||||||
|         // We only get the 'hello' event after the token has been validated
 |         // We only get the 'hello' event after the token has been validated
 | ||||||
|         authenticated = true; |         authenticated = true; | ||||||
|         sendAllTokens(); |         sendAllTokens(); | ||||||
|  |         if (connCallback) { | ||||||
|  |           connCallback(); | ||||||
|  |         } | ||||||
|         // TODO: handle the versions and commands provided by 'hello' - isn't super important
 |         // TODO: handle the versions and commands provided by 'hello' - isn't super important
 | ||||||
|         // yet since there is only one version and set up commands.
 |         // yet since there is only one version and set up commands.
 | ||||||
|         err = null; |         err = null; | ||||||
| @ -340,6 +348,10 @@ function run(copts) { | |||||||
|     if (!tokens.length) { |     if (!tokens.length) { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|  |     if (wstunneler) { | ||||||
|  |       console.warn('attempted to connect with connection already active'); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|     timeoutId = null; |     timeoutId = null; | ||||||
|     var machine = require('tunnel-packer').create(packerHandlers); |     var machine = require('tunnel-packer').create(packerHandlers); | ||||||
| 
 | 
 | ||||||
| @ -386,8 +398,36 @@ function run(copts) { | |||||||
|         return PromiseA.resolve(); |         return PromiseA.resolve(); | ||||||
|       } |       } | ||||||
|       tokens.push(token); |       tokens.push(token); | ||||||
|  |       var prom; | ||||||
|  |       if (tokens.length === 1 && !wstunneler) { | ||||||
|  |         // We just added the only token in the list, and the websocket connection isn't up
 | ||||||
|  |         // so we need to restart the connection.
 | ||||||
|  |         if (timeoutId) { | ||||||
|  |           // Handle the case were the last token was removed and this token added between
 | ||||||
|  |           // reconnect attempts to make sure we don't try openning multiple connections.
 | ||||||
|  |           clearTimeout(timeoutId); | ||||||
|  |           timeoutId = null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // We want this case to behave as much like the other case as we can, but we don't have
 | ||||||
|  |         // the same kind of reponses when we open brand new connections, so we have to rely on
 | ||||||
|  |         // the 'hello' and the 'un-associated' error commands to determine if the token is good.
 | ||||||
|  |         prom = new PromiseA(function (resolve, reject) { | ||||||
|  |           connCallback = function (err) { | ||||||
|  |             connCallback = null; | ||||||
|  |             if (err) { | ||||||
|  |               reject(err); | ||||||
|  |             } else { | ||||||
|  |               resolve(); | ||||||
|  |             } | ||||||
|  |           }; | ||||||
|  |         }); | ||||||
|  |         connect(); | ||||||
|  |       } | ||||||
|  |       else { | ||||||
|  |         prom = sendCommand('add_token', token); | ||||||
|  |       } | ||||||
| 
 | 
 | ||||||
|       var prom = sendCommand('add_token', token); |  | ||||||
|       prom.catch(function (err) { |       prom.catch(function (err) { | ||||||
|         console.error('adding token', token, 'failed:', 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.
 |         // Most probably an invalid token of some kind, so we don't really want to keep it.
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user