public override ConnectionResult OpenDeviceConnection(string deviceCode, out RemoteHostInfo hostInfo)
        {
            ConnectionResult err = ConnectionResult.Successful;
            string           ip;

            hostInfo = default(RemoteHostInfo);

            if (!AddressBook.ContainsKey(deviceCode))
            {
                err = UpdateAddressBook(deviceCode, AddressBook);
                if (err != 0)
                {
                    return(err);
                }
                err = GetIp(deviceCode, _timeOut, out ip);
                if (err != 0)
                {
                    return(err);
                }
                AddressBook.AddOrUpdate(deviceCode, new Addresses(EmptyMacAddress, ip), (s, addresses) => addresses);
            }
            ip = AddressBook[deviceCode].IpAddress;
            if (String.IsNullOrEmpty(ip))
            {
                err = GetIp(deviceCode, _timeOut, out ip);
                if (err != 0)
                {
                    return(err);
                }
                AddressBook[deviceCode] = new Addresses(EmptyMacAddress, ip);
            }
            hostInfo = new RemoteHostInfo(ip, TcpProlocol);
            return(err);
        }
        protected override ConnectionResult UpdateAddressBook(string deviceCode, AddressBook addressBook)
        {
            var err = GetIp(deviceCode, _timeOut, out string ip);

            addressBook.AddOrUpdate(deviceCode, new Addresses(EmptyMacAddress, ip), (s, addresses) => addresses);
            return(err);
        }
        protected sealed override AddressBook GetAddressBookDb(IList <string> hostCodes)
        {
            AddressBook addressBook = new AddressBook(new Dictionary <string, Addresses>(hostCodes.Count));

            foreach (string hostCode in hostCodes)
            {
                addressBook.AddOrUpdate(hostCode, new Addresses(), (s, addresses) => addresses);
            }
            return(addressBook);
        }
 public override void AddAddress(string code, Addresses addresses)
 {
     AddressBook.AddOrUpdate(code, addresses, (s, oldAddress) => addresses);
 }