3. Diagrammes de séquences
Dans cette partie nous présentons quelques exemples de
diagramme de séquences qui expliquent les interactions entre les classes
que nous avons créées.
3.1. Calcul de la puissance reçue
La figure 3.29 représente un des scénarios
possibles pour le calcul de la puissance reçue. Dans ce diagramme
l'objet radio, instance de la classe Ieee 80211 aRadio, fait appel à la
méthode calculateReceivedPower() de l'objet receptionModel. Ce dernier
est une instance de
la classe ShadowingMode. Ce diagramme reste valable pour les
autres modèle Free-Space et Two-Ray.
radio: Ieee80211aRadio
|
|
receptionModel :ShadowingMode
|
|
1: calculateReceivedPower( )
2: recvPower
Figure 3.29 Diagramme de séquences du calcul de la
puissance reçue
3.2. Calcul de la durée de transmission
Avant de transmettre un paquet, l'objet radio calcule la
durée de transmission. Il fait appel à la méthode
calculateDuration() de l`objet radioModel comme le montre la figure 3.30.
radio: Ieee80211aRadio
|
|
radioModel:Ieee8021 1 aRadioModel
|
|
Figure 3.30 Diagramme de séquences du calcul de
la durée de transmission
3.3. Calcul de PER
A chaque réception d'un nouveau message, l'objet radio
fait appel à la méthode isReceivedCorrectly() de l'objet
radioModel. Ce dernier fait appel à la méthode packetOK() qui
calcule le CSR de chaque morceau du message reçue. En
général, l'objet radio fait appel à la méthode
getChrunkSuccessRate() pour chaque morceau. Ensuite, il calcule le PSR qui sera
le produit des deux valeurs déjà calculées et PER qui sera
1-PSR. Puis, Il génère un nombre aléatoire entre 0 et 1 et
le compare avec la valeur PER. Enfin, il retourne true si le nombre
aléatoire est inférieur à PER et false sinon.
radio:Ieee8021 1aRadio
|
|
radioModel:Ieee8021 1 aRadioModel
|
|
modes[1]:FecBpskMode
|
|
modes[7]:FecQamMode
|
|
1: isReceivedCorrectly( )
9: :
generate
7:
ErrorMasks( )
2: packetOK( )
4: getChrunkSuccessRate( )
ErrorMasks( )
5: CSR_HEADER
7: getChrunkSuccessRate( )
4: generate
8: CSR_PAYLOAD
Figure 3.31 Diagramme de séquences du calcul du
PER
3.4. La transmission vidéo
À l'instant sessionEnterDelay, l'objet rtpApplication,
instance de la classe RTPApplication, envoie un message à l'objet
rtpModule, instance de la classe RTPEndSystemModule, pour ouvrir une nouvelle
session. rtpModule crée l'objet profile instance de la classe
RTPProfile, ouvre une socket, et initialise l'objet rtcpModule. Une fois
l'objet rtcpModule est initialisé, il renvoie un message à
rtpModule. rtpModule renvoie ensuite un message au module rtpApplication lui
informant que tous les modules sont initialisés.
Ensuite, si l'attribut fileName est différent de la
chaîne vide, c'est à dire que rtpApplication est l'application
source, il envoie un message à rtpModule afin de créer un
rtpPayloadSender. À la réception de ce message, rtpModule
crée un nouveau objet rtpPayloadSender et renvoie un message à
rtpApplication pour lui informer que l'objet rtpPayloadSender est
déjà crée et qu'il peut commencer la transmission.
A l'instant transmissionStartDelay, rtpApplication envoie un
message "PLAY" à rtpModule qui à son tour l'envoie à
rtpPayloadSender. Ce dernier ouvre le fichier dont le nom fileName et commence
à construire les paquets RTP et les envoie au module rtpModule. À
chaque réception d'un paquet RTP, rtpModule envoie une copie au module
rtcpModule et l'envoie à la couche inférieure UDP.
1.4: createServerSocket( )
rtpApplication:RTPApplication
rtpModule:RTPEndsystemModule
rtcpModule:RTCPEndsystemModule
profile: RTPProfile
1.2: initializeProfile( )
1.3: profileInitialized( )
2.4: Sender Module Created
2.1: createSenderModule( )
2.3: senderModuleInitialized( )
rtpPayloadSender:RTPAVProfilePayload32Sender
3: senderModuleControl( )3.1:
senderModuleControl( )
3.2: play( )
3.5: dataOut( )
1.5: initializeRTCP( )
1.6: rtcpInitialized( )
1.7: Session Entered
2[fileName <> ""]: createSenderModule(
)
2.2: initializeSenderModule( )
3.4: dataOut( )
3.3[!inputFileStream.eof()]: dataOut( )
1: enterSession( )
Figure 3.32 Transmission d'un flux
vidéo
Conclusion
Au cours de ce chapitre, nous avons abordé la partie
conceptuelle en définissant les différentes couches protocolaires
ainsi que les différentes classes associées. En plus, nous avons
détaillé les fonctionnalités de chaque classe.
Dans le prochain chapitre, nous décrivons la
réalisation et les différentes configurations pour notre
solution.
|