1
1
defmodule BitcoinMining.Worker do
2
2
3
3
def process ( parameter ) do
4
- try do
5
- unless Node . alive? ( ) do
6
- { :ok , iflist } = :inet . getif ( )
7
- [ head | tail ] = Enum . reverse ( iflist )
4
+ { :ok , iflist } = :inet . getif ( )
5
+ make_distributed ( Enum . reverse ( iflist ) , length ( iflist ) )
6
+
7
+ Node . connect ( String . to_atom ( "server@" <> hd ( parameter ) ) )
8
+ receive do: ( _ -> :ok )
9
+ end
10
+
11
+ def make_distributed ( [ head | tail ] , l ) do
12
+ unless Node . alive? ( ) do
13
+ try do
8
14
{ ip_tuple , _ , _ } = head
9
15
current_ip = to_string ( :inet_parse . ntoa ( ip_tuple ) )
10
16
if current_ip === "127.0.0.1" do
11
- { ip_tuple , _ , _ } = hd ( tail )
12
- current_ip = to_string ( :inet_parse . ntoa ( ip_tuple ) )
17
+ if l != 1 do
18
+ make_distributed ( tail , l - 1 )
19
+ end
20
+ else
21
+ server_node_name = String . to_atom ( "worker@" <> current_ip )
22
+ Node . start ( server_node_name )
23
+ Node . set_cookie ( server_node_name , :monster )
13
24
end
14
- current_ip = "192.168.0.2"
15
- worker_node_name = String . to_atom ( "worker@" <> current_ip )
16
- Node . start ( worker_node_name )
17
- Node . set_cookie ( worker_node_name , :monster )
25
+ rescue
26
+ _ -> if l != 1 , do: make_distributed ( tail , l - 1 ) , else: IO . puts "Could not make current node distributed."
18
27
end
19
- rescue
20
- _ -> IO . puts "An error occurred while making worker node distributed."
21
28
end
22
- Node . connect ( String . to_atom ( "server@" <> hd ( parameter ) ) )
23
- receive do: ( _ -> :ok )
24
29
end
25
30
26
- end
31
+ end
0 commit comments