1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//! Node connection and message handling
//!
//! # Examples
//!
//! Send and receive a message to a node syncronously:
//!
//! ```no_run, rust
//! use bch::messages::{Message, Ping, Version, NODE_BITCOIN_CASH, PROTOCOL_VERSION};
//! use bch::network::Network;
//! use bch::peer::Peer;
//! use bch::util::rx::Observable;
//! use bch::util::secs_since;
//! use std::time::UNIX_EPOCH;
//!
//! let (ip, port) = Network::Mainnet.seed_iter().next().unwrap();
//! let version = Version {
//! version: PROTOCOL_VERSION,
//! services: NODE_BITCOIN_CASH,
//! timestamp: secs_since(UNIX_EPOCH) as i64,
//! user_agent: "rust-bch".to_string(),
//! ..Default::default()
//! };
//!
//! let peer = Peer::connect(ip, port, Network::Mainnet, version, 0, 0);
//! peer.connected_event().poll();
//!
//! let ping = Message::Ping(Ping { nonce: 0 });
//! peer.send(&ping).unwrap();
//!
//! let response = peer.messages().poll();
//! ```
//!
//! Handle node events asynronously:
//!
//! ```no_run, rust
//! use bch::messages::{Version, NODE_BITCOIN_CASH, PROTOCOL_VERSION};
//! use bch::network::Network;
//! use bch::peer::{Peer, PeerConnected, PeerDisconnected, PeerMessage};
//! use bch::util::rx::{Observable, Observer};
//! use bch::util::secs_since;
//! use std::sync::Arc;
//! use std::time::UNIX_EPOCH;
//!
//! let (ip, port) = Network::Mainnet.seed_iter().next().unwrap();
//! let version = Version {
//! version: PROTOCOL_VERSION,
//! services: NODE_BITCOIN_CASH,
//! timestamp: secs_since(UNIX_EPOCH) as i64,
//! user_agent: "rust-bch".to_string(),
//! ..Default::default()
//! };
//!
//! let peer = Peer::connect(ip, port, Network::Mainnet, version, 0, 0);
//!
//! struct EventHandler {}
//!
//! impl Observer<PeerConnected> for EventHandler {
//! fn next(&self, event: &PeerConnected) {
//! // Handle node connected
//! }
//! }
//!
//! impl Observer<PeerDisconnected> for EventHandler {
//! fn next(&self, event: &PeerDisconnected) {
//! // Handle node disconnected
//! }
//! }
//!
//! impl Observer<PeerMessage> for EventHandler {
//! fn next(&self, event: &PeerMessage) {
//! // Handle message from node
//! }
//! }
//!
//! let event_handler = Arc::new(EventHandler {});
//!
//! peer.connected_event().subscribe(&event_handler);
//! peer.disconnected_event().subscribe(&event_handler);
//! peer.messages().subscribe(&event_handler);
//! ```
pub
pub use ;