public async void TestPingTimeoutUdp() { Peer sender = null; Peer recv1 = null; ChannelCreator cc = null; try { sender = new PeerBuilder(new Number160("0x9876")) .SetMaintenanceTask(Utils2.CreateInfiniteIntervalMaintenanceTask()) .SetP2PId(55) .SetPorts(2424) .Start(); recv1 = new PeerBuilder(new Number160("0x1234")) .SetMaintenanceTask(Utils2.CreateInfiniteIntervalMaintenanceTask()) .SetP2PId(55) .SetPorts(8088) .Start(); var handshake1 = new PingRpc(sender.PeerBean, sender.ConnectionBean, false, true, true); var handshake2 = new PingRpc(recv1.PeerBean, recv1.ConnectionBean, false, true, true); cc = await recv1.ConnectionBean.Reservation.CreateAsync(1, 0); var tr = handshake1.PingUdpAsync(recv1.PeerAddress, cc, new DefaultConnectionConfiguration()); try { await tr; Assert.Fail("Timeout should have let task fail."); } catch (Exception) { Assert.IsTrue(tr.IsFaulted); } } finally { if (cc != null) { cc.ShutdownAsync().Wait(); } if (sender != null) { sender.ShutdownAsync().Wait(); } if (recv1 != null) { recv1.ShutdownAsync().Wait(); } } }
public async void TestPingBroadcastUdpToJava() { // setup Java server and get it's PeerAddress _tcs = new TaskCompletionSource <PeerAddress>(); ThreadPool.QueueUserWorkItem(delegate { JarRunner.Run("JavaPingReceiver-start", DataReceived); }); PeerAddress server = await _tcs.Task; // ping & test Peer sender = null; ChannelCreator cc = null; try { // setup .NET sender sender = new PeerBuilder(new Number160("0x9876")). SetP2PId(55). SetPorts(2424). Start(); cc = await sender.ConnectionBean.Reservation.CreateAsync(1, 0); var handshake = new PingRpc(sender.PeerBean, sender.ConnectionBean); var task = handshake.PingBroadcastUdpAsync(server, cc, new DefaultConnectionConfiguration()); var responseMessage = await task; Assert.IsTrue(task.IsCompleted && !task.IsFaulted); Assert.AreEqual(responseMessage.Sender, server); Assert.IsTrue(responseMessage.Type == Message.MessageType.Ok); Assert.IsTrue(responseMessage.Command == Core.Rpc.Rpc.Commands.Ping.GetNr()); } finally { if (cc != null) { cc.ShutdownAsync().Wait(); } if (sender != null) { sender.ShutdownAsync().Wait(); } JarRunner.WriteToProcess("JavaPingReceiver-stop"); } }
public async void TestFireUdpFromJava() { // TODO find a way to check whether Java side received the ff ping // setup Java server and get it's PeerAddress _tcs = new TaskCompletionSource <PeerAddress>(); ThreadPool.QueueUserWorkItem(delegate { JarRunner.Run("JavaPingReceiver-start", DataReceived); }); PeerAddress server = await _tcs.Task; // ping & test Peer sender = null; ChannelCreator cc = null; try { // setup .NET sender sender = new PeerBuilder(new Number160("0x9876")). SetP2PId(55). SetPorts(2424). Start(); cc = await sender.ConnectionBean.Reservation.CreateAsync(1, 0); var handshake = new PingRpc(sender.PeerBean, sender.ConnectionBean); var task = handshake.FireUdpAsync(server, cc, new DefaultConnectionConfiguration()); var responseMessage = await task; Assert.IsTrue(task.IsCompleted && !task.IsFaulted); Assert.IsTrue(responseMessage == null); } finally { if (cc != null) { cc.ShutdownAsync().Wait(); } if (sender != null) { sender.ShutdownAsync().Wait(); } JarRunner.WriteToProcess("JavaPingReceiver-stop"); } }
public async void TestPingUdpToJava() { // setup Java server and get it's PeerAddress _tcs = new TaskCompletionSource<PeerAddress>(); ThreadPool.QueueUserWorkItem(delegate { JarRunner.Run("JavaPingReceiver-start", DataReceived); }); PeerAddress server = await _tcs.Task; // ping & test Peer sender = null; ChannelCreator cc = null; try { // setup .NET sender sender = new PeerBuilder(new Number160("0x9876")). SetP2PId(55). SetPorts(2424). Start(); cc = await sender.ConnectionBean.Reservation.CreateAsync(1, 0); var handshake = new PingRpc(sender.PeerBean, sender.ConnectionBean); var task = handshake.PingUdpAsync(server, cc, new DefaultConnectionConfiguration()); var responseMessage = await task; Assert.IsTrue(task.IsCompleted && !task.IsFaulted); Assert.AreEqual(responseMessage.Sender, server); Assert.IsTrue(responseMessage.Type == Message.MessageType.Ok); Assert.IsTrue(responseMessage.Command == Core.Rpc.Rpc.Commands.Ping.GetNr()); } finally { if (cc != null) { cc.ShutdownAsync().Wait(); } if (sender != null) { sender.ShutdownAsync().Wait(); } JarRunner.WriteToProcess("JavaPingReceiver-stop"); } }
public async void TestPingUdp() { Peer sender = null; Peer recv1 = null; ChannelCreator cc = null; try { sender = new PeerBuilder(new Number160("0x9876")). SetP2PId(55). SetPorts(2424). Start(); recv1 = new PeerBuilder(new Number160("0x1234")). SetP2PId(55). SetPorts(8088). Start(); var handshake = new PingRpc(sender.PeerBean, sender.ConnectionBean); cc = await recv1.ConnectionBean.Reservation.CreateAsync(1, 0); var t = handshake.PingUdpAsync(recv1.PeerAddress, cc, new DefaultConnectionConfiguration()); await t; Assert.IsTrue(t.IsCompleted && !t.IsFaulted); } catch (Exception ex) { throw ex; } finally { if (cc != null) { cc.ShutdownAsync().Wait(); } if (sender != null) { sender.ShutdownAsync().Wait(); } if (recv1 != null) { recv1.ShutdownAsync().Wait(); } } }
public async void TestPingHandlerError() { Peer sender = null; Peer recv1 = null; ChannelCreator cc = null; try { sender = new PeerBuilder(new Number160("0x9876")) .SetP2PId(55) .SetPorts(2424) .Start(); recv1 = new PeerBuilder(new Number160("0x1234")) .SetP2PId(55) .SetPorts(8088) .Start(); var handshake1 = new PingRpc(sender.PeerBean, sender.ConnectionBean, false, true, false); var handshake2 = new PingRpc(recv1.PeerBean, recv1.ConnectionBean, false, true, false); cc = await recv1.ConnectionBean.Reservation.CreateAsync(0, 1); var tr = handshake1.PingTcpAsync(recv1.PeerAddress, cc, new DefaultConnectionConfiguration()); await tr; Assert.IsTrue(tr.IsFaulted); } finally { if (cc != null) { cc.ShutdownAsync().Wait(); } if (sender != null) { sender.ShutdownAsync().Wait(); } if (recv1 != null) { recv1.ShutdownAsync().Wait(); } } }
public Peer SetPingRpc(PingRpc pingRpc) { _pingRpc = pingRpc; return(this); }
/// <summary> /// Creates a peer and starts to listen for incoming connections. /// </summary> /// <returns>The peer that can operate in the P2P network.</returns> public Peer Start() { if (_behindFirewall == null) { _behindFirewall = false; } if (ChannelServerConfiguration == null) { ChannelServerConfiguration = CreateDefaultChannelServerConfiguration(); ChannelServerConfiguration.SetPortsForwarding(new Ports(TcpPortForwarding, UdpPortForwarding)); if (TcpPort == -1) { TcpPort = Ports.DefaultPort; } if (UdpPort == -1) { UdpPort = Ports.DefaultPort; } ChannelServerConfiguration.SetPorts(new Ports(TcpPort, UdpPort)); ChannelServerConfiguration.SetIsBehindFirewall(_behindFirewall.Value); } if (ChannelClientConfiguration == null) { ChannelClientConfiguration = CreateDefaultChannelClientConfiguration(); } if (KeyPair == null) { KeyPair = EmptyKeyPair; } if (P2PId == -1) { P2PId = 1; } if (InterfaceBindings == null) { InterfaceBindings = new Bindings(); } ChannelServerConfiguration.SetBindingsIncoming(InterfaceBindings); if (ExternalBindings == null) { ExternalBindings = new Bindings(); } ChannelClientConfiguration.SetBindingsOutgoing(ExternalBindings); if (PeerMap == null) { PeerMap = new PeerMap(new PeerMapConfiguration(PeerId)); } if (MasterPeer == null && Timer == null) { Timer = new ExecutorService(); } PeerCreator peerCreator; if (MasterPeer != null) { // create slave peer peerCreator = new PeerCreator(MasterPeer.PeerCreator, PeerId, KeyPair); } else { // create master peer peerCreator = new PeerCreator(P2PId, PeerId, KeyPair, ChannelServerConfiguration, ChannelClientConfiguration, Timer); } var peer = new Peer(P2PId, PeerId, peerCreator); var peerBean = peerCreator.PeerBean; peerBean.AddPeerStatusListener(PeerMap); var connectionBean = peerCreator.ConnectionBean; peerBean.SetPeerMap(PeerMap); peerBean.SetKeyPair(KeyPair); if (BloomfilterFactory == null) { peerBean.SetBloomfilterFactory(new DefaultBloomFilterFactory()); } if (BroadcastHandler == null) { BroadcastHandler = new DefaultBroadcastHandler(peer, new Random()); } // set/enable RPC if (IsEnabledHandshakeRpc) { var pingRpc = new PingRpc(peerBean, connectionBean); peer.SetPingRpc(pingRpc); } if (IsEnabledQuitRpc) { var quitRpc = new QuitRpc(peerBean, connectionBean); quitRpc.AddPeerStatusListener(PeerMap); peer.SetQuitRpc(quitRpc); } if (IsEnabledNeighborRpc) { var neighborRpc = new NeighborRpc(peerBean, connectionBean); peer.SetNeighborRpc(neighborRpc); } if (IsEnabledDirectDataRpc) { var directDataRpc = new DirectDataRpc(peerBean, connectionBean); peer.SetDirectDataRpc(directDataRpc); } if (IsEnabledBroadcastRpc) { var broadcastRpc = new BroadcastRpc(peerBean, connectionBean, BroadcastHandler); peer.SetBroadcastRpc(broadcastRpc); } if (IsEnabledRoutingRpc && IsEnabledNeighborRpc) { var routing = new DistributedRouting(peerBean, peer.NeighborRpc); peer.SetDistributedRouting(routing); } if (MaintenanceTask == null && IsEnabledMaintenance) { MaintenanceTask = new MaintenanceTask(); } if (MaintenanceTask != null) { MaintenanceTask.Init(peer, connectionBean.Timer); MaintenanceTask.AddMaintainable(PeerMap); } peerBean.SetMaintenanceTask(MaintenanceTask); // set the ping builder for the heart beat connectionBean.Sender.SetPingBuilderFactory(new PingBuilderFactory(peer)); foreach (var peerInit in _toInitialize) { peerInit.Init(peer); } return peer; }
public Peer SetPingRpc(PingRpc pingRpc) { _pingRpc = pingRpc; return this; }
/// <summary> /// Creates a peer and starts to listen for incoming connections. /// </summary> /// <returns>The peer that can operate in the P2P network.</returns> public Peer Start() { if (_behindFirewall == null) { _behindFirewall = false; } if (ChannelServerConfiguration == null) { ChannelServerConfiguration = CreateDefaultChannelServerConfiguration(); ChannelServerConfiguration.SetPortsForwarding(new Ports(TcpPortForwarding, UdpPortForwarding)); if (TcpPort == -1) { TcpPort = Ports.DefaultPort; } if (UdpPort == -1) { UdpPort = Ports.DefaultPort; } ChannelServerConfiguration.SetPorts(new Ports(TcpPort, UdpPort)); ChannelServerConfiguration.SetIsBehindFirewall(_behindFirewall.Value); } if (ChannelClientConfiguration == null) { ChannelClientConfiguration = CreateDefaultChannelClientConfiguration(); } if (KeyPair == null) { KeyPair = EmptyKeyPair; } if (P2PId == -1) { P2PId = 1; } if (InterfaceBindings == null) { InterfaceBindings = new Bindings(); } ChannelServerConfiguration.SetBindingsIncoming(InterfaceBindings); if (ExternalBindings == null) { ExternalBindings = new Bindings(); } ChannelClientConfiguration.SetBindingsOutgoing(ExternalBindings); if (PeerMap == null) { PeerMap = new PeerMap(new PeerMapConfiguration(PeerId)); } if (MasterPeer == null && Timer == null) { Timer = new ExecutorService(); } PeerCreator peerCreator; if (MasterPeer != null) { // create slave peer peerCreator = new PeerCreator(MasterPeer.PeerCreator, PeerId, KeyPair); } else { // create master peer peerCreator = new PeerCreator(P2PId, PeerId, KeyPair, ChannelServerConfiguration, ChannelClientConfiguration, Timer); } var peer = new Peer(P2PId, PeerId, peerCreator); var peerBean = peerCreator.PeerBean; peerBean.AddPeerStatusListener(PeerMap); var connectionBean = peerCreator.ConnectionBean; peerBean.SetPeerMap(PeerMap); peerBean.SetKeyPair(KeyPair); if (BloomfilterFactory == null) { peerBean.SetBloomfilterFactory(new DefaultBloomFilterFactory()); } if (BroadcastHandler == null) { BroadcastHandler = new DefaultBroadcastHandler(peer, new Random()); } // set/enable RPC if (IsEnabledHandshakeRpc) { var pingRpc = new PingRpc(peerBean, connectionBean); peer.SetPingRpc(pingRpc); } if (IsEnabledQuitRpc) { var quitRpc = new QuitRpc(peerBean, connectionBean); quitRpc.AddPeerStatusListener(PeerMap); peer.SetQuitRpc(quitRpc); } if (IsEnabledNeighborRpc) { var neighborRpc = new NeighborRpc(peerBean, connectionBean); peer.SetNeighborRpc(neighborRpc); } if (IsEnabledDirectDataRpc) { var directDataRpc = new DirectDataRpc(peerBean, connectionBean); peer.SetDirectDataRpc(directDataRpc); } if (IsEnabledBroadcastRpc) { var broadcastRpc = new BroadcastRpc(peerBean, connectionBean, BroadcastHandler); peer.SetBroadcastRpc(broadcastRpc); } if (IsEnabledRoutingRpc && IsEnabledNeighborRpc) { var routing = new DistributedRouting(peerBean, peer.NeighborRpc); peer.SetDistributedRouting(routing); } if (MaintenanceTask == null && IsEnabledMaintenance) { MaintenanceTask = new MaintenanceTask(); } if (MaintenanceTask != null) { MaintenanceTask.Init(peer, connectionBean.Timer); MaintenanceTask.AddMaintainable(PeerMap); } peerBean.SetMaintenanceTask(MaintenanceTask); // set the ping builder for the heart beat connectionBean.Sender.SetPingBuilderFactory(new PingBuilderFactory(peer)); foreach (var peerInit in _toInitialize) { peerInit.Init(peer); } return(peer); }