Пример #1
0
        public async Task <bool> Usb()
        {
            var tempHandler = new USBHandler();

            try
            {
                var usbId     = "";
                var usbIdLock = new object();

                // Register USB event that simply sets usbId to the USB device id of the changed device
                EventHandler <string> idExtractor = (sender, id) =>
                {
                    lock (usbIdLock)
                    {
                        usbId = id;
                    }
                };
                tempHandler.DeviceInserted += idExtractor;
                tempHandler.DeviceRemoved  += idExtractor;

                // Wait for user to plug in or remove USB device
                var startTime = DateTime.Now;
                DDCKVMService.LastUSBConfigureTriggered = startTime;
                while (true)
                {
                    if ((DateTime.Now - startTime).TotalSeconds >= 20)
                    {
                        return(this.JsonResponse("{\"usb\":\"Timeout, configured USB device unchanged!\"}"));
                    }

                    lock (usbIdLock)
                    {
                        if (!string.IsNullOrEmpty(usbId))
                        {
                            break;
                        }
                    }

                    await Task.Delay(25);
                }

                // Reset timeout counter and save config
                DDCKVMService.LastUSBConfigureTriggered = DateTime.Now - TimeSpan.FromSeconds(17);
                ConfigManager.Singleton.UsbIdentifier   = usbId;
                ConfigManager.Singleton.Save();

                return(this.JsonResponse("{\"usb\":\"" + usbId.Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"}"));
            }
            finally
            {
                // Deregister temporary USB event handler
                tempHandler.Deregister();
            }
        }
Пример #2
0
        protected override void OnStart(string[] args)
        {
            // Set up local management web server
            this.server = new WebServer("http://localhost:4280/", RoutingStrategy.Regex);

            // Static files
            this.server.RegisterModule(new ResourceFilesModule(Assembly.GetExecutingAssembly(), "DDCKVMService.Resources"));

            // API
            this.server.RegisterModule(new WebApiModule());
            this.server.Module <WebApiModule>().RegisterController <WebController>();

            // Start server
            this.server.RunAsync(this.cancellationTokenSource.Token);

            // Register USB events
            this.usbHandler = new USBHandler();
            this.usbHandler.DeviceInserted += this.UsbHandlerGenerator("primary");
            this.usbHandler.DeviceRemoved  += this.UsbHandlerGenerator("secondary");
        }