public void EmitEventTypes(bool updatedEvents) { EnergyEventsProxy proxy = null; EnergyEventsEventInfo[] eventTypes; try { NodeReaderWriterLock.AcquireReaderLock(3000); proxy = new EnergyEventsProxy(); int count = 0; foreach (DeviceManagerBase mgr in ManagerManager.RunningDeviceManagers) foreach (Device.DeviceBase dev in mgr.GenericDeviceList) foreach (Device.EnergyEventStatus status in dev.EventStatusList) count += status.EmitEvents.Count; eventTypes = new EnergyEventsEventInfo[count]; if (count > 0) { count = 0; foreach (DeviceManagerBase mgr in ManagerManager.RunningDeviceManagers) foreach (Device.DeviceBase dev in mgr.GenericDeviceList) foreach(Device.EnergyEventStatus status in dev.EventStatusList) foreach(Device.DeviceEventConfig eEvent in status.EmitEvents) { eventTypes[count].Id.Name = eEvent.EventName; eventTypes[count].Type = eEvent.EventType.ToString(); eventTypes[count].Description = ""; eventTypes[count].FeedInYield = eEvent.UseForFeedIn && eEvent.EventType == EventType.Yield; eventTypes[count].FeedInConsumption = eEvent.UseForFeedIn && eEvent.EventType == EventType.Consumption; count++; } proxy.AvailableEventList(updatedEvents, eventTypes); } } catch (Exception e) { SystemServices.LogMessage("EmitEventTypes", "Exception: " + e.Message, LogEntryType.ErrorMessage); } try { if (proxy != null) proxy.Close(); } catch (Exception e) { SystemServices.LogMessage("EmitEventTypes", "Closing proxy - Exception: " + e.Message, LogEntryType.ErrorMessage); } finally { if (NodeReaderWriterLock.IsReaderLockHeld) NodeReaderWriterLock.ReleaseReaderLock(); } }