Esempio n. 1
0
        public bool SetHWConfigFile(string fileName)
        {
            if (proxyOfHWConfig == null)
            {
                return(false);
            }
            if (string.IsNullOrEmpty(fileName))
            {
                return(false);
            }

            try
            {
                IOAddressList newIOAddressList = proxyOfHWConfig.ParseHWConfigFile(fileName);
                Dictionary <string, IOAddress> newIOAddressDic = newIOAddressList.ToDictionary();
                IOAddress[] listOfAvailableIOAddress           = ListOfAvailableIOAddress.ToArray <IOAddress>();

                foreach (var ioAddress in listOfAvailableIOAddress)
                {
                    if (newIOAddressDic.ContainsKey(ioAddress.UniqueID))
                    { // still exist
                        IOAddress newAddress = newIOAddressDic[ioAddress.UniqueID];

                        newIOAddressDic.Remove(ioAddress.UniqueID);

                        if (ListOfAvailableIOAddress.InsertNewIOAddress(newAddress))
                        {
                            if (IOAddressChanged != null && IsAddressUsed(ioAddress.UniqueID))
                            {
                                IOAddressChanged(newAddress.ToString() + " is updated.");
                            }
                        }
                    }
                    else
                    { // removed
                        ListOfAvailableIOAddress.Remove(ioAddress);

                        if (IOAddressChanged != null && IsAddressUsed(ioAddress.UniqueID))
                        {
                            IOAddressChanged(ioAddress.ToString() + " is not valid any more.");
                        }

                        // remove connection(s) of this IOAddress(by UniqueID)
                        var connections = ListOfIOConnections.Where(a =>
                                                                    a.Address.UniqueID == ioAddress.UniqueID);
                        foreach (var conn in connections)
                        {
                            ListOfIOConnections.Remove(conn);
                        }
                    }
                }

                //add new IO addresses into the list
                foreach (var rest in newIOAddressDic.Values)
                {
                    ListOfAvailableIOAddress.InsertNewIOAddress(rest);
                }

                return(true);
            }
            catch (Exception ee)
            {
                Trace.WriteLine("###[" + ee.Message + "]; Exception : " + ee.Source);
                Trace.WriteLine("###" + ee.StackTrace);
            }

            return(false);
        }