| 141 | logger.info(f"{self.mode.description} started.") |
| 142 | |
| 143 | async def stop(self) -> None: |
| 144 | listen_addrs = self.listen_addrs |
| 145 | try: |
| 146 | await self._stop() |
| 147 | except Exception as e: |
| 148 | self.last_exception = e |
| 149 | raise |
| 150 | else: |
| 151 | self.last_exception = None |
| 152 | if listen_addrs: |
| 153 | addrs = " and ".join({human.format_address(a) for a in listen_addrs}) |
| 154 | logger.info(f"{self.mode.description} at {addrs} stopped.") |
| 155 | else: |
| 156 | logger.info(f"{self.mode.description} stopped.") |
| 157 | |
| 158 | @abstractmethod |
| 159 | async def _start(self) -> None: |