private DeviceMonitor AddOrGetDevice(string deviceName, DeviceType deviceType, Guid deviceGuid) { DeviceMonitor deviceMonitor = null; if (!_nameToDeviceMonitor.TryGetValue(deviceName, out deviceMonitor)) { deviceMonitor = new DeviceMonitor(deviceName, deviceType, deviceGuid, _mapper); _nameToDeviceMonitor.Add(deviceName, deviceMonitor); Devices.Add(deviceMonitor); switch (deviceType) { case DeviceType.Unknown: UnknownDevices.Add(deviceMonitor); break; case DeviceType.Keyboard: KeyboardDevices.Add(deviceMonitor); break; case DeviceType.Mouse: MouseDevices.Add(deviceMonitor); break; case DeviceType.Joystick: JoystickDevices.Add(deviceMonitor); break; } } return(deviceMonitor); }
void Mapper_DeviceChanged(object sender, DeviceInfo e) { Action action = null; switch (e.InfoAction) { case DeviceInfo.InfoType.Added: action = () => { AddMessage(new StatusMessage(e.Device, "Added")); AddOrGetDevice(e.Device, e.DeviceType, e.DeviceGuid); }; break; case DeviceInfo.InfoType.Checked: action = () => { AddMessage(new StatusMessage(e.Device, "Checked")); AddOrGetDevice(e.Device, e.DeviceType, e.DeviceGuid); }; break; case DeviceInfo.InfoType.Error: action = () => { AddMessage(new StatusMessage(e.Device, "Error")); if (e is DeviceInfoError) { AddMessage(new StatusMessage(e.Device, ((DeviceInfoError)e).ErrorMessage)); } }; break; case DeviceInfo.InfoType.Removed: action = () => { AddMessage(new StatusMessage(e.Device, "Removed")); DeviceMonitor deviceMonitor = null; if (_nameToDeviceMonitor.TryGetValue(e.Device, out deviceMonitor)) { _nameToDeviceMonitor.Remove(e.Device); Devices.Remove(deviceMonitor); switch (e.DeviceType) { case DeviceType.Unknown: UnknownDevices.Remove(deviceMonitor); break; case DeviceType.Keyboard: KeyboardDevices.Remove(deviceMonitor); break; case DeviceType.Mouse: MouseDevices.Remove(deviceMonitor); break; case DeviceType.Joystick: JoystickDevices.Remove(deviceMonitor); break; } } }; break; case DeviceInfo.InfoType.Updated: action = () => AddMessage(new StatusMessage(e.Device, "Updated")); break; } if (action != null) { _actionQueue.Add(action); } }