private void RemoveFromGroupInternal(int groupLink, int channelLink, bool force) { List <GroupChannelMap> maps = _dataAdapter.GetGroupMap(); GroupChannelMap map = maps.SingleOrDefault(x => x.GroupLINK == groupLink && x.ChannelLINK == channelLink); if (map == null) { return; } GroupInfo defaultGroup = GetOrCreateDefaultGroup(); GroupInfo[] groups = GetChannelGroups(channelLink); if (groups.Count() == 1) { if (force) { _dataAdapter.DeleteGroupMap(map); } else { if (groups[0].LINK != defaultGroup.LINK) { map.GroupLINK = defaultGroup.LINK; _dataAdapter.SaveGroupMap(map); } } } else if (groups.Count() > 1) { _dataAdapter.DeleteGroupMap(map); } RefreshGroups(); }
public static GroupChannelMap ToObj(this DAO.GroupChannelMap dao) { if (dao == null) { return(null); } var obj = new GroupChannelMap(); dao.CloneTo(obj); return(obj); }
public static DAO.GroupChannelMap ToDao(this GroupChannelMap obj) { if (obj == null) { return(null); } var dao = new DAO.GroupChannelMap(); dao.LINK = obj.LINK; dao.GroupLINK = obj.GroupLINK; dao.ChannelLINK = obj.ChannelLINK; return(dao); }
/// <summary> /// /// </summary> /// <param name="groupLink"></param> /// <param name="channelLink"></param> public void AddChannelToGroup(int groupLink, int channelLink) { List <GroupChannelMap> maps = _dataAdapter.GetGroupMap(); GroupChannelMap map = maps.SingleOrDefault(x => x.GroupLINK == groupLink && x.ChannelLINK == channelLink); if (map == null) { map = new GroupChannelMap() { GroupLINK = groupLink, ChannelLINK = channelLink }; _dataAdapter.SaveGroupMap(map); RefreshGroups(); } }
public static void CloneTo(this DAO.GroupChannelMap dao, GroupChannelMap obj) { #region Validate parameters if (dao == null) { throw new ArgumentNullException("dao"); } if (obj == null) { throw new ArgumentNullException("obj"); } #endregion obj.LINK = dao.LINK; obj.GroupLINK = dao.GroupLINK; obj.ChannelLINK = dao.ChannelLINK; }
/// <summary> /// /// </summary> /// <param name="groupLink"></param> public void DeleteGroup(int groupLink) { GroupInfo groupInfo = FindGroupInfo(groupLink); if (groupInfo == null) { return; } _dataAdapter.DeleteGroup(groupInfo); _groups.TryRemove(groupInfo.Name, out GroupInfo g); GroupInfo defaultGroup = GetOrCreateDefaultGroup(); List <GroupChannelMap> maps = _dataAdapter.GetGroupMap(); foreach (int channelLink in groupInfo.Channels) { GroupChannelMap map = maps.SingleOrDefault(x => x.GroupLINK == groupLink && x.ChannelLINK == channelLink); if (map != null) { _dataAdapter.DeleteGroupMap(map); } GroupInfo[] groups = GetChannelGroups(channelLink); if (groups.Count() == 0) { map = new GroupChannelMap() { GroupLINK = defaultGroup.LINK, ChannelLINK = channelLink }; _dataAdapter.SaveGroupMap(map); } } RefreshGroups(); }
public void LoadChannels() { var errors = new List <Exception>(); GroupInfo deafaultGroup = GetOrCreateDefaultGroup(); List <ChannelInfo> allChannels = _dataAdapter.GetChannels(); List <GroupInfo> allGroups = _dataAdapter.GetGroups(); allChannels.ForEach(channelInfo => { try { // Если канал не принадлежит ни одной группе, то включаем его в группу по умолчанию if (!allGroups.Any(group => group.Channels.Contains(channelInfo.LINK))) { var map = new GroupChannelMap() { GroupLINK = deafaultGroup.LINK, ChannelLINK = channelInfo.LINK }; _dataAdapter.SaveGroupMap(map); } } catch (Exception ex) { lock (errors) { errors.Add(ex); } } }); RefreshGroups(); // Создание и запуск каналов allChannels.ForEach(channelInfo => //allChannels.AsParallel().ForAll(channelInfo => { try { MicroserviceDescription description = _addinManager.FindMicroservice(channelInfo.Provider); if (description == null) { channelInfo.Enabled = false; } else { channelInfo.SetDescription(description); } if (channelInfo.IsSystem()) { channelInfo.SetRealAddress(_busSettings.Database.ConnectionString); } _dataAdapter.SaveChannelInfo(channelInfo); if (channelInfo.Enabled) { IChannelContext context = _contextFactory.CreateContext(channelInfo); if (!_channels.TryAdd(channelInfo.VirtAddress, context)) { context.Dispose(); throw new InvalidOperationException($"Канал {channelInfo.VirtAddress} уже существует."); } } } catch (Exception ex) { lock (errors) { errors.Add(ex); } } }); _channels.Values.ToList().ForEach(context => //_channels.Values.AsParallel().ForAll(context => { ChannelInfo channelInfo = context.ChannelInfo; ChannelSettings settings = channelInfo.ChannelSettings(); if (settings.AutoOpen) { try { IChannel channel = context.CreateChannelAsync().Result; //channel.SetSettingsAsync(); channel.OpenAsync().Wait(); } catch (Exception ex) { lock (errors) { errors.Add(ex); } } } }); _channels.Values.ToList().ForEach(context => //_channels.Values.AsParallel().ForAll(context => { ChannelInfo channelInfo = context.ChannelInfo; IChannel channel = context.Channel; if (channel != null && channel.IsOpened) { ChannelSettings settings = channelInfo.ChannelSettings(); if (settings.AutoRun) { try { channel.RunAsync().Wait(); } catch (Exception ex) { lock (errors) { errors.Add(ex); } } } } }); if (errors.Count > 0) { throw new AggregateException(errors); } }