private IEnumerator HostPollEvents() { while (true) { yield return(null); while (Parsec.HostPollEvents(0u, out Parsec.ParsecHostEvent hostEvent)) { if (hostEvent.type == Parsec.ParsecHostEventType.HOST_EVENT_GUEST_STATE_CHANGE) { Parsec.ParsecGuestState state = hostEvent.guestStateChange.guest.state; switch (state) { case Parsec.ParsecGuestState.GUEST_CONNECTED: Log($"Guest ID {hostEvent.guestStateChange.guest.id} connected."); var deviceCollection = hostInput.AddGuest(hostEvent.guestStateChange.guest); OnGuestConnected?.Invoke(hostEvent.guestStateChange.guest, deviceCollection); break; case Parsec.ParsecGuestState.GUEST_DISCONNECTED: Log($"Guest ID {hostEvent.guestStateChange.guest.id} disconnected."); OnGuestDisconnected?.Invoke(hostEvent.guestStateChange.guest); break; default: break; } } else if (hostEvent.type == Parsec.ParsecHostEventType.HOST_EVENT_USER_DATA) { Log($"Received user data from {hostEvent.userData.guest.id}."); string json = Parsec.HostGetUserDataString(hostEvent.userData.key); OnReceiveUserData?.Invoke(hostEvent.userData.guest, json); } } } }