public void RequestObjectMedia(UUID primID, Simulator sim, ObjectMediaCallback callback)
{
Uri url;
if (sim.Caps != null && null != (url = sim.Caps.CapabilityURI("ObjectMedia")))
{
ObjectMediaRequest req = new ObjectMediaRequest();
req.PrimID = primID;
req.Verb = "GET";
CapsClient request = new CapsClient(url);
request.OnComplete += (CapsClient client, OSD result, Exception error) =>
{
if (result == null)
{
Logger.Log("Failed retrieving ObjectMedia data", Helpers.LogLevel.Error, Client);
try { callback(false, string.Empty, null); }
catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Error, Client); }
return;
}
ObjectMediaMessage msg = new ObjectMediaMessage();
msg.Deserialize((OSDMap)result);
if (msg.Request is ObjectMediaResponse)
{
ObjectMediaResponse response = (ObjectMediaResponse)msg.Request;
if (Client.Settings.OBJECT_TRACKING)
{
Primitive prim = sim.ObjectsPrimitives.Find((Primitive p) => { return p.ID == primID; });
if (prim != null)
{
prim.MediaVersion = response.Version;
prim.FaceMedia = response.FaceMedia;
}
}
try { callback(true, response.Version, response.FaceMedia); }
catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Error, Client); }
}
else
{
try { callback(false, string.Empty, null); }
catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Error, Client); }
}
};
request.BeginGetResponse(req.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT);
}
else
{
Logger.Log("ObjectMedia capability not available", Helpers.LogLevel.Error, Client);
try { callback(false, string.Empty, null); }
catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Error, Client); }
}
}