private RangeIChordRing[] registry; // = new RangeDictionary<double, IChordRing>();

        #endregion Fields

        #region Constructors

        public ChordCylinder(IPAddress bootStrapIP, Guid bootStrapChordInstanceGuid, ProxyNodeController proxyNodeController)
        {
            this.proxyNodeController = proxyNodeController;

            registry = new RangeIChordRing[noOfChordRings];
            halo = new ProxyHalo();

            ZhimeraProxyNode bootstrapProxyNode = (ZhimeraProxyNode)(proxyNodeController.getProxyNode(bootStrapIP));

            double perRange = totalRange / (double)(noOfChordRings);
            for (int i = 0; i < noOfChordRings; i++)
            {

                registry[i] = new RangeIChordRing();
                registry[i].min = i * perRange;
                registry[i].max = (i + 1) * perRange;
                if (i == noOfChordRings / 2)
                    registry[i].chordRing = new RealChordRing(bootStrapIP, bootStrapChordInstanceGuid);
                else
                    registry[i].chordRing = new ProxyChordRing(halo, noOfChordRings);
            }
        }
        public ChordCylinder(ProxyNodeController proxyNodeController)
        {
            this.proxyNodeController = proxyNodeController;

            registry = new RangeIChordRing[noOfChordRings];
            halo = new RealHalo();

            double perRange = totalRange / (double)(noOfChordRings);
            for (int i = 0; i < noOfChordRings; i++)
            {
                registry[i] = new RangeIChordRing();
                registry[i].min = i * perRange;
                registry[i].max = (i + 1) * perRange;
                if(i == noOfChordRings/2)
                    registry[i].chordRing = new RealChordRing();
                else
                    registry[i].chordRing = new ProxyChordRing(halo, noOfChordRings);

            }
        }