La méthode send est la manière la plus simple d'envoyer
une commande au serveur URBI. Elle possède une syntaxe similaire à la fonction
printf.
Pour envoyer une séquence de commandes sans risque d'avoir un autre thread
qui envoi des commandes en même temps, vous pouvez utiliser les méthodes
lockSend et unlockSend pour
verrouiller puis déverrouiller le buffer (tampon) d'envoi.
int sleeptime = 50;
client->send("motoron;");
client->lockSend(); //send() appelé par d'autres threads sera bloqué
//à ce point jusqu'au prochain appel de unlockSend
for (float val=0; val<=1; val+=0.05)
client->send("neck.val = %f;wait (%d);", val, sleeptime);
client->unlockSend();
Alternativement, la classe UClient hérite d'ostream.
Ainsi vous pouvez utiliser l'opérateur <<:
client << "headPan.val = " <<12 << urbi::comma;
Les constantes 'comma', 'semicolon', 'pipe' et 'parallel' sont définis respectivement pour ',', ';', '|' and '&' dans l'espace de nom urbi.
Une troisième manière possible est d'utiliser la macro
URBI, qui utilise la connection par défaut
(la première connection créée par votre programme):
URBI((
headPan.val = 12 ,
echo "coucou" | speaker.play("test.wav") & leds.val = 1
));
// Notez l'absence des doubles quotes. Pour délimiter le code URBI
// les double-parenthèses sont requises
URBI() << "headPan.val = " << 12 << urbi::semicolon;
La fonction urbi::setDefaultClientUClient *cl) peut
être utilisée pour changer le client par défaut.