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