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(); } }
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"); }