From 6bc479fecd7e6c43836544911ea20a17c872dc1d Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 1 Oct 2015 19:30:37 +0100 Subject: make bakes reception handle empty BakedTexture elements. But at same time stop sending them, only sending to Xbakes server items that do have a texture, like master does --- .../Avatar/BakedTextures/XBakesModule.cs | 72 +++++++++++----------- 1 file changed, 36 insertions(+), 36 deletions(-) (limited to 'OpenSim/Region/CoreModules/Avatar') diff --git a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs index 7bec18f..c0686d9 100644 --- a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs @@ -101,8 +101,6 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures if (m_URL == String.Empty) return null; - int size = 0; - using (RestClient rc = new RestClient(m_URL)) { List ret = new List(); @@ -113,35 +111,34 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures try { - Stream s = rc.Request(m_Auth); - - using (XmlTextReader sr = new XmlTextReader(s)) + using(Stream s = rc.Request(m_Auth)) { - sr.ReadStartElement("BakedAppearance"); - while (sr.LocalName == "BakedTexture") + using(XmlTextReader sr = new XmlTextReader(s)) { - string sTextureIndex = sr.GetAttribute("TextureIndex"); - int lTextureIndex = Convert.ToInt32(sTextureIndex); - string sCacheId = sr.GetAttribute("CacheId"); - UUID lCacheId = UUID.Zero; - if (!(UUID.TryParse(sCacheId, out lCacheId))) + sr.ReadStartElement("BakedAppearance"); + while(sr.LocalName == "BakedTexture") { + string sTextureIndex = sr.GetAttribute("TextureIndex"); + int lTextureIndex = Convert.ToInt32(sTextureIndex); + string sCacheId = sr.GetAttribute("CacheId"); + UUID lCacheId = UUID.Zero; + if(!(UUID.TryParse(sCacheId,out lCacheId))) + { // ?? Nothing here + } + + sr.ReadStartElement("BakedTexture"); + if(sr.Name=="AssetBase") + { + AssetBase a = (AssetBase)m_serializer.Deserialize(sr); + ret.Add(new WearableCacheItem() { CacheId = lCacheId,TextureIndex = (uint)lTextureIndex,TextureAsset = a,TextureID = a.FullID }); + sr.ReadEndElement(); + } } - - ++size; - - sr.ReadStartElement("BakedTexture"); - AssetBase a = (AssetBase)m_serializer.Deserialize(sr); - ret.Add(new WearableCacheItem() { CacheId = lCacheId, TextureIndex = (uint)lTextureIndex, TextureAsset = a, TextureID = a.FullID }); - - sr.ReadEndElement(); + m_log.DebugFormat("[XBakes]: read {0} textures for user {1}",ret.Count,id); } - - m_log.DebugFormat("[XBakes]: read {0} textures for user {1}", ret.Count, id); + return ret.ToArray(); } - - return ret.ToArray(); } catch (XmlException) { @@ -153,18 +150,19 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures public void Store(UUID agentId) { } + public void UpdateMeshAvatar(UUID agentId) { } - public void Store(UUID agentId, WearableCacheItem[] data) { if (m_URL == String.Empty) return; + int numberWears = 0; MemoryStream reqStream; - + using (MemoryStream bakeStream = new MemoryStream()) using (XmlTextWriter bakeWriter = new XmlTextWriter(bakeStream, null)) { @@ -172,15 +170,16 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures for (int i = 0; i < data.Length; i++) { - if (data[i] != null) + if (data[i] != null && data[i].TextureAsset != null) { bakeWriter.WriteStartElement(String.Empty, "BakedTexture", String.Empty); bakeWriter.WriteAttributeString(String.Empty, "TextureIndex", String.Empty, data[i].TextureIndex.ToString()); bakeWriter.WriteAttributeString(String.Empty, "CacheId", String.Empty, data[i].CacheId.ToString()); - if (data[i].TextureAsset != null) +// if (data[i].TextureAsset != null) m_serializer.Serialize(bakeWriter, data[i].TextureAsset); bakeWriter.WriteEndElement(); + numberWears++; } } @@ -190,17 +189,18 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures reqStream = new MemoryStream(bakeStream.ToArray()); } - RestClient rc = new RestClient(m_URL); - rc.AddResourcePath("bakes"); - rc.AddResourcePath(agentId.ToString()); - - rc.RequestMethod = "POST"; - Util.FireAndForget( delegate { - rc.Request(reqStream, m_Auth); - m_log.DebugFormat("[XBakes]: stored {0} textures for user {1}", data.Length, agentId); + using(RestClient rc = new RestClient(m_URL)) + { + rc.AddResourcePath("bakes"); + rc.AddResourcePath(agentId.ToString()); + rc.RequestMethod = "POST"; + + rc.Request(reqStream, m_Auth); + m_log.DebugFormat("[XBakes]: stored {0} textures for user {1}", numberWears, agentId); + } }, null, "XBakesModule.Store" ); } -- cgit v1.1