/// <summary> /// Retrieve information about object media /// </summary> /// <param name="primID">UUID of the primitive</param> /// <param name="sim">Simulator where prim is located</param> /// <param name="callback">Call this callback when done</param> 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); } } }