Exemple #1
0
        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();
        }
Exemple #2
0
        public static GroupChannelMap ToObj(this DAO.GroupChannelMap dao)
        {
            if (dao == null)
            {
                return(null);
            }

            var obj = new GroupChannelMap();

            dao.CloneTo(obj);

            return(obj);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        /// <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();
            }
        }
Exemple #5
0
        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;
        }
Exemple #6
0
        /// <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();
        }
Exemple #7
0
        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);
            }
        }