Ejemplo n.º 1
0
        public ListDevices(string dllPath)
        {
            if (Usbmuxd.IsDllLoaded)
            {
                throw new InvalidOperationException("Usbmuxd already initialised! Cannot initialise multiple times");
            }

            Usbmuxd.Setup(dllPath);

            // Note that we might get an empty "[usmbuxd] Error:" message. This is harmless, and is due to shutdown handling
            Usbmuxd.StartUsbmuxdListenThread();
        }
        public void Initialize()
        {
            // TODO: Investigate using StartInfo and the protocol for this information
            var proxyPath       = Environment.GetEnvironmentVariable("_RIDER_UNITY_IOS_USB_PROXY_PATH");
            var deviceID        = Environment.GetEnvironmentVariable("_RIDER_UNITY_IOS_USB_DEVICE_ID");
            var localPortString = Environment.GetEnvironmentVariable("_RIDER_UNITY_IOS_USB_LOCAL_PORT");

            if (!proxyPath.IsNullOrEmpty() && !deviceID.IsNullOrEmpty() && !localPortString.IsNullOrEmpty())
            {
                myLogger.Trace($"Proxy path: {proxyPath}");
                myLogger.Trace($"Device ID: {deviceID}");
                myLogger.Trace($"Local port: {localPortString}");

                try
                {
                    // Load the native library, initialise the function pointers and start listening for devices
                    Usbmuxd.Setup(proxyPath);
                    Usbmuxd.StartUsbmuxdListenThread();

                    // There is a potential race condition with starting the proxy thread before the listen thread has
                    // discovered the devices. Make sure our device ID is found
                    var  retries = 0;
                    bool found;
                    while ((found = CanFindDevice(deviceID)) == false && retries < 3)
                    {
                        myLogger.Info("Cannot find device. Sleeping for 10ms");
                        Thread.Sleep(10);
                        retries++;
                    }

                    // This shouldn't happen. Log it and let everything else continue to fail
                    if (!found)
                    {
                        myLogger.Error("Unable to find device");
                    }

                    var localPort = ushort.Parse(localPortString);
                    if (!Usbmuxd.StartIosProxy(localPort, 56000, deviceID))
                    {
                        myLogger.Error("StartIosProxy returned false");
                        Usbmuxd.StopUsbmuxdListenThread();
                        Usbmuxd.Shutdown();
                        return;
                    }

                    myLifetime.OnTermination(() =>
                    {
                        try
                        {
                            Usbmuxd.StopIosProxy(localPort);
                            Usbmuxd.StopUsbmuxdListenThread();
                            Usbmuxd.Shutdown();
                        }
                        catch (Exception e)
                        {
                            myLogger.Error(e);
                            throw;
                        }
                    });
                }
                catch (Exception e)
                {
                    myLogger.Error(e);
                    throw;
                }
            }
            else
            {
                myLogger.Trace("No environment variables set for iOS debugging");
            }
        }