/' 
# TI-Messenger 1.1
# TI-Messenger-Dienst
# UC - 10062
# Sequence Diagram
# Name: Austausch von Nachrichten zwischen Messenger-Services
'/

@startuml
skinparam sequenceMessageAlign direction
skinparam minClassWidth 200
skinparam BoxPadding 1
skinparam sequenceReferenceHeaderBackgroundColor palegreen
scale max 4096 width

skinparam sequence {
ArrowColor black
ArrowFontSize 17
ActorBorderColor black
LifeLineBorderColor black
LifeLineBackgroundColor Gainsboro

ParticipantBorderColor Motivation
ParticipantBackgroundColor Motivation
ParticipantFontName Impact
ParticipantFontSize 20
ParticipantFontColor black
ParticipantBorderColor Black
ParticipantBackgroundColor MOTIVATION

ActorBackgroundColor Gainsboro
ActorFontColor black
ActorFontSize 20
ActorFontName Aapex
}
    actor U1 as "\nAkteur - A in der Rolle\nUser / User-HBA\n"
    participant C1 as "TI-Messenger-\nClient" #AliceBlue
    box <size:18>Messenger-Service A</size> #WhiteSmoke
      participant MP1 as "Messenger-\nProxy"
      participant MH1 as "Matrix-\nHomeserver"
    end box
    box <size:18>Messenger-Service B</size> #Snow
    participant MP2 as "Messenger-\nProxy"
    participant MH2 as "Matrix-\nHomeserver"
    participant PS2 as "PASSPorT-\nService"
    participant PG2 as "Push-\nGateway"
    end box
    participant C2 as "TI-Messenger-\nClient" #TECHNOLOGY
    actor U2 as "\nAkteur - B in der Rolle\nUser / User-HBA\n"
    
    |||
note over U1, U2: \n<size:20>Die Akteure sind erfolgreich beim jeweiligen Messenger Service angemeldet</size>\n    
    
    |||
    U1->C1: Akteur löst\nMatrix-Event aus
      activate C1 #AliceBlue
      C1->MP1: Matrix-Request
      activate MP1
    MP1->MP1: Check Request:\nFöderationszugehörigkeit\nprüfen
      |||
    opt#LightGrey #MistyRose <size:16>Abbruch</size>
      MP1-->C1: Domain nicht in TI-Föderation
      C1-->U1: Event konnte nicht \nverarbeitet werden
    end
      |||
    MP1->MH1: HTTP Forward
      deactivate MP1
      activate MH1
    MH1->MH1: Event verarbeiten
      |||
    MH1->MP1: Matrix-Request
      deactivate MH1
      activate MP1
      |||
    MP1->MP1: Check Request:\nremote Domain in Föderation
      |||
    MP1->MP2: HTTP Forward
      deactivate MP1
      activate MP2
    MP2->MP2: Check Request:\nremote Domain in Föderation
      |||
    MP2->MH2: HTTP Foward
      activate MH2
    group par 
    opt <size:16>push</size>
    MH2->PG2: Notification
      activate PG2
    PG2->C2: Notification
    PG2-->MH2: Status
      deactivate PG2
    |||
    end
      |||
      group /sync
        MH2->MP2: Matrix-Request
        MP2->C2: HTTP Forward
          activate C2 #TECHNOLOGY
        C2->U2: Request anzeigen
        C2-->MP2: Status
          |||
        MP2-->MH2: HTTP Forward
        MH2->MP2: Status (Matrix-Request)
          deactivate MH2
        MP2-->MP1: HTTP Forward
        MP1-->C1: Status
          deactivate C1
        MP2-->C2: HTTP Forward
          deactivate C2
          deactivate MP2
          |||
      end
|||
    end
  |||
|||
@enduml
