Handle a client connection request.
(self, eio_sid, namespace, data)
| 516 | self.eio.send_packet(eio_sid, eio_pkt) |
| 517 | |
| 518 | def _handle_connect(self, eio_sid, namespace, data): |
| 519 | """Handle a client connection request.""" |
| 520 | namespace = namespace or '/' |
| 521 | sid = None |
| 522 | if namespace in self.handlers or namespace in self.namespace_handlers \ |
| 523 | or self.namespaces == '*' or namespace in self.namespaces: |
| 524 | sid = self.manager.connect(eio_sid, namespace) |
| 525 | if sid is None: |
| 526 | self._send_packet(eio_sid, self.packet_class( |
| 527 | packet.CONNECT_ERROR, data='Unable to connect', |
| 528 | namespace=namespace)) |
| 529 | return |
| 530 | |
| 531 | if self.always_connect: |
| 532 | self._send_packet(eio_sid, self.packet_class( |
| 533 | packet.CONNECT, {'sid': sid}, namespace=namespace)) |
| 534 | fail_reason = exceptions.ConnectionRefusedError().error_args |
| 535 | try: |
| 536 | if data: |
| 537 | success = self._trigger_event( |
| 538 | 'connect', namespace, sid, self.environ[eio_sid], data) |
| 539 | else: |
| 540 | try: |
| 541 | success = self._trigger_event( |
| 542 | 'connect', namespace, sid, self.environ[eio_sid]) |
| 543 | except TypeError: |
| 544 | success = self._trigger_event( |
| 545 | 'connect', namespace, sid, self.environ[eio_sid], None) |
| 546 | except exceptions.ConnectionRefusedError as exc: |
| 547 | fail_reason = exc.error_args |
| 548 | success = False |
| 549 | except ConnectionRefusedError: |
| 550 | fail_reason = {"message": "Connection refused by server"} |
| 551 | success = False |
| 552 | |
| 553 | if success is False: |
| 554 | if self.always_connect: |
| 555 | self.manager.pre_disconnect(sid, namespace) |
| 556 | self._send_packet(eio_sid, self.packet_class( |
| 557 | packet.DISCONNECT, data=fail_reason, namespace=namespace)) |
| 558 | else: |
| 559 | self._send_packet(eio_sid, self.packet_class( |
| 560 | packet.CONNECT_ERROR, data=fail_reason, |
| 561 | namespace=namespace)) |
| 562 | self.manager.disconnect(sid, namespace, ignore_queue=True) |
| 563 | elif not self.always_connect: |
| 564 | self._send_packet(eio_sid, self.packet_class( |
| 565 | packet.CONNECT, {'sid': sid}, namespace=namespace)) |
| 566 | |
| 567 | def _handle_disconnect(self, eio_sid, namespace, reason=None): |
| 568 | """Handle a client disconnect.""" |
no test coverage detected