Le type de donnée utilisé par la liburbi est décrite ci-dessous:
class UMessage {
public:
UAbstractClient &client; // connexion à l'origine du message
int timestamp; // timestamp côté serveur
char *tag; // étiquette associée
UMessageType type; // type du message
UBinaryMessageType binaryType; // type du message binaire
union {
double doubleValue;
char *stringValue;
char *systemValue;
char *message; // rempli si le type est unknown (MESSAGE_UNKNOWN)
USound sound; // rempli si la donnée binaire est sonore
UImage image; // rempli si la donnée binaire est une image
UBinary binary; // rempli si la donnée binaire est de type indéterminé
};
}
Le champ type peut être MESSAGE_DOUBLE, MESSAGE_STRING, MESSAGE_SYSTEM, MESSAGE_BINARY ou MESSAGE_UNKNOWN. En fonction de ce champ, la valeur correspondante dans l'union sera remplie. Si le message est binaire, binaryType donnera des informations supplémentaires sur le type de la donnée (BINARYMESSAGE_SOUND, BINARYMESSAGE_IMAGE ou BINARYMESSAGE_UNKNOWN), et la structure appropriée (sound ou image) sera remplie.
class USound {
public:
char *data; // pointeur sur la donnée sonore
int size; // taille totale, en octets
int channels; // nombre de canaux audio
int rate; // fréquence d'échantillonnage, en Hertz
int sampleSize; // qualité d'échantillonnage, en bits
USoundFormat soundFormat; // format du son
// (SOUND_RAW, SOUND_WAV, SOUND_MP3...)
USoundSampleFormat sampleFormat; // format des échantillons
};