11use duino_miner:: error:: MinerError ;
22
3- use tokio :: net :: TcpStream ;
3+ use std :: time :: Duration ;
44
55use rand:: { thread_rng, Rng } ;
66use rand:: distributions:: Alphanumeric ;
77
8- use clap:: { AppSettings , Clap } ;
98use tokio:: io:: { AsyncReadExt , AsyncWriteExt } ;
9+ use tokio:: net:: TcpStream ;
1010
11+ use clap:: { AppSettings , Clap } ;
1112
1213#[ derive( Clap ) ]
1314#[ clap( version = "0.1" , author = "Black H. <[email protected] >" ) ] @@ -17,39 +18,46 @@ struct Opts {
1718 host : String ,
1819 #[ clap( short, long, default_value = "2811" ) ]
1920 port : u16 ,
21+ #[ clap( short, long, default_value = "1" ) ]
22+ count : u32 ,
2023}
2124
2225#[ tokio:: main]
2326async fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
2427 let opts: Opts = Opts :: parse ( ) ;
2528
26- let mut username = parity_wordlist:: random_phrase ( 2 ) ;
27- username. retain ( |c| !c. is_whitespace ( ) ) ;
28- let password: String = thread_rng ( )
29- . sample_iter ( & Alphanumeric )
30- . take ( 16 )
31- . map ( char:: from)
32- . collect ( ) ;
29+ for _ in 0 ..opts. count {
30+ let mut username = parity_wordlist:: random_phrase ( 2 ) ;
31+ username. retain ( |c| !c. is_whitespace ( ) ) ;
32+ let password: String = thread_rng ( )
33+ . sample_iter ( & Alphanumeric )
34+ . take ( 16 )
35+ . map ( char:: from)
36+ . collect ( ) ;
37+
38+ let mut stream = TcpStream :: connect (
39+ format ! ( "{}:{}" , opts. host, opts. port) ) . await . map_err ( |_| MinerError :: Connection ) ?;
3340
34- let mut stream = TcpStream :: connect (
35- format ! ( "{}:{}" , opts. host, opts. port) ) . await . map_err ( |_| MinerError :: Connection ) ?;
41+ println ! ( "Connected to pool {}:{}" , opts. host, opts. port) ;
3642
37- println ! ( "Connected to pool {}:{}" , opts . host , opts . port ) ;
43+ let mut cmd_in : [ u8 ; 200 ] = [ 0 ; 200 ] ;
3844
39- let mut cmd_in: [ u8 ; 200 ] = [ 0 ; 200 ] ;
45+ let n = stream. read ( & mut cmd_in) . await . map_err ( |_| MinerError :: RecvCommand ) ?;
46+ println ! ( "version: {}" , std:: str :: from_utf8( & cmd_in[ ..n] ) ?) ;
4047
41- let n = stream. read ( & mut cmd_in) . await . map_err ( |_| MinerError :: RecvCommand ) ?;
42- println ! ( "version: {}" , std:: str :: from_utf8( & cmd_in[ ..n] ) ?) ;
48+ let cmd_job = format ! ( "REGI,{},{},{}@gmail.com\n " , username, password, username) ;
49+ stream. write ( cmd_job. as_bytes ( ) ) . await . map_err ( |_| MinerError :: SendCommand ) ?;
50+ let n = stream. read ( & mut cmd_in) . await . map_err ( |_| MinerError :: RecvCommand ) ?;
51+ let reg_status = std:: str:: from_utf8 ( & cmd_in[ ..n] ) . map_err ( |_| MinerError :: InvalidUTF8 ) ?;
4352
44- let cmd_job = format ! ( "REGI,{},{},{}@gmail.com \n " , username , password , username ) ;
45- stream . write ( cmd_job . as_bytes ( ) ) . await . map_err ( |_| MinerError :: SendCommand ) ? ;
46- let n = stream . read ( & mut cmd_in ) . await . map_err ( |_| MinerError :: RecvCommand ) ? ;
47- let reg_status = std :: str :: from_utf8 ( & cmd_in [ ..n ] ) . map_err ( |_| MinerError :: InvalidUTF8 ) ? ;
53+ if reg_status != "OK" {
54+ println ! ( "register failed: {}" , reg_status ) ;
55+ break ;
56+ }
4857
49- if reg_status != "OK" {
50- println ! ( "register failed: {}" , reg_status) ;
51- } else {
5258 println ! ( "registered {} with {}" , username, password) ;
59+
60+ tokio:: time:: sleep ( Duration :: from_secs ( 4 ) ) . await ;
5361 }
5462
5563 Ok ( ( ) )
0 commit comments