/// <summary> /// Creates a port from the specified settings node tree. /// </summary> /// <param name="portNode">The port node.</param> /// <returns>The device port.</returns> /// <exception cref="System.Exception"> /// Invalid port format. /// </exception> protected virtual IDevicePort CreatePort(SettingsNode portNode) { SettingsNode tcpAddrNode = null; if (portNode.ContainsName("Address")) { tcpAddrNode = portNode["Address"]; } else if (portNode.ContainsName("IPAddress")) { tcpAddrNode = portNode["IPAddress"]; } else if (portNode.ContainsName("IpAddress")) { tcpAddrNode = portNode["IpAddress"]; } else if (portNode.ContainsName("TCPAddress")) { tcpAddrNode = portNode["TCPAddress"]; } else if (portNode.ContainsName("TcpAddress")) { tcpAddrNode = portNode["TcpAddress"]; } if (tcpAddrNode != null) { string ipAddrName = tcpAddrNode.GetValueAs <string>(); IPAddress ipAddress; if (!IPAddress.TryParse(ipAddrName, out ipAddress)) { throw new Exception(String.Format("'{0}' is an invalid IP address.", ipAddrName)); } DevicePortTcp tcpPort = new DevicePortTcp(ipAddress); if (portNode.ContainsName("Port")) { tcpPort.Port = portNode["Port"].GetValueAs <int>(); } if (portNode.ContainsName("ReplyAddress")) { string replyAddrName = portNode["ReplyAddress"].GetValueAs <string>(); IPAddress replyAddress; if (!IPAddress.TryParse(replyAddrName, out replyAddress)) { throw new Exception(String.Format("'{0}' is an invalid reply IP address.", replyAddrName)); } tcpPort.ReplyAddress = replyAddress; if (portNode.ContainsName("ReplyPort")) { tcpPort.ReplyPort = portNode["ReplyPort"].GetValueAs <int>(); } } return(tcpPort); } if (portNode.ContainsName("Number")) { int portNum = portNode["Number"].GetValueAs <int>(); return(new DevicePortNumber(portNum)); } if (portNode.ContainsName("Name")) { string portName = portNode["Name"].GetValueAs <string>(); return(new DevicePortName(portName)); } if (portNode.HasAValue) { string portShorthand = portNode.GetValueAs <string>(); return(CreatePort(portShorthand)); } throw new Exception("Invalid port format."); }