public static void SaveChannel(XmlElement node, IChannel channel)
        {
            OPCBaseChannel channelBase = (OPCBaseChannel)channel;

            node.SetAttribute("name", channelBase.Name);
            node.SetAttribute("opcChannel", channelBase.OpcChannel);
            node.SetAttribute("opcServer", channelBase.OpcServer);
            node.SetAttribute("opcHost", channelBase.OpcHost);
        }
        public bool Connect()
        {
            if (IsConnected)
            {
                return(false);
            }

            connectionGroups.Clear();
            System.GC.Collect();

            if (channels.Count > 0)
            {
                List <IChannel> originalChannels = new List <IChannel>();
                originalChannels.AddRange(channels);
                do
                {
                    List <OPCBaseChannel> groupChannels = new List <OPCBaseChannel>();
                    OPCBaseChannel        lhc           = (OPCBaseChannel)originalChannels[0];
                    groupChannels.Add(lhc);
                    originalChannels.RemoveAt(0);
                    for (int i = originalChannels.Count - 1; i >= 0; i--)
                    {
                        OPCBaseChannel rhc = (OPCBaseChannel)originalChannels[i];
                        if (lhc.OpcServer == rhc.OpcServer && lhc.OpcHost == rhc.OpcHost)
                        {
                            groupChannels.Add(rhc);
                            originalChannels.RemoveAt(i);
                        }
                    }
                    connectionGroups.Add(new ConnectionGroup(lhc.OpcServer, lhc.OpcHost, groupChannels));
                } while (originalChannels.Count > 0);
            }

            connectedFlag = true;
            return(IsConnected);
        }