Statistics
| Branch: | Revision:

urtware / doc / statediagrams / subscriber / urtSubscriberUnsubscribe.uml @ e48e1ccf

History | View | Annotate | Download (1.575 KB)

1 6ebd2388 Thomas Schöpping
/'
2
µRtWare is a lightweight publish/subscribe middleware for real-time
3
applications. It was developed as part of the software habitat for the
4
Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
5
6 509d44c4 Thomas Schöpping
Copyright (C) 2018..2019  Thomas Schöpping et al.
7 6ebd2388 Thomas Schöpping
8
This program is free software: you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation, either version 3 of the License, or
11
(at your option) any later version.
12
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17
18
You should have received a copy of the GNU General Public License
19
along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
'/
21
22
@startuml
23
24
title **µRtWare**\nurtSubscriberUnsubscribe()\n
25
26
27
28
start
29
if (Is HRT subscriber?) then (yes)
30
  :lock topic;
31
  fork
32 35c9457f Thomas Schöpping
    :unregister event;
33
    note left
34
      must be within lock because of HRT counter
35
    endnote
36
  fork again
37 6ebd2388 Thomas Schöpping
    :decrease topic HRT counter;
38
  fork again
39
    :remove self from topic list of HRT subscribers;
40
    if (Was most critical subscriber?) then (yes)
41 35c9457f Thomas Schöpping
      :update QoS rate timer (@topic);
42 6ebd2388 Thomas Schöpping
    else (no)
43
    endif
44
  fork again
45
    while (Unfetched messages left?) is (yes)
46
      :lock message;
47
      :decrease HRT counter;
48
      :unlock message;
49
    endwhile (no)
50
  endfork
51
  :unlock topic;
52
else (no)
53
  :unregister event;
54
endif
55
:reset members;
56
note left
57
  optional
58
end note
59
stop
60
61
@enduml