summaryrefslogtreecommitdiffstats
path: root/doc/sphinx/uml/main-loop.uml
blob: 9e29c9f7bcccf43e0fa783e7f7d5e55dca50b6f5 (plain)
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
@startuml

title DHCP server main loop (Kea 1.8.0)

skinparam linetype ortho

rectangle "Main Loop" {
 agent "Wait for next event" as run

 rectangle "Event Loop" as run_one {
  together {
   agent "Signal" as signal

   agent "Handle Signal" as handleSignal
  }

  together {
   agent "External Socket" as external_socket

   agent "Handle External Socket" as handleExternalSocket
  }

  together {
   agent "DHCP Query" as query

   agent "Process Query" as processQuery
  }

   agent "Timeout" as timeout
 }

 together {
  agent "I/O Service" as poll

  agent "Execute ready handler" as ready
 }

 agent "Check Shutdown" as shutdown
}

run --> run_one : get next event
run_one --> signal
signal -right-> handleSignal : got signal
handleSignal --> poll
signal -[dashed]-> external_socket
external_socket -right-> handleExternalSocket : external socket ready
handleExternalSocket --> poll
external_socket -[dashed]-> query
query -right-> processQuery : DHCP socket ready
processQuery --> poll
query -[dashed]-> timeout
timeout --> poll : timeout expired
poll -> ready : handler ready
poll ---> shutdown : no ready handler
ready -> ready : execute ready handler
shutdown -u-> run

footer dashed arrow means priority

@enduml