Skip to content

Commit 6a122f5

Browse files
committed
working version
1 parent ca252a0 commit 6a122f5

File tree

3 files changed

+70
-16
lines changed

3 files changed

+70
-16
lines changed

Cargo.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ env_logger = "0.6.2"
1313
log = "0.4.7"
1414
chrono = "0.4.7"
1515
crossbeam-channel = "0.3.8"
16+
crossbeam-queue = "0.1.2"
17+
crossbeam-utils = "0.6.5"

src/main.rs

Lines changed: 57 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,22 @@ use env_logger;
22
use grin_core::core::hash::Hashed;
33
use grin_core::pow::Difficulty;
44
use 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};
77
use std::thread;
88
use std::time::Duration;
99

10-
use grin_core::core;
11-
use grin_core::core::hash::Hash;
1210
use grin_core::genesis::genesis_floo;
1311
use 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};
1813
use grin_p2p::Peer;
19-
use grin_p2p::Server;
2014
use log::*;
15+
use std::collections::{HashMap, VecDeque};
2116

2217
mod adapter;
2318
use crate::adapter::FakeAdapter;
24-
use grin_util::StopState;
19+
use crossbeam_queue::SegQueue;
20+
use crossbeam_utils::sync::ShardedLock;
2521

2622
fn 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

4889
fn connect(

0 commit comments

Comments
 (0)