/// <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; }
public Sender(Number160 peerId, IList<IPeerStatusListener> peerStatusListeners, ChannelClientConfiguration channelClientConfiguration, Dispatcher dispatcher) { _peerStatusListeners = peerStatusListeners; ChannelClientConfiguration = channelClientConfiguration; _dispatcher = dispatcher; _random = new InteropRandom((ulong)peerId.GetHashCode()); }
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; }
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); }
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]); } } }
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); }