in python/rocketmq/rpc_client.py [0:0]
def __init__(self, endpoints):
self.Addresses = []
self.scheme = AddressScheme.Unspecified
self._hash = None
if type(endpoints) == str:
if endpoints.startswith(self.HttpPrefix):
endpoints = endpoints[len(self.HttpPrefix):]
if endpoints.startswith(self.HttpsPrefix):
endpoints = endpoints[len(self.HttpsPrefix):]
index = endpoints.find(self.EndpointSeparator)
port = int(endpoints[index + 1:]) if index > 0 else 80
host = endpoints[:index] if index > 0 else endpoints
address = Address(host, port)
self.Addresses.append(address)
try:
socket.inet_pton(socket.AF_INET, host)
self.scheme = AddressScheme.IPv4
except socket.error:
try:
socket.inet_pton(socket.AF_INET6, host)
self.scheme = AddressScheme.IPv6
except socket.error:
self.scheme = AddressScheme.DomainName
self.Addresses.append(address)
# Assuming AddressListEqualityComparer exists
self._hash = 17
self._hash = (self._hash * 31) + reduce(
operator.xor, (hash(address) for address in self.Addresses)
)
self._hash = (self._hash * 31) + hash(self.scheme)
else:
self.Addresses = [
Address(addr.host, addr.port) for addr in endpoints.addresses
]
if not self.Addresses:
raise Exception("No available address")
if endpoints.scheme == "Ipv4":
self.scheme = AddressScheme.Ipv4
elif endpoints.scheme == "Ipv6":
self.scheme = AddressScheme.Ipv6
else:
self.scheme = AddressScheme.DomainName
if len(self.Addresses) > 1:
raise Exception(
"Multiple addresses are\
not allowed in domain scheme"
)
self._hash = self._calculate_hash()