Invoke an application event handler.
(self, event, namespace, *args)
| 637 | await self.manager.trigger_callback(sid, id, data) |
| 638 | |
| 639 | async def _trigger_event(self, event, namespace, *args): |
| 640 | """Invoke an application event handler.""" |
| 641 | # first see if we have an explicit handler for the event |
| 642 | handler, args = self._get_event_handler(event, namespace, args) |
| 643 | if handler: |
| 644 | if inspect.iscoroutinefunction(handler): |
| 645 | try: |
| 646 | try: |
| 647 | ret = await handler(*args) |
| 648 | except TypeError: |
| 649 | # legacy disconnect events use only one argument |
| 650 | if event == 'disconnect': |
| 651 | ret = await handler(*args[:-1]) |
| 652 | else: # pragma: no cover |
| 653 | raise |
| 654 | except asyncio.CancelledError: # pragma: no cover |
| 655 | ret = None |
| 656 | else: |
| 657 | try: |
| 658 | ret = handler(*args) |
| 659 | except TypeError: |
| 660 | # legacy disconnect events use only one argument |
| 661 | if event == 'disconnect': |
| 662 | ret = handler(*args[:-1]) |
| 663 | else: # pragma: no cover |
| 664 | raise |
| 665 | return ret |
| 666 | # or else, forward the event to a namespace handler if one exists |
| 667 | handler, args = self._get_namespace_handler(namespace, args) |
| 668 | if handler: |
| 669 | return await handler.trigger_event(event, *args) |
| 670 | else: |
| 671 | return self.not_handled |
| 672 | |
| 673 | async def _handle_eio_connect(self, eio_sid, environ): |
| 674 | """Handle the Engine.IO connection event.""" |