timed global protocol VideoStreamingProtocol(role Auth, role Client, role Server) { Declare(Id) from Client to Auth within [0;1] using a and resetting (); // Sends a message labelled Declare with a payload Id Accept(Answer) from Auth to Client within [0;1] using a and resetting (); // The Auth role replies with an Accept message rec Loop { choice at Client { // Client makes a choice RequestVideo(Request) from Client to Auth within [0;1] using a and resetting (); // Client sends a request for a video, giving its name RequestVideo(Request) from Auth to Server within [0;1] using a and resetting (); // Auth forwards the request SendVideo(Video) from Server to Auth within [0;1] using a and resetting (); // Server sends the video file to the Auth SendVideo(Video) from Auth to Client within [0;1] using a and resetting (); // Auth sends the video file to the client continue Loop within [0;1] using a and resetting (); // A Recursive call } or { Close() from Client to Auth within [0;1] using a and resetting (); // Close the session between Client and Auth Close() from Auth to Server within [0;1] using a and resetting (); // Close the session between Server and Auth } } }