public void TestDeadlock() { AutoResetEvent finishedEvent = new AutoResetEvent(false); using (BitcoinConnectionListener server = new BitcoinConnectionListener(IPAddress.Loopback, 28333, DeadlockTestConnectionHandler)) { server.Start(); Exception threadException = null; Thread thread = new Thread(() => { try { using (BitcoinEndpoint client = new BitcoinEndpoint(DeadlockTestMessageHandler)) { client.Connect("localhost", 28333); SendDeadlockTestSequence(client, "client"); //let other peer to send remaining data Thread.Sleep(1000); } } catch (Exception ex) { threadException = ex; } finally { finishedEvent.Set(); } }); thread.Name = "Test Sending Thread"; thread.IsBackground = true; thread.Start(); Assert.That(finishedEvent.WaitOne(5000), Is.True); Assert.That(threadException, Is.Null); } }
public void TestServer() { using (BitcoinConnectionListener listener = new BitcoinConnectionListener(IPAddress.Any, 8334, ConnectionHandler)) { listener.Start(); Thread.Sleep(30000); listener.Stop(); } }
public void Start() { blockchain.Init(); //todo: review the order in which services and listener start/stop, dispose created entities when start fails services.CreateServices(this, cancellationTokenSource.Token); addressCollection = new NodeAddressCollection(); connectionCollection = new NodeConnectionCollection(cancellationTokenSource.Token); //todo: review, maybe registering event handler is a responsibility of nodeDiscoveryService //todo: connectionCollection.Changed += nodeDiscoveryService.Signal; - signal nodeDiscoveryService to connect to new nodes (is it its responsibility?) //todo: discover own external address? (it seems useless without external port) //todo: use setting to specify port and operating mode listener = new BitcoinConnectionListener(IPAddress.Any, 8333, HandleIncomingConnection); listener.Start(); services.Start(); Started = true; }