Main server loop. Waits for a client connection, then processes commands in a loop. Handles all supported commands: set filename, configure stream, enable/disable stream, read/write frames, close server. Sends responses or frame data as appropriate.
(self)
| 651 | |
| 652 | |
| 653 | def run(self): |
| 654 | """ |
| 655 | Main server loop. |
| 656 | |
| 657 | Waits for a client connection, then processes commands in a loop. |
| 658 | Handles all supported commands: set filename, configure stream, enable/disable stream, read/write frames, close server. |
| 659 | Sends responses or frame data as appropriate. |
| 660 | """ |
| 661 | logger.info("Video server started") |
| 662 | |
| 663 | try: |
| 664 | conn = self.listener.accept() |
| 665 | logger.info(f'Connection accepted {self.listener.address}') |
| 666 | except Exception: |
| 667 | logger.error("Connection not accepted") |
| 668 | return |
| 669 | |
| 670 | while True: |
| 671 | try: |
| 672 | recv = conn.recv() |
| 673 | except EOFError: |
| 674 | return |
| 675 | |
| 676 | cmd = recv[0] # Command |
| 677 | payload = recv[1:] # Payload |
| 678 | |
| 679 | if cmd == self.SET_MODE: |
| 680 | current_mode = self._setMode(payload[0]) |
| 681 | conn.send(current_mode) |
| 682 | |
| 683 | elif cmd == self.SET_DEVICE: |
| 684 | device_valid = self._setDevice(payload[0]) |
| 685 | conn.send(device_valid) |
| 686 | |
| 687 | elif cmd == self.SET_FILENAME: |
| 688 | filename_valid = self._setFilename(payload[0], payload[1]) |
| 689 | conn.send(filename_valid) |
| 690 | |
| 691 | elif cmd == self.STREAM_CONFIGURE: |
| 692 | configuration_valid = self._configureStream(payload[0], payload[1], payload[2], payload[3]) |
| 693 | conn.send(configuration_valid) |
| 694 | |
| 695 | elif cmd == self.STREAM_ENABLE: |
| 696 | self._enableStream() |
| 697 | conn.send(self.active) |
| 698 | |
| 699 | elif cmd == self.STREAM_DISABLE: |
| 700 | self._disableStream() |
| 701 | conn.send(self.active) |
| 702 | |
| 703 | elif cmd == self.FRAME_READ: |
| 704 | frame = self._readFrame() |
| 705 | conn.send_bytes(frame) |
| 706 | conn.send(self.eos) |
| 707 | |
| 708 | elif cmd == self.FRAME_WRITE: |
| 709 | frame = conn.recv_bytes() |
| 710 | self._writeFrame(frame) |
no test coverage detected