private void DeviceRemovedHandler(object aObj, EventArgs aEvent) { if ((aObj as ButtplugDevice) == null) { _bpLogger.Error("Got DeviceRemoved message from an object that is not a ButtplugDevice."); return; } var device = (ButtplugDevice)aObj; // The device itself will fire the remove event, so look it up in the dictionary and translate that for clients. var entry = (from x in _devices where x.Value.Identifier == device.Identifier select x).ToList(); if (!entry.Any()) { _bpLogger.Error("Got DeviceRemoved Event from object that is not in devices dictionary"); } if (entry.Count > 1) { _bpLogger.Error("Device being removed has multiple entries in device dictionary."); } foreach (var pair in entry.ToList()) { pair.Value.DeviceRemoved -= DeviceRemovedHandler; _bpLogger.Info($"Device removed: {pair.Key} - {pair.Value.Name}"); DeviceMessageReceived?.Invoke(this, new MessageReceivedEventArgs(new DeviceRemoved(pair.Key))); } }
private void DeviceAddedHandler(object aObj, DeviceAddedEventArgs aEvent) { // Devices can be turned off by the time they get to this point, at which point they end up null. Make sure the device isn't null. if (aEvent.Device == null) { return; } var duplicates = from x in _devices where x.Value.Identifier == aEvent.Device.Identifier select x; if (duplicates.Any() && (duplicates.Count() > 1 || duplicates.First().Value.IsConnected)) { _bpLogger.Debug($"Already have device {aEvent.Device.Name} in Devices list"); return; } // If we get to 4 billion devices connected, this may be a problem. var deviceIndex = duplicates.Any() ? duplicates.First().Key : (uint)Interlocked.Increment(ref _deviceIndexCounter); _bpLogger.Info((duplicates.Any() ? "Re-" : string.Empty) + $"Adding Device {aEvent.Device.Name} at index {deviceIndex}"); _devices[deviceIndex] = aEvent.Device; aEvent.Device.DeviceRemoved += DeviceRemovedHandler; var msg = new DeviceAdded(deviceIndex, aEvent.Device.Name, GetAllowedMessageTypesAsStrings(aEvent.Device).ToArray()); DeviceMessageReceived?.Invoke(this, new MessageReceivedEventArgs(msg)); }
private void MessageEmittedHandler(object sender, MessageReceivedEventArgs e) { DeviceMessageReceived?.Invoke(this, e); }
private void MessageEmittedHandler(object aSender, MessageReceivedEventArgs aEvent) { DeviceMessageReceived?.Invoke(this, aEvent); }