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

Method _handle_unity_connection

relay/server.py:228–296  ·  view source on GitHub ↗

Handle a Unity Editor connection

(
        self,
        reader: asyncio.StreamReader,
        writer: asyncio.StreamWriter,
        register_msg: dict[str, Any],
    )

Source from the content-addressed store, hash-verified

226 # ===== Unity Connection Handling =====
227
228 async def _handle_unity_connection(
229 self,
230 reader: asyncio.StreamReader,
231 writer: asyncio.StreamWriter,
232 register_msg: dict[str, Any],
233 ) -> None:
234 """Handle a Unity Editor connection"""
235 # Validate protocol version
236 protocol_version = register_msg.get("protocol_version", "")
237 if protocol_version != PROTOCOL_VERSION:
238 response = RegisteredMessage(
239 success=False,
240 error={
241 "code": ErrorCode.PROTOCOL_VERSION_MISMATCH.value,
242 "message": f"Unsupported protocol version: {protocol_version}. Expected: {PROTOCOL_VERSION}",
243 },
244 )
245 await write_frame(writer, response.to_dict())
246 return
247
248 # Register instance
249 instance_id = register_msg.get("instance_id", "")
250 raw_bridge_version = register_msg.get("bridge_version", "")
251 bridge_version = raw_bridge_version if isinstance(raw_bridge_version, str) else ""
252 if len(bridge_version) > 64:
253 bridge_version = ""
254 instance = await self.registry.register(
255 instance_id=instance_id,
256 project_name=register_msg.get("project_name", ""),
257 unity_version=register_msg.get("unity_version", ""),
258 capabilities=register_msg.get("capabilities", []),
259 reader=reader,
260 writer=writer,
261 bridge_version=bridge_version,
262 )
263
264 # Send registration response
265 response = RegisteredMessage(
266 success=True,
267 heartbeat_interval_ms=HEARTBEAT_INTERVAL_MS,
268 )
269 await write_frame(writer, response.to_dict())
270
271 # Start heartbeat task
272 heartbeat_task = asyncio.create_task(self._heartbeat_loop(instance_id))
273 self._heartbeat_tasks[instance_id] = heartbeat_task
274
275 # Handle messages from Unity
276 try:
277 while self._running and instance.is_connected:
278 try:
279 msg = await asyncio.wait_for(
280 read_frame(reader),
281 timeout=HEARTBEAT_TIMEOUT_MS / 1000,
282 )
283 await self._handle_unity_message(instance, msg)
284 except TimeoutError:
285 # Don't disconnect here — let _heartbeat_loop handle retries via PING/PONG.

Callers 1

_handle_connectionMethod · 0.95

Calls 9

_heartbeat_loopMethod · 0.95
_handle_unity_messageMethod · 0.95
RegisteredMessageClass · 0.85
write_frameFunction · 0.85
read_frameFunction · 0.85
registerMethod · 0.80
getMethod · 0.45
to_dictMethod · 0.45

Tested by

no test coverage detected