示例#1
0
        /// <summary>
        /// Creates peers for benchmarking. The first peer will be used as the master.
        /// This means that shutting down the master will shut down all other peers as well.
        /// </summary>
        /// <param name="nrOfPeers">Number of peers to create.</param>
        /// <param name="rnd">The random object used for peer ID creation.</param>
        /// <param name="port">The UDP and TCP port.</param>
        /// <param name="maintenance">Indicates whether maintenance should be enabled.</param>
        /// <param name="timeout">Indicates whether timeout should be enabled.</param>
        /// <returns></returns>
        public static Peer[] CreateNodes(int nrOfPeers, InteropRandom rnd, int port, bool maintenance, bool timeout)
        {
            Console.WriteLine("Creating network with {0} peers...", nrOfPeers);

            var peers = new Peer[nrOfPeers];

            var masterId  = CreateRandomId(rnd);
            var masterMap = new PeerMap(new PeerMapConfiguration(masterId));
            var pb        = new PeerBuilder(masterId)
                            .SetPorts(port)
                            .SetEnableMaintenance(maintenance)
                            .SetExternalBindings(new Bindings())
                            .SetPeerMap(masterMap);

            if (!timeout)
            {
                pb.SetChannelServerConfiguration(CreateInfiniteTimeoutChannelServerConfiguration(port));
            }
            peers[0] = pb.Start();
            //Logger.Info("Created master peer: {0}.", peers[0].PeerId);

            for (int i = 1; i < nrOfPeers; i++)
            {
                peers[i] = CreateSlave(peers[0], rnd, maintenance, timeout);
            }
            return(peers);
        }
示例#2
0
 public Sender(Number160 peerId, IList <IPeerStatusListener> peerStatusListeners,
               ChannelClientConfiguration channelClientConfiguration, Dispatcher dispatcher)
 {
     _peerStatusListeners       = peerStatusListeners;
     ChannelClientConfiguration = channelClientConfiguration;
     _dispatcher = dispatcher;
     _random     = new InteropRandom((ulong)peerId.GetHashCode());
 }
示例#3
0
        private static Number160 CreateRandomId(InteropRandom rnd)
        {
            var vals = new int[Number160.IntArraySize];

            for (int i = 0; i < vals.Length; i++)
            {
                vals[i] = rnd.NextInt(Int32.MaxValue);
            }
            return(new Number160(vals));
        }
示例#4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="item"></param>
        /// <returns>Always returns false.</returns>
        public bool Add(T item)
        {
            var r = new InteropRandom((ulong)item.GetHashCode());

            for (int x = 0; x < _k; x++)
            {
                BitArray.Set(r.NextInt(_bitArraySize), true);
            }
            return(false);
        }
示例#5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="obj"></param>
        /// <returns>False indicates that o was definitely not added to this BloomFilter, true indicates that it probably was. The probability can be estimated using the expectedFalsePositiveProbability() method.</returns>
        public bool Contains(Object obj)
        {
            var r = new InteropRandom((ulong)obj.GetHashCode());

            for (int x = 0; x < _k; x++)
            {
                if (!BitArray.Get(r.NextInt(_bitArraySize)))
                {
                    return(false);
                }
            }
            return(true);
        }
示例#6
0
        public void TestInteropSeed()
        {
            // use the same seed as in Java
            const int seed    = 1234567890;
            var       random  = new InteropRandom(seed);
            var       result1 = random.NextInt(1000);
            var       result2 = random.NextInt(500);
            var       result3 = random.NextInt(10);

            // requires same results as in Java
            // result1 is 677
            // result2 is 242
            // result3 is 1
            Assert.AreEqual(result1, 677);
            Assert.AreEqual(result2, 242);
            Assert.AreEqual(result3, 1);
        }
示例#7
0
        private static Peer CreateSlave(Peer master, InteropRandom rnd, bool maintenance, bool timeout)
        {
            var slaveId  = CreateRandomId(rnd);
            var slaveMap = new PeerMap(new PeerMapConfiguration(slaveId).SetPeerNoVerification());
            var pb       = new PeerBuilder(slaveId)
                           .SetMasterPeer(master)
                           .SetEnableMaintenance(maintenance)
                           .SetExternalBindings(new Bindings())
                           .SetPeerMap(slaveMap);

            if (!timeout)
            {
                pb.SetChannelServerConfiguration(CreateInfiniteTimeoutChannelServerConfiguration(Ports.DefaultPort));
            }
            var slave = pb.Start();

            //Logger.Info("Created slave peer {0}.", slave.PeerId);
            return(slave);
        }
示例#8
0
        public void TestSeed()
        {
            // create a random seed
            var r    = new Random();
            var seed = (ulong)r.Next();

            int tests   = 20;
            var randoms = new InteropRandom[tests];
            var results = new int[tests];

            for (int i = 0; i < tests; i++)
            {
                randoms[i] = new InteropRandom(seed);
                results[i] = randoms[i].NextInt(1000);

                if (i > 0)
                {
                    Assert.AreEqual(results[i], results[i - 1]);
                }
            }
        }