@startuml
package "CoAPthon" as coapthon {
    class "CoapClient" as client_coap{
        +float RTO
        +send_message()
        +send_datagram()
    }
    class "HelperClient" as helper_client_coap{
        +get()
        +send_request()
        +generate_random_token()
    }
}
package "Notre ajout" as us {
    class "SuperviseurLocal" as superviseur_local{
        +list[float] RTTs
        +float RTT_L
        +float RTT_S
        +float taux_retransmission
        +float min_RTT
        +float avg_RTT

        +envoie_token()
        +receprion_token()
        +failed_request()
        +reset()
    }
    class "SuperviseurGlobal" as superviseur_global{
        +etat
        +qualite
        +application_action()
        +reset()
        +reset_rto()
    }

    class "Maquette" as maquette{
        +action_spec
        +observation_spec
        +reset()
        +step()
        -_reset()
        -_step()
    }

    class "RequettePeriodique" as requette {
        +float periode
    }    
    note left of maquette: interface GYM


}
package "tf_agent" as tf{
    abstract "PyEnvironment" as tfenv{
        +action_spec
        +observation_spec
        +reset()
        +step()
        {abstract}-_reset()
        {abstract}-_step()
    }
}
helper_client_coap "1" *-- "1" client_coap : > Simplifie l'usage

client_coap "1" *-- "1" superviseur_local : < Surveille et controle

superviseur_global "1" o-- "N" superviseur_local : > fait la synthèse

maquette "1" *-- "N" helper_client_coap
maquette "1" *-- "1" superviseur_global : < envoie les données\nrécoltées
maquette "1" *-- "N" requette : < permet le controle\nde la charge du réseau
requette "1" --> "1" helper_client_coap : > envoie des requettes\navec une période précise

tfenv <|-- maquette : < implémente
@enduml