From 2d034e20c4f0fd7508cdd8780435f362cfc17890 Mon Sep 17 00:00:00 2001
From: Oren Hurvitz
Date: Mon, 14 Jul 2014 10:55:57 +0300
Subject: XBakes: store the assets only in the sim's local assets cache; not in
the main assets server. Also, some cleanup.
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 126 ++++++---------------
1 file changed, 37 insertions(+), 89 deletions(-)
(limited to 'OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index bd0f5ca..bfdb24f 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -11848,7 +11848,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
///
protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet)
{
- //m_log.Debug("texture cached: " + packet.ToString());
AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet;
AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse);
@@ -11864,24 +11863,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
cachedresp.WearableData =
new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length];
- //IAvatarFactoryModule fac = m_scene.RequestModuleInterface();
- // var item = fac.GetBakedTextureFaces(AgentId);
- //WearableCacheItem[] items = fac.GetCachedItems(AgentId);
-
- IAssetService cache = m_scene.AssetService;
- IBakedTextureModule bakedTextureModule = m_scene.RequestModuleInterface();
- //bakedTextureModule = null;
int maxWearablesLoop = cachedtex.WearableData.Length;
if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES)
maxWearablesLoop = AvatarWearable.MAX_WEARABLES;
+ // Find the cached baked textures for this user, if they're available
+
+ IAssetService cache = m_scene.AssetService;
+ IBakedTextureModule bakedTextureModule = m_scene.RequestModuleInterface();
+
+ WearableCacheItem[] cacheItems = null;
+
if (bakedTextureModule != null && cache != null)
{
- // We need to make sure the asset stored in the bake is available on this server also by it's assetid before we map it to a Cacheid
-
- WearableCacheItem[] cacheItems = null;
ScenePresence p = m_scene.GetScenePresence(AgentId);
if (p.Appearance != null)
+ {
if (p.Appearance.WearableCacheItems == null || p.Appearance.WearableCacheItemsDirty)
{
try
@@ -11890,22 +11887,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
p.Appearance.WearableCacheItems = cacheItems;
p.Appearance.WearableCacheItemsDirty = false;
}
-
- /*
- * The following Catch types DO NOT WORK, it jumps to the General Packet Exception Handler if you don't catch Exception!
- *
- catch (System.Net.Sockets.SocketException)
- {
- cacheItems = null;
- }
- catch (WebException)
- {
- cacheItems = null;
- }
- catch (InvalidOperationException)
- {
- cacheItems = null;
- } */
catch (Exception)
{
cacheItems = null;
@@ -11916,87 +11897,54 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
cacheItems = p.Appearance.WearableCacheItems;
}
+ }
+ }
- if (cache != null && cacheItems != null)
+ if (cacheItems != null)
+ {
+ // We need to make sure the asset stored in the bake is available on this server also by its assetid before we map it to a Cacheid.
+ // Copy the baked textures to the sim's assets cache (local only).
+ foreach (WearableCacheItem item in cacheItems)
{
- foreach (WearableCacheItem item in cacheItems)
+ if (cache.GetCached(item.TextureID.ToString()) == null)
{
-
- if (cache.GetCached(item.TextureID.ToString()) == null)
- {
- item.TextureAsset.Temporary = true;
- cache.Store(item.TextureAsset);
- }
-
-
+ item.TextureAsset.Temporary = true;
+ item.TextureAsset.Local = true;
+ cache.Store(item.TextureAsset);
}
}
- if (cacheItems != null)
+
+ // Return the cached textures
+ for (int i = 0; i < maxWearablesLoop; i++)
{
+ WearableCacheItem item =
+ WearableCacheItem.SearchTextureIndex(cachedtex.WearableData[i].TextureIndex, cacheItems);
- for (int i = 0; i < maxWearablesLoop; i++)
+ cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
+ cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
+ cachedresp.WearableData[i].HostName = new byte[0];
+ if (item != null && cachedtex.WearableData[i].ID == item.CacheId)
{
- WearableCacheItem item =
- WearableCacheItem.SearchTextureIndex(cachedtex.WearableData[i].TextureIndex,cacheItems);
-
- cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex= cachedtex.WearableData[i].TextureIndex;
- cachedresp.WearableData[i].HostName = new byte[0];
- if (item != null && cachedtex.WearableData[i].ID == item.CacheId)
- {
-
- cachedresp.WearableData[i].TextureID = item.TextureID;
- }
- else
- {
- cachedresp.WearableData[i].TextureID = UUID.Zero;
- }
+ cachedresp.WearableData[i].TextureID = item.TextureID;
}
- }
- else
- {
- for (int i = 0; i < maxWearablesLoop; i++)
+ else
{
- cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
cachedresp.WearableData[i].TextureID = UUID.Zero;
- //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
- cachedresp.WearableData[i].HostName = new byte[0];
}
}
}
else
{
- if (cache == null)
+ // Cached textures not available
+ for (int i = 0; i < maxWearablesLoop; i++)
{
- for (int i = 0; i < maxWearablesLoop; i++)
- {
- cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
- cachedresp.WearableData[i].TextureID = UUID.Zero;
- //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
- cachedresp.WearableData[i].HostName = new byte[0];
- }
- }
- else
- {
- for (int i = 0; i < maxWearablesLoop; i++)
- {
- cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
-
-
-
- if (cache.GetCached(cachedresp.WearableData[i].TextureID.ToString()) == null)
- cachedresp.WearableData[i].TextureID = UUID.Zero;
- //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
- else
- cachedresp.WearableData[i].TextureID = UUID.Zero;
- // UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
- cachedresp.WearableData[i].HostName = new byte[0];
- }
+ cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
+ cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
+ cachedresp.WearableData[i].TextureID = UUID.Zero;
+ cachedresp.WearableData[i].HostName = new byte[0];
}
}
+
cachedresp.Header.Zerocoded = true;
OutPacket(cachedresp, ThrottleOutPacketType.Task);
--
cgit v1.1