@@ -2,26 +2,22 @@ use env_logger;
22use grin_core:: core:: hash:: Hashed ;
33use grin_core:: pow:: Difficulty ;
44use grin_p2p:: handshake:: Handshake ;
5- use std:: net:: { IpAddr , Shutdown , SocketAddr , TcpListener , TcpStream } ;
6- use std:: sync:: Arc ;
5+ use std:: net:: { SocketAddr , TcpStream } ;
6+ use std:: sync:: { Arc , Mutex , RwLock } ;
77use std:: thread;
88use std:: time:: Duration ;
99
10- use grin_core:: core;
11- use grin_core:: core:: hash:: Hash ;
1210use grin_core:: genesis:: genesis_floo;
1311use grin_core:: global:: { set_mining_mode, ChainTypes } ;
14- use grin_p2p:: types:: {
15- Capabilities , ChainAdapter , Error , NetAdapter , P2PConfig , PeerAddr , PeerInfo , ReasonForBan ,
16- TxHashSetRead ,
17- } ;
12+ use grin_p2p:: types:: { Capabilities , P2PConfig , PeerAddr } ;
1813use grin_p2p:: Peer ;
19- use grin_p2p:: Server ;
2014use log:: * ;
15+ use std:: collections:: { HashMap , VecDeque } ;
2116
2217mod adapter;
2318use crate :: adapter:: FakeAdapter ;
24- use grin_util:: StopState ;
19+ use crossbeam_queue:: SegQueue ;
20+ use crossbeam_utils:: sync:: ShardedLock ;
2521
2622fn main ( ) {
2723 env_logger:: init ( ) ;
@@ -33,16 +29,61 @@ fn main() {
3329
3430 let handshake = Arc :: new ( Handshake :: new ( genesis_floo ( ) . hash ( ) , cfg. clone ( ) ) ) ;
3531
36- thread:: spawn ( {
32+ let queue = Arc :: new ( SegQueue :: new ( ) ) ;
33+ let hm: HashMap < PeerAddr , Option < Vec < PeerAddr > > > = HashMap :: new ( ) ;
34+ let storage = Arc :: new ( ShardedLock :: new ( hm) ) ;
35+ //let peer_addr = PeerAddr(SocketAddr::new("127.0.0.1".parse().unwrap(), 13414));
36+ let peer_addr = PeerAddr ( SocketAddr :: new ( "35.157.247.209" . parse ( ) . unwrap ( ) , 13414 ) ) ;
37+
38+ queue. push ( peer_addr) ;
39+
40+ let t = thread:: spawn ( {
3741 let handshake = handshake. clone ( ) ;
3842 let local_addr = PeerAddr ( SocketAddr :: new ( cfg. host , cfg. port ) ) ;
39- move || {
40- let peer_addr = PeerAddr ( SocketAddr :: new ( "127.0.0.1" . parse ( ) . unwrap ( ) , 13414 ) ) ;
41- let res = connect ( peer_addr, local_addr, & handshake) ;
42- println ! ( "\x1B [35;1m res\x1B [0m = {:?}" , res) ;
43+ let queue = queue. clone ( ) ;
44+ let storage = storage. clone ( ) ;
45+ move || loop {
46+ info ! ( "New iterations" ) ;
47+ let peer_addr = match queue. pop ( ) {
48+ Ok ( addr) => addr,
49+ Err ( e) => {
50+ warn ! ( "Queue is emtpy. Quit." ) ;
51+ break ;
52+ }
53+ } ;
54+ println ! ( "\x1B [33;1m peer_addr\x1B [0m = {:?}" , peer_addr) ;
55+ match connect ( peer_addr, local_addr, & handshake) {
56+ Ok ( addrs) => {
57+ println ! ( "\x1B [32;1m addrs\x1B [0m = {:?}" , addrs) ;
58+ for a in & addrs {
59+ queue. push ( a. clone ( ) ) ;
60+ }
61+ let mut hm = storage. write ( ) . unwrap ( ) ;
62+ hm. insert ( peer_addr, Some ( addrs) ) ;
63+ }
64+ Err ( e) => {
65+ println ! ( "\x1B [31;1m e\x1B [0m = {:?}" , e) ;
66+ let mut hm = storage. write ( ) . unwrap ( ) ;
67+ hm. insert ( peer_addr, None ) ;
68+ }
69+ }
70+ //info!("Now sleep for 1 sec");
71+ //thread::sleep(Duration::from_secs(1));
4372 }
4473 } ) ;
45- thread:: sleep ( Duration :: from_secs ( 30 ) ) ;
74+ t. join ( ) ;
75+
76+ let mut public = 0 ;
77+ for ( k, v) in & ( * storage. read ( ) . unwrap ( ) ) {
78+ if v. is_some ( ) {
79+ public += 1 ;
80+ }
81+ }
82+ println ! (
83+ "Result: total {}, public: {}" ,
84+ storage. read( ) . unwrap( ) . len( ) ,
85+ public
86+ ) ;
4687}
4788
4889fn connect (
0 commit comments