internal ClusterNode(ClusterConfiguration configuration, string raw, EndPoint origin) { this.configuration = configuration; this.raw = raw; var parts = raw.Split(StringSplits.Space); var flags = parts[2].Split(StringSplits.Comma); if (flags.Contains("myself")) { endpoint = origin; } else { endpoint = Format.TryParseEndPoint(parts[1]); } nodeId = parts[0]; isSlave = flags.Contains("slave"); parentNodeId = string.IsNullOrWhiteSpace(parts[3]) ? null : parts[3]; List <SlotRange> slots = null; for (int i = 8; i < parts.Length; i++) { SlotRange range; if (SlotRange.TryParse(parts[i], out range)) { if (slots == null) { slots = new List <SlotRange>(parts.Length - i); } slots.Add(range); } } this.slots = slots == null ? NoSlots : slots.AsReadOnly(); }