mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-10-05 18:06:51 +08:00
5.5 KiB
5.5 KiB
- Alias handling logic when Publisher Start:
graph TD
A[Publisher Start] --> B{Check if Publisher with same StreamPath exists}
B -->|Yes| C[Call takeOver to handle old Publisher]
B -->|No| D[Add new Publisher to Streams]
D --> E[Wake up subscribers waiting for this StreamPath]
E --> F[Iterate through AliasStreams]
F --> G{Does Alias StreamPath match?}
G -->|Yes| H{Is Alias Publisher empty?}
H -->|Yes| I[Set Alias Publisher to new Publisher]
H -->|No| J[Transfer Alias subscribers to new Publisher]
G -->|No| K[Continue iteration]
I --> L[Wake up subscribers waiting for this Alias]
J --> L
L --> M[End]
- Alias handling when Publisher Dispose:
graph TD
A[Publisher Dispose] --> B{Is it stopping due to being kicked out?}
B -->|No| C[Remove Publisher from Streams]
C --> D[Iterate through AliasStreams]
D --> E{Does Alias point to this Publisher?}
E -->|Yes| F{Auto-remove?}
F -->|Yes| G[Remove Alias from AliasStreams]
F -->|No| H[Retain Alias]
E -->|No| I[Continue iteration]
G --> J[Handle subscribers]
H --> J
J --> K[End]
- Alias handling when Subscriber Start:
graph TD
A[Subscriber Start] --> B{Check if matching Alias exists in AliasStreams}
B -->|Yes| C{Does Alias Publisher exist?}
C -->|Yes| D[Add subscriber to Alias Publisher]
C -->|No| E[Trigger OnSubscribe event]
B -->|No| F[Check if matching regex exists in StreamAlias]
F -->|Yes| G[Create new AliasStream]
G --> H{Does corresponding Publisher exist?}
H -->|Yes| I[Add subscriber to Publisher]
H -->|No| J[Trigger OnSubscribe event]
F -->|No| K{Does corresponding Publisher exist in Streams?}
K -->|Yes| L[Add subscriber to Publisher]
K -->|No| M[Add subscriber to waiting list]
M --> N[Trigger OnSubscribe event]
- Logic for adding alias in API SetAliasStream call:
graph TD
A[SetAliasStream - Add alias] --> B{Does alias already exist in AliasStreams?}
B -->|Yes| C[Update existing AliasStream]
B -->|No| D[Create new AliasStream]
C --> E{Has StreamPath changed?}
E -->|Yes| F{Does Publisher for new StreamPath exist?}
F -->|Yes| G[Transfer subscribers to new Publisher]
F -->|No| H[Wake up subscribers waiting for new StreamPath]
E -->|No| I[End]
D --> J{Does Publisher for StreamPath exist?}
J -->|Yes| K[Replace existing stream or wake up waiting subscribers]
J -->|No| L[End]
- Logic for removing alias in API SetAliasStream call:
graph TD
A[SetAliasStream - Remove alias] --> B{Does alias exist in AliasStreams?}
B -->|Yes| C[Remove alias from AliasStreams]
C --> D{Does Alias Publisher exist?}
D -->|Yes| E{Does Publisher with same name exist in Streams?}
E -->|Yes| F[Transfer Alias subscribers to same-name Publisher]
E -->|No| G[End]
D -->|No| H[End]
B -->|No| I[End]
Based on your requirements, I'll create a flowchart representing the name mapping relationships for the SetAliasStream
method. I'll use subgraphs to show the structural relationships for different conditions and include the effects on subscribers. Here's the flowchart:
graph TD
subgraph SetAliasStream
A[Start] --> B{Is StreamPath provided?}
B -->|Yes| C[Parse StreamPath]
B -->|No| D[Remove Alias]
C --> E{Does Publisher exist for StreamPath?}
E -->|Yes| F[Can Replace = true]
E -->|No| G[Can Replace = false]
G --> H[Trigger OnSubscribe]
F --> I{Does Alias exist?}
G --> I
I -->|Yes| J[Modify Alias]
I -->|No| K[Create Alias]
J --> L{Has StreamPath changed?}
L -->|Yes| M{Can Replace?}
M -->|Yes| N[Transfer Subscribers or WakeUp]
M -->|No| O[Update StreamPath]
L -->|No| P[Update AutoRemove]
K --> Q{Can Replace?}
Q -->|Yes| R[Transfer Subscribers or WakeUp]
Q -->|No| S[Add to AliasStreams]
D --> T{Does Alias exist?}
T -->|Yes| U[Remove from AliasStreams]
T -->|No| V[End]
U --> W{Does Publisher exist for Alias?}
W -->|Yes| X[Transfer Subscribers]
W -->|No| Y[End]
end
subgraph Effects on Subscribers
N1[Transfer Subscribers]
N2[WakeUp waiting Subscribers]
X1[Transfer Subscribers to matching Publisher]
end
subgraph Streams and AliasStreams
S1[Streams: StreamPath -> Publisher]
S2[AliasStreams: Alias -> StreamPath]
end
This flowchart represents the SetAliasStream
method's logic, including:
- Checking if a StreamPath is provided
- Parsing the StreamPath and checking if a Publisher exists
- Handling existing or new aliases
- Updating StreamPath and AutoRemove settings
- Transferring subscribers or waking up waiting subscribers when applicable
- Removing aliases and handling potential subscriber transfers
The "Effects on Subscribers" subgraph shows the possible actions that affect subscribers:
- Transferring subscribers to a new Publisher
- Waking up waiting subscribers when a stream becomes available
- Transferring subscribers to a matching Publisher when removing an alias
The "Streams and AliasStreams" subgraph represents the relationship between StreamPaths, Publishers, and Aliases.
This flowchart provides a comprehensive view of the SetAliasStream
method's logic and its effects on the stream naming and subscriber management.