(self)
| 110 | ) or "http://localhost:8081" |
| 111 | |
| 112 | def start(self): |
| 113 | if bpy.app.background: |
| 114 | print("BlenderMCP: cannot start server in background mode (blender -b) - commands would never execute\n" |
| 115 | "BlenderMCP: run Blender with a GUI, or use a virtual display: xvfb-run -a blender") |
| 116 | return |
| 117 | |
| 118 | if self.running: |
| 119 | print("Server is already running") |
| 120 | return |
| 121 | |
| 122 | self.running = True |
| 123 | |
| 124 | try: |
| 125 | # Create socket |
| 126 | self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| 127 | self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
| 128 | self.socket.bind((self.host, self.port)) |
| 129 | self.socket.listen(1) |
| 130 | |
| 131 | # Start server thread |
| 132 | self.server_thread = threading.Thread(target=self._server_loop) |
| 133 | self.server_thread.daemon = True |
| 134 | self.server_thread.start() |
| 135 | |
| 136 | print(f"BlenderMCP server started on {self.host}:{self.port}") |
| 137 | except Exception as e: |
| 138 | print(f"Failed to start server: {str(e)}") |
| 139 | self.stop() |
| 140 | |
| 141 | def stop(self): |
| 142 | self.running = False |
no test coverage detected