Invoke an application event handler.
(self, event, namespace, *args)
| 462 | self.connected = False |
| 463 | |
| 464 | async def _trigger_event(self, event, namespace, *args): |
| 465 | """Invoke an application event handler.""" |
| 466 | # first see if we have an explicit handler for the event |
| 467 | handler, args = self._get_event_handler(event, namespace, args) |
| 468 | if handler: |
| 469 | if inspect.iscoroutinefunction(handler): |
| 470 | try: |
| 471 | try: |
| 472 | ret = await handler(*args) |
| 473 | except TypeError: |
| 474 | # the legacy disconnect event does not take a reason |
| 475 | # argument |
| 476 | if event == 'disconnect': |
| 477 | ret = await handler(*args[:-1]) |
| 478 | else: # pragma: no cover |
| 479 | raise |
| 480 | except asyncio.CancelledError: # pragma: no cover |
| 481 | ret = None |
| 482 | else: |
| 483 | try: |
| 484 | ret = handler(*args) |
| 485 | except TypeError: |
| 486 | # the legacy disconnect event does not take a reason |
| 487 | # argument |
| 488 | if event == 'disconnect': |
| 489 | ret = handler(*args[:-1]) |
| 490 | else: # pragma: no cover |
| 491 | raise |
| 492 | return ret |
| 493 | |
| 494 | # or else, forward the event to a namespace handler if one exists |
| 495 | handler, args = self._get_namespace_handler(namespace, args) |
| 496 | if handler: |
| 497 | return await handler.trigger_event(event, *args) |
| 498 | |
| 499 | async def _handle_reconnect(self): |
| 500 | if self._reconnect_abort is None: # pragma: no cover |