@@ -5,6 +5,22 @@ defmodule BitcoinMining.Worker do
5
5
make_distributed ( Enum . reverse ( iflist ) , length ( iflist ) )
6
6
7
7
Node . connect ( String . to_atom ( "server@" <> hd ( parameter ) ) )
8
+ client_id = spawn ( fn -> talk_to_server ( ) end )
9
+ :global . sync ( )
10
+ send ( :global . whereis_name ( :serve ) , { :getk , client_id } )
11
+ receive do: ( _ -> :ok )
12
+ end
13
+
14
+ def talk_to_server ( ) do
15
+ { :ok , pid } = Task.Supervisor . start_link ( )
16
+ logproc = System . schedulers_online ( )
17
+ receive do
18
+ { :sendk , k_value } -> k = k_value
19
+ end
20
+ :global . sync ( )
21
+ for _ <- 1 .. logproc do
22
+ Task.Supervisor . async ( pid , fn ( ) -> miner ( :global . whereis_name ( :serve ) , k ) end )
23
+ end
8
24
receive do: ( _ -> :ok )
9
25
end
10
26
@@ -20,7 +36,7 @@ defmodule BitcoinMining.Worker do
20
36
IO . puts "Could not make current node distributed."
21
37
end
22
38
else
23
- server_node_name = String . to_atom ( "worker @" <> current_ip )
39
+ server_node_name = String . to_atom ( randomizer ( 5 ) <> "_wkr @" <> current_ip )
24
40
Node . start ( server_node_name )
25
41
Node . set_cookie ( server_node_name , :monster )
26
42
end
@@ -30,4 +46,17 @@ defmodule BitcoinMining.Worker do
30
46
end
31
47
end
32
48
49
+ def miner ( s_id , k ) do
50
+ msgt = "asukhtankar" <> randomizer ( 9 )
51
+ temp = :crypto . hash ( :sha256 , msgt ) |> Base . encode16 |> String . downcase
52
+ if ( String . slice ( temp , 0 , k ) === String . duplicate ( "0" , k ) ) do
53
+ send ( s_id , msgt <> "\t " <> temp )
54
+ end
55
+ miner ( s_id , k )
56
+ end
57
+
58
+ def randomizer ( l ) do
59
+ :crypto . strong_rand_bytes ( l ) |> Base . url_encode64 |> binary_part ( 0 , l ) |> String . downcase
60
+ end
61
+
33
62
end
0 commit comments