MCPcopy Create free account
hub / github.com/bigdra50/unity-cli / _handle_connection

Method _handle_connection

relay/server.py:189–224  ·  view source on GitHub ↗

Handle a new connection (Unity or CLI)

(
        self,
        reader: asyncio.StreamReader,
        writer: asyncio.StreamWriter,
    )

Source from the content-addressed store, hash-verified

187 logger.info("Relay Server stopped")
188
189 async def _handle_connection(
190 self,
191 reader: asyncio.StreamReader,
192 writer: asyncio.StreamWriter,
193 ) -> None:
194 """Handle a new connection (Unity or CLI)"""
195 peername = writer.get_extra_info("peername")
196 logger.debug(f"New connection from {peername}")
197
198 try:
199 # Read first message to determine connection type
200 first_msg = await asyncio.wait_for(read_frame(reader), timeout=10.0)
201 msg_type = first_msg.get("type")
202
203 if msg_type == MessageType.REGISTER.value:
204 await self._handle_unity_connection(reader, writer, first_msg)
205 elif msg_type in (
206 MessageType.REQUEST.value,
207 MessageType.LIST_INSTANCES.value,
208 MessageType.SET_DEFAULT.value,
209 ):
210 await self._handle_cli_message(writer, first_msg)
211 # CLI connections are one-shot
212 else:
213 logger.warning(f"Unknown message type: {msg_type}")
214
215 except TimeoutError:
216 logger.warning(f"Connection timeout from {peername}")
217 except asyncio.IncompleteReadError:
218 logger.debug(f"Connection closed by {peername}")
219 except Exception as e:
220 logger.error(f"Error handling connection from {peername}: {e}")
221 finally:
222 if not writer.is_closing():
223 writer.close()
224 await writer.wait_closed()
225
226 # ===== Unity Connection Handling =====
227

Callers

nothing calls this directly

Calls 4

_handle_cli_messageMethod · 0.95
read_frameFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected