Merge pull request #73 from ayntee/switch-case
refactor(gateway): use switch-case to avoid repetitive code
This commit is contained in:
		
						commit
						0e6814690d
					
				
					 1 changed files with 54 additions and 48 deletions
				
			
		|  | @ -177,55 +177,61 @@ export class Gateway extends EventEmitter { | |||
|     } | ||||
|   } | ||||
| 
 | ||||
|   private async onclose(event: CloseEvent): Promise<void> { | ||||
|     if (event.reason === RECONNECT_REASON) return | ||||
|     this.emit('close', event.code, event.reason) | ||||
|     this.debug(`Connection Closed with code: ${event.code}`) | ||||
|   private async onclose({ reason, code }: CloseEvent): Promise<void> { | ||||
|     if (reason === RECONNECT_REASON) return | ||||
|     this.emit('close', code, reason) | ||||
|     this.debug(`Connection Closed with code: ${code}`) | ||||
| 
 | ||||
|     if (event.code === GatewayCloseCodes.UNKNOWN_ERROR) { | ||||
|       this.debug('API has encountered Unknown Error. Reconnecting...') | ||||
|       // eslint-disable-next-line @typescript-eslint/no-floating-promises
 | ||||
|       this.reconnect() | ||||
|     } else if (event.code === GatewayCloseCodes.UNKNOWN_OPCODE) { | ||||
|       throw new Error("Unknown OP Code was sent. This shouldn't happen!") | ||||
|     } else if (event.code === GatewayCloseCodes.DECODE_ERROR) { | ||||
|       throw new Error("Invalid Payload was sent. This shouldn't happen!") | ||||
|     } else if (event.code === GatewayCloseCodes.NOT_AUTHENTICATED) { | ||||
|       throw new Error('Not Authorized: Payload was sent before Identifying.') | ||||
|     } else if (event.code === GatewayCloseCodes.AUTHENTICATION_FAILED) { | ||||
|       throw new Error('Invalid Token provided!') | ||||
|     } else if (event.code === GatewayCloseCodes.INVALID_SEQ) { | ||||
|       this.debug('Invalid Seq was sent. Reconnecting.') | ||||
|       // eslint-disable-next-line @typescript-eslint/no-floating-promises
 | ||||
|       this.reconnect() | ||||
|     } else if (event.code === GatewayCloseCodes.RATE_LIMITED) { | ||||
|       throw new Error("You're ratelimited. Calm down.") | ||||
|     } else if (event.code === GatewayCloseCodes.SESSION_TIMED_OUT) { | ||||
|       this.debug('Session Timeout. Reconnecting.') | ||||
|       // eslint-disable-next-line @typescript-eslint/no-floating-promises
 | ||||
|       this.reconnect(true) | ||||
|     } else if (event.code === GatewayCloseCodes.INVALID_SHARD) { | ||||
|       this.debug('Invalid Shard was sent. Reconnecting.') | ||||
|       // eslint-disable-next-line @typescript-eslint/no-floating-promises
 | ||||
|       this.reconnect() | ||||
|     } else if (event.code === GatewayCloseCodes.SHARDING_REQUIRED) { | ||||
|       throw new Error("Couldn't connect. Sharding is required!") | ||||
|     } else if (event.code === GatewayCloseCodes.INVALID_API_VERSION) { | ||||
|       throw new Error("Invalid API Version was used. This shouldn't happen!") | ||||
|     } else if (event.code === GatewayCloseCodes.INVALID_INTENTS) { | ||||
|       throw new Error('Invalid Intents') | ||||
|     } else if (event.code === GatewayCloseCodes.DISALLOWED_INTENTS) { | ||||
|       throw new Error("Given Intents aren't allowed") | ||||
|     } else { | ||||
|       this.debug( | ||||
|         'Unknown Close code, probably connection error. Reconnecting in 5s.' | ||||
|       ) | ||||
|       if (this.timedIdentify !== null) { | ||||
|         clearTimeout(this.timedIdentify) | ||||
|         this.debug('Timed Identify found. Cleared timeout.') | ||||
|       } | ||||
|       await delay(5000) | ||||
|       await this.reconnect(true) | ||||
|     switch (code) { | ||||
|       case GatewayCloseCodes.UNKNOWN_ERROR: | ||||
|         this.debug('API has encountered Unknown Error. Reconnecting...') | ||||
|         // eslint-disable-next-line @typescript-eslint/no-floating-promises
 | ||||
|         this.reconnect() | ||||
|         break | ||||
|       case GatewayCloseCodes.UNKNOWN_OPCODE: | ||||
|         throw new Error("Unknown OP Code was sent. This shouldn't happen!") | ||||
|       case GatewayCloseCodes.DECODE_ERROR: | ||||
|         throw new Error("Invalid Payload was sent. This shouldn't happen!") | ||||
|       case GatewayCloseCodes.NOT_AUTHENTICATED: | ||||
|         throw new Error('Not Authorized: Payload was sent before Identifying.') | ||||
|       case GatewayCloseCodes.AUTHENTICATION_FAILED: | ||||
|         throw new Error('Invalid Token provided!') | ||||
|       case GatewayCloseCodes.INVALID_SEQ: | ||||
|         this.debug('Invalid Seq was sent. Reconnecting.') | ||||
|         // eslint-disable-next-line @typescript-eslint/no-floating-promises
 | ||||
|         this.reconnect() | ||||
|         break | ||||
|       case GatewayCloseCodes.RATE_LIMITED: | ||||
|         throw new Error("You're ratelimited. Calm down.") | ||||
|       case GatewayCloseCodes.SESSION_TIMED_OUT: | ||||
|         this.debug('Session Timeout. Reconnecting.') | ||||
|         // eslint-disable-next-line @typescript-eslint/no-floating-promises
 | ||||
|         this.reconnect(true) | ||||
|         break | ||||
|       case GatewayCloseCodes.INVALID_SHARD: | ||||
|         this.debug('Invalid Shard was sent. Reconnecting.') | ||||
|         // eslint-disable-next-line @typescript-eslint/no-floating-promises
 | ||||
|         this.reconnect() | ||||
|         break | ||||
|       case GatewayCloseCodes.SHARDING_REQUIRED: | ||||
|         throw new Error("Couldn't connect. Sharding is required!") | ||||
|       case GatewayCloseCodes.INVALID_API_VERSION: | ||||
|         throw new Error("Invalid API Version was used. This shouldn't happen!") | ||||
|       case GatewayCloseCodes.INVALID_INTENTS: | ||||
|         throw new Error('Invalid Intents') | ||||
|       case GatewayCloseCodes.DISALLOWED_INTENTS: | ||||
|         throw new Error("Given Intents aren't allowed") | ||||
|       default: | ||||
|         this.debug( | ||||
|           'Unknown Close code, probably connection error. Reconnecting in 5s.' | ||||
|         ) | ||||
|         if (this.timedIdentify !== null) { | ||||
|           clearTimeout(this.timedIdentify) | ||||
|           this.debug('Timed Identify found. Cleared timeout.') | ||||
|         } | ||||
|         await delay(5000) | ||||
|         await this.reconnect(true) | ||||
|         break | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue