コード例 #1
0
        /// <summary>
        ///     Handle a fetch request for media textures
        /// </summary>
        /// <param name="omr"></param>
        /// <returns></returns>
        protected byte[] HandleObjectMediaRequest(ObjectMediaRequest omr)
        {
            UUID primId = omr.PrimID;

            ISceneChildEntity part = m_scene.GetSceneObjectPart(primId);

            if (null == part)
            {
                MainConsole.Instance.WarnFormat(
                    "[MOAP]: Received a GET ObjectMediaRequest for prim {0} but this doesn't exist in region {1}",
                    primId, m_scene.RegionInfo.RegionName);
                return(MainServer.BlankResponse);
            }

            ObjectMediaResponse resp = new ObjectMediaResponse
            {
                PrimID    = primId,
                FaceMedia = new PrimitiveBaseShape.MediaList().ToArray(),
                Version   = "x-mv:0000000001/00000000-0000-0000-0000-000000000000"
            };

            if (null != part.Shape.Media)
            {
                lock (part.Shape.Media)
                    resp.FaceMedia = part.Shape.Media.ToArray();

                resp.Version = part.MediaUrl;
            }

            return(OSDParser.SerializeLLSDXmlBytes(resp.Serialize()));
        }
コード例 #2
0
ファイル: MoapModule.cs プロジェクト: satlanski2/Aurora-Sim
        /// <summary>
        ///   Handle a fetch request for media textures
        /// </summary>
        /// <param name = "omr"></param>
        /// <returns></returns>
        protected string HandleObjectMediaRequest(ObjectMediaRequest omr)
        {
            UUID primId = omr.PrimID;

            ISceneChildEntity part = m_scene.GetSceneObjectPart(primId);

            if (null == part)
            {
                MainConsole.Instance.WarnFormat(
                    "[MOAP]: Received a GET ObjectMediaRequest for prim {0} but this doesn't exist in region {1}",
                    primId, m_scene.RegionInfo.RegionName);
                return(string.Empty);
            }

            ObjectMediaResponse resp = new ObjectMediaResponse
            {
                PrimID    = primId,
                FaceMedia = new PrimitiveBaseShape.MediaList().ToArray(),
                Version   = "x-mv:0000000001/00000000-0000-0000-0000-000000000000"
            };

            if (null != part.Shape.Media)
            {
                lock (part.Shape.Media)
                    resp.FaceMedia = part.Shape.Media.ToArray();

                resp.Version = part.MediaUrl;
            }

            string rawResp = OSDParser.SerializeLLSDXmlString(resp.Serialize());

//            MainConsole.Instance.DebugFormat("[MOAP]: Got HandleObjectMediaRequestGet raw response is [{0}]", rawResp);

            return(rawResp);
        }
コード例 #3
0
        /// <summary>
        /// Handle a fetch request for media textures
        /// </summary>
        /// <param name="omr"></param>
        /// <returns></returns>
        protected string HandleObjectMediaRequest(ObjectMediaRequest omr)
        {
            UUID primId = omr.PrimID;

            SceneObjectPart part = m_scene.GetSceneObjectPart(primId);

            if (null == part)
            {
                m_log.WarnFormat(
                    "[MOAP]: Received a GET ObjectMediaRequest for prim {0} but this doesn't exist in region {1}",
                    primId, m_scene.RegionInfo.RegionName);
                return(string.Empty);
            }

            if (null == part.Shape.Media)
            {
                return(string.Empty);
            }

            ObjectMediaResponse resp = new ObjectMediaResponse();

            resp.PrimID = primId;

            lock (part.Shape.Media)
                resp.FaceMedia = part.Shape.Media.ToArray();

            resp.Version = part.MediaUrl;

            string rawResp = OSDParser.SerializeLLSDXmlString(resp.Serialize());

//            m_log.DebugFormat("[MOAP]: Got HandleObjectMediaRequestGet raw response is [{0}]", rawResp);

            return(rawResp);
        }
コード例 #4
0
ファイル: MoapModule.cs プロジェクト: laughingpain/opensim
        /// <summary>
        /// Handle a fetch request for media textures
        /// </summary>
        /// <param name="omr"></param>
        /// <returns></returns>
        protected string HandleObjectMediaRequest(ObjectMediaRequest omr)
        {
            UUID primId = omr.PrimID;

            SceneObjectPart part = m_scene.GetSceneObjectPart(primId);

            if (null == part)
            {
                m_log.WarnFormat(
                    "[MOAP]: Received a GET ObjectMediaRequest for prim {0} but this doesn't exist in region {1}",
                    primId, m_scene.RegionInfo.RegionName);
                return(string.Empty);
            }

            if (part.Shape.Media == null)
            {
                return(string.Empty);
            }

            MediaEntry[] currentML = part.Shape.Media.ToArray();

            int nentries = currentML.Length;
            int nsides   = part.GetNumberOfSides();

            if (nentries > nsides)
            {
                nentries = nsides;
            }

            Primitive.TextureEntry te = part.Shape.Textures;
            bool isnull = true;

            for (int face = 0; face < nentries; ++face)
            {
                Primitive.TextureEntryFace teFace = te.GetFace((uint)face);
                if (!teFace.MediaFlags)
                {
                    currentML[face] = null;
                }
                else
                {
                    isnull = false;
                }
            }

            if (isnull)
            {
                //remove the damm thing
                part.Shape.Media = null;
                part.MediaUrl    = null;
                return(string.Empty);
            }

            ObjectMediaResponse resp = new ObjectMediaResponse();

            resp.PrimID = primId;

            resp.FaceMedia = currentML;

            resp.Version = part.MediaUrl;

            string rawResp = OSDParser.SerializeLLSDXmlString(resp.Serialize());

//            m_log.DebugFormat("[MOAP]: Got HandleObjectMediaRequestGet raw response is [{0}]", rawResp);

            return(rawResp);
        }
コード例 #5
0
ファイル: ObjectMedia.cs プロジェクト: jhurliman/simian
        private void ObjectMediaHandler(Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response)
        {
            ObjectMediaMessage message;

            if (LLUtil.TryGetMessage <ObjectMediaMessage>(request.Body, out message))
            {
                if (message.Request is ObjectMediaRequest)
                {
                    ObjectMediaRequest mediaRequest = (ObjectMediaRequest)message.Request;

                    ISceneEntity entity;
                    if (m_scene.TryGetEntity(mediaRequest.PrimID, out entity) && entity is LLPrimitive)
                    {
                        LLPrimitive prim = (LLPrimitive)entity;

                        ObjectMediaResponse reply = new ObjectMediaResponse();
                        reply.PrimID    = prim.ID;
                        reply.FaceMedia = prim.Prim.FaceMedia ?? new MediaEntry[0];
                        reply.Version   = prim.Prim.MediaVersion ?? String.Empty;

                        LLUtil.SendLLSDXMLResponse(response, reply.Serialize());
                    }
                    else
                    {
                        m_log.Warn("Received an ObjectMedia request for unknown prim " + mediaRequest.PrimID);
                    }
                }
                else if (message.Request is ObjectMediaUpdate)
                {
                    ObjectMediaUpdate update = (ObjectMediaUpdate)message.Request;

                    ISceneEntity entity;
                    if (m_scene.TryGetEntity(update.PrimID, out entity) && entity is LLPrimitive)
                    {
                        LLPrimitive prim        = (LLPrimitive)entity;
                        int         lastVersion = ParseMediaVersion(prim.Prim.MediaVersion);

                        prim.Prim.FaceMedia    = update.FaceMedia;
                        prim.Prim.MediaVersion = CreateMediaVersion(lastVersion + 1, cap.OwnerID);

                        // Set the CurrentURL fields
                        for (int i = 0; i < prim.Prim.FaceMedia.Length; i++)
                        {
                            MediaEntry entry = prim.Prim.FaceMedia[i];
                            if (entry != null && String.IsNullOrEmpty(entry.CurrentURL))
                            {
                                entry.CurrentURL = entry.HomeURL;
                            }
                        }

                        // Set the texture face media flags
                        for (int i = 0; i < prim.Prim.Textures.FaceTextures.Length; i++)
                        {
                            Primitive.TextureEntryFace face = prim.Prim.Textures.FaceTextures[i];
                            MediaEntry entry = (update.FaceMedia.Length > i) ? update.FaceMedia[i] : null;

                            if (entry != null)
                            {
                                if (face == null)
                                {
                                    face = prim.Prim.Textures.CreateFace((uint)i);
                                }

                                face.MediaFlags = true;
                            }
                            else if (face != null)
                            {
                                face.MediaFlags = false;
                            }
                        }

                        m_scene.EntityAddOrUpdate(this, prim, UpdateFlags.FullUpdate, 0);
                    }
                    else
                    {
                        m_log.Warn("Could not update ObjectMedia for " + update.PrimID + ", prim not found");
                    }
                }
                else
                {
                    m_log.Warn("Unrecognized ObjectMedia message: " + message.Request);
                }
            }
            else
            {
                m_log.Warn("Received invalid data for ObjectMedia");
                response.Status = System.Net.HttpStatusCode.BadRequest;
            }
        }