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 = { | ||||
|     oncontrol: function (opts) { | ||||
|       var cmd, err; | ||||
| @ -133,6 +135,9 @@ function run(copts) { | ||||
| 
 | ||||
|       if (cmd[0] === 0) { | ||||
|         console.warn('received dis-associated error from server', cmd[1]); | ||||
|         if (connCallback) { | ||||
|           connCallback(cmd[1]); | ||||
|         } | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
| @ -140,6 +145,9 @@ function run(copts) { | ||||
|         // We only get the 'hello' event after the token has been validated
 | ||||
|         authenticated = true; | ||||
|         sendAllTokens(); | ||||
|         if (connCallback) { | ||||
|           connCallback(); | ||||
|         } | ||||
|         // TODO: handle the versions and commands provided by 'hello' - isn't super important
 | ||||
|         // yet since there is only one version and set up commands.
 | ||||
|         err = null; | ||||
| @ -340,6 +348,10 @@ function run(copts) { | ||||
|     if (!tokens.length) { | ||||
|       return; | ||||
|     } | ||||
|     if (wstunneler) { | ||||
|       console.warn('attempted to connect with connection already active'); | ||||
|       return; | ||||
|     } | ||||
|     timeoutId = null; | ||||
|     var machine = require('tunnel-packer').create(packerHandlers); | ||||
| 
 | ||||
| @ -386,8 +398,36 @@ function run(copts) { | ||||
|         return PromiseA.resolve(); | ||||
|       } | ||||
|       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) { | ||||
|         console.error('adding token', token, 'failed:', err); | ||||
|         // 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