Deserialize() public method

Deserialize the message
public Deserialize ( OSDMap map ) : void
map OSDMap An containing the data
return void
Esempio n. 1
0
        /// <summary>
        /// Received from the viewer if a user has changed the url of a media texture.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="path"></param>
        /// <param name="param"></param>
        /// <param name="httpRequest">/param>
        /// <param name="httpResponse">/param>
        /// <returns></returns>
        protected string HandleObjectMediaNavigateMessage(
            string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
        {
//            m_log.DebugFormat("[MOAP]: Got ObjectMediaNavigate request [{0}]", request);
            
            OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request);
            ObjectMediaNavigateMessage omn = new ObjectMediaNavigateMessage();
            omn.Deserialize(osd);
            
            UUID primId = omn.PrimID;

            ISceneChildEntity part = m_scene.GetSceneObjectPart (primId);
            
            if (null == part)
            {
                m_log.WarnFormat(
                    "[MOAP]: Received an ObjectMediaNavigateMessage for prim {0} but this doesn't exist in region {1}", 
                    primId, m_scene.RegionInfo.RegionName);
                return string.Empty;
            }
            
            UUID agentId = default(UUID);
            
            lock (m_omuCapUsers)
                agentId = m_omuCapUsers[path];
            
            if (!m_scene.Permissions.CanInteractWithPrimMedia(agentId, part.UUID, omn.Face))
                return string.Empty;
            
//            m_log.DebugFormat(
//                "[MOAP]: Received request to update media entry for face {0} on prim {1} {2} to {3}", 
//                omn.Face, part.Name, part.UUID, omn.URL);
            
            // If media has never been set for this prim, then just return.
            if (null == part.Shape.Media)
                return string.Empty;
            
            MediaEntry me = null;
                
            lock (part.Shape.Media)
                me = part.Shape.Media[omn.Face];
            
            // Do the same if media has not been set up for a specific face
            if (null == me)
                return string.Empty;
            
            if (me.EnableWhiteList)
            {
                if (!CheckUrlAgainstWhitelist(omn.URL, me.WhiteList))
                {
//                    m_log.DebugFormat(
//                        "[MOAP]: Blocking change of face {0} on prim {1} {2} to {3} since it's not on the enabled whitelist", 
//                        omn.Face, part.Name, part.UUID, omn.URL);
                    
                    return string.Empty;
                }
            }
            
            me.CurrentURL = omn.URL;
            
            UpdateMediaUrl(part, agentId);
            
            part.ScheduleUpdate(PrimUpdateFlags.FullUpdate);
            
            part.TriggerScriptChangedEvent(Changed.MEDIA);
            
            return OSDParser.SerializeLLSDXmlString(new OSD());
        }