Event queue/fr

La file d'attente d'événements est un protocole du viewer Linden Lab qui permet au simulateur de placer des messages dans une file d'attente régulièrement interrogée par le client à l'aide du protocole TCP. De cette façon, un simulateur peut envoyer directement des données au viewer.

Le wiki Linden Lab propose une description très brève de la file d'attente et n'entre pas dans les détails.

Dans OpenSimulator, la file d'attente est implémentée à l'aide du module EventQueueGetModule dans le paquet OpenSim.Region.ClientStack.LindenCaps. Il correspond à l'interface IEventQueue.

Vous pouvez trouver des exemples des messages existants (par exemple PlacesReplyMessage, EnableSimulator) dans les classes de construction de messages EventQueueGetModule et EventQueueHelper.

Elles auraient besoin d'être documentées ici même.

Comme les événements se caractérisent par un message de paramètres, on peut en construire un à volonté pour un client/viewer modifié qui le reconnaîtrait à l'aide de la méthode statique EventQueueHelper.BuildEvent pour ensuite injecter ces données et obtenir une référence à EventQueueGetModule, par exemple avec :

OpenStructuredData (OSD) est le nom d'un format de données qui est un surensemble de Linden Lab Structured Data (LLSD). C'est du XML qui contient des informations sur les types intégrés.

On devrait choisir des noms de messages peu susceptibles d'entrer en conflit avec de futur ajouts de Linden Lab ou avec d'autres extensions d'OpenSimulator.

Je crois (justincc) que le viewer interroge la file d'attente des événements une seconde après la réponse précédente. De plus, si le serveur retourne une erreur alors il y a 15 secondes d'attente avant que la file d'attente soit interrogée à nouveau. Cependant, cela doit être confirmé par le contrôle du comportement des viewer actuels.

Interrogation
PollServiceRequestManager dans OpenSim.Framework.Servers.HttpServer met en place 3 PollServiceWorkerThreads et 1 LongPollServiceWatcherThread  pour traiter les requêtes interrogatives comme  EventQueue.

LongPollServiceWatcherThread
Contrôle les requêtes interrogatives toutes les 500ms pour voir si des événements attendent afin d'être envoyés ou si le délai a expiré.