forked from stritzinger/proto_dist
-
Notifications
You must be signed in to change notification settings - Fork 0
/
custom_dist.puml
85 lines (70 loc) · 2.31 KB
/
custom_dist.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
@startuml
' skinparam monochrome true
skinparam DefaultMonospacedFontName "monospace"
boundary Kernel
box "Custom Distribution Implementation" #LightBlue
participant gen_tcp_dist
control Acceptor
control " "
control Controller
control "Controller Input"
end box
actor Remote
Kernel -> gen_tcp_dist: listen(Name)
gen_tcp_dist -> Kernel: {ok, {ListenSocket, NetAddress, Creation}}
Kernel -> gen_tcp_dist: accept(ListenSocket)
gen_tcp_dist -> Acceptor: spawn
activate Acceptor
gen_tcp_dist -> Kernel: pid()
Acceptor -> Acceptor: gen_tcp:accept(ListenSocket)
... Idle ...
alt Incoming Setup
Remote -->> Acceptor: connect
Acceptor -> Controller: spawn
activate Controller
Acceptor -->> Kernel: ! {accept, self(), Controller, Family, Protocol}
Kernel -> gen_tcp_dist: accept_connection(AcceptPid, Controller, MyNode, Allowed, SetupTime)
create " "
gen_tcp_dist -> " ": spawn
activate " "
Kernel -->> Acceptor: {Kernel, controller, Pid}
Acceptor -->> Kernel: {self(), controller}
Kernel -->> " ": {AcceptorPid, controller}
" " -> " ": dist_util:handshake_other_started(HSData)
destroy " "
hnote over Kernel, Controller: Handshake
Kernel -->> Controller: Handshake complete
Controller -> "Controller Input": spawn
activate "Controller Input"
else Outgoing Setup
deactivate Controller
deactivate "Controller Input"
Kernel -> gen_tcp_dist: "setup(Node, Type, MyNode, LongOrShortNames, SetupTime)"
create " "
gen_tcp_dist -> " ": spawn
activate " "
" " -->> Remote: connect
" " -> Controller: spawn
activate Controller
" " -> " ": dist_util:handshake_we_started(HSData)
destroy " "
hnote over Kernel, Controller: Handshake
Kernel -->> Controller: Handshake complete
Controller -> "Controller Input": spawn
activate "Controller Input"
end
... Connected ...
alt Incoming Data
Remote -->> "Controller Input": Data
"Controller Input" -> Kernel: erlang:dist_ctrl_put_data(DHandle, Data)
else Outgoing Data
Kernel -->> Controller: dist_data
loop
Controller -> Kernel: erlang:dist_ctrl_get_data(DHandle)
Kernel -> Controller: Data
Controller -->> Remote: send
end
Kernel -> Controller: none
Controller -> Kernel: erlang:dist_ctrl_get_data_notification(DHandle)
end
@enduml