diff options
Diffstat (limited to 'OpenSim/Framework/Communications/Cache/AssetCache.cs')
-rw-r--r-- | OpenSim/Framework/Communications/Cache/AssetCache.cs | 108 |
1 files changed, 66 insertions, 42 deletions
diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index 6be0852..8adf76c 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs | |||
@@ -58,37 +58,40 @@ namespace OpenSim.Framework.Communications.Cache | |||
58 | //Textures requested from the asset server | 58 | //Textures requested from the asset server |
59 | 59 | ||
60 | public Dictionary<LLUUID, TextureSender> SendingTextures = new Dictionary<LLUUID, TextureSender>(); | 60 | public Dictionary<LLUUID, TextureSender> SendingTextures = new Dictionary<LLUUID, TextureSender>(); |
61 | private BlockingQueue<TextureSender> QueueTextures = new BlockingQueue<TextureSender>(); | ||
62 | 61 | ||
63 | private Dictionary<LLUUID, List<LLUUID>> AvatarRecievedTextures = new Dictionary<LLUUID, List<LLUUID>>(); | 62 | public Dictionary<LLUUID, AssetRequestsList> RequestLists = new Dictionary<LLUUID, AssetRequestsList>(); |
63 | |||
64 | private BlockingQueue<TextureSender> m_queueTextures = new BlockingQueue<TextureSender>(); | ||
65 | private Dictionary<LLUUID, List<LLUUID>> m_avatarReceivedTextures = new Dictionary<LLUUID, List<LLUUID>>(); | ||
64 | 66 | ||
65 | private Dictionary<LLUUID, Dictionary<LLUUID, int>> TimesTextureSent = | 67 | private Dictionary<LLUUID, Dictionary<LLUUID, int>> m_timesTextureSent = |
66 | new Dictionary<LLUUID, Dictionary<LLUUID, int>>(); | 68 | new Dictionary<LLUUID, Dictionary<LLUUID, int>>(); |
67 | 69 | ||
68 | public Dictionary<LLUUID, AssetRequestsList> RequestLists = new Dictionary<LLUUID, AssetRequestsList>(); | ||
69 | 70 | ||
70 | private IAssetServer _assetServer; | 71 | private IAssetServer m_assetServer; |
71 | private Thread _assetCacheThread; | ||
72 | 72 | ||
73 | private Thread TextureSenderThread; | 73 | private Thread m_assetCacheThread; |
74 | private Thread m_textureSenderThread; | ||
75 | private LogBase m_log; | ||
74 | 76 | ||
75 | /// <summary> | 77 | /// <summary> |
76 | /// | 78 | /// |
77 | /// </summary> | 79 | /// </summary> |
78 | public AssetCache(IAssetServer assetServer) | 80 | public AssetCache(IAssetServer assetServer, LogBase log) |
79 | { | 81 | { |
80 | MainLog.Instance.Verbose("ASSETSTORAGE", "Creating Asset cache"); | 82 | log.Verbose("ASSETSTORAGE", "Creating Asset cache"); |
81 | _assetServer = assetServer; | 83 | m_assetServer = assetServer; |
82 | _assetServer.SetReceiver(this); | 84 | m_assetServer.SetReceiver(this); |
83 | Assets = new Dictionary<LLUUID, AssetInfo>(); | 85 | Assets = new Dictionary<LLUUID, AssetInfo>(); |
84 | Textures = new Dictionary<LLUUID, TextureImage>(); | 86 | Textures = new Dictionary<LLUUID, TextureImage>(); |
85 | _assetCacheThread = new Thread(new ThreadStart(RunAssetManager)); | 87 | m_assetCacheThread = new Thread(new ThreadStart(RunAssetManager)); |
86 | _assetCacheThread.IsBackground = true; | 88 | m_assetCacheThread.IsBackground = true; |
87 | _assetCacheThread.Start(); | 89 | m_assetCacheThread.Start(); |
88 | 90 | ||
89 | TextureSenderThread = new Thread(new ThreadStart(ProcessTextureSenders)); | 91 | m_textureSenderThread = new Thread(new ThreadStart(ProcessTextureSenders)); |
90 | TextureSenderThread.IsBackground = true; | 92 | m_textureSenderThread.IsBackground = true; |
91 | TextureSenderThread.Start(); | 93 | m_textureSenderThread.Start(); |
94 | m_log = log; | ||
92 | } | 95 | } |
93 | 96 | ||
94 | /// <summary> | 97 | /// <summary> |
@@ -161,7 +164,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
161 | RequestLists.Add(assetID, reqList); | 164 | RequestLists.Add(assetID, reqList); |
162 | } | 165 | } |
163 | } | 166 | } |
164 | _assetServer.RequestAsset(assetID, false); | 167 | m_assetServer.RequestAsset(assetID, false); |
165 | } | 168 | } |
166 | } | 169 | } |
167 | 170 | ||
@@ -171,46 +174,67 @@ namespace OpenSim.Framework.Communications.Cache | |||
171 | AssetBase asset = GetAsset(assetID); | 174 | AssetBase asset = GetAsset(assetID); |
172 | if (asset == null) | 175 | if (asset == null) |
173 | { | 176 | { |
174 | _assetServer.RequestAsset(assetID, isTexture); | 177 | m_assetServer.RequestAsset(assetID, isTexture); |
175 | } | 178 | } |
176 | return asset; | 179 | return asset; |
177 | } | 180 | } |
178 | 181 | ||
179 | public void AddAsset(AssetBase asset) | 182 | public void AddAsset(AssetBase asset) |
180 | { | 183 | { |
181 | //System.Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated()); | 184 | string temporary = asset.Temporary ? "temporary" : ""; |
185 | string type = asset.Type == 0 ? "texture" : "asset"; | ||
186 | |||
187 | string result = "Ignored"; | ||
188 | |||
182 | if (asset.Type == 0) | 189 | if (asset.Type == 0) |
183 | { | 190 | { |
184 | //Console.WriteLine("which is a texture"); | 191 | if(Textures.ContainsKey(asset.FullID)) |
185 | if (!Textures.ContainsKey(asset.FullID)) | ||
186 | { | 192 | { |
187 | //texture | 193 | result = "Duplicate ignored."; |
188 | TextureImage textur = new TextureImage(asset); | ||
189 | Textures.Add(textur.FullID, textur); | ||
190 | if (!asset.Temporary) | ||
191 | _assetServer.StoreAndCommitAsset(asset); | ||
192 | } | 194 | } |
193 | else | 195 | else |
194 | { | 196 | { |
195 | TextureImage textur = new TextureImage(asset); | 197 | TextureImage textur = new TextureImage(asset); |
196 | Textures[asset.FullID] = textur; | 198 | Textures.Add(textur.FullID, textur); |
199 | if (asset.Temporary) | ||
200 | { | ||
201 | result = "Added to cache"; | ||
202 | } | ||
203 | else | ||
204 | { | ||
205 | m_assetServer.StoreAndCommitAsset(asset); | ||
206 | result = "Added to server"; | ||
207 | } | ||
197 | } | 208 | } |
198 | } | 209 | } |
199 | else | 210 | else |
200 | { | 211 | { |
201 | if (!Assets.ContainsKey(asset.FullID)) | 212 | if (Assets.ContainsKey(asset.FullID)) |
213 | { | ||
214 | result = "Duplicate ignored."; | ||
215 | } | ||
216 | else | ||
202 | { | 217 | { |
203 | AssetInfo assetInf = new AssetInfo(asset); | 218 | AssetInfo assetInf = new AssetInfo(asset); |
204 | Assets.Add(assetInf.FullID, assetInf); | 219 | Assets.Add(assetInf.FullID, assetInf); |
205 | if (!asset.Temporary) | 220 | if (asset.Temporary) |
206 | _assetServer.StoreAndCommitAsset(asset); | 221 | { |
222 | result = "Added to cache"; | ||
223 | } | ||
224 | else | ||
225 | { | ||
226 | m_assetServer.StoreAndCommitAsset(asset); | ||
227 | result = "Added to server"; | ||
228 | } | ||
207 | } | 229 | } |
208 | } | 230 | } |
231 | |||
232 | m_log.Verbose("ASSETCACHE", "Adding {0} {1} [{2}]: {3}.", temporary, type, asset.FullID, result); | ||
209 | } | 233 | } |
210 | 234 | ||
211 | public void DeleteAsset(LLUUID assetID) | 235 | public void DeleteAsset(LLUUID assetID) |
212 | { | 236 | { |
213 | // this._assetServer.DeleteAsset(assetID); | 237 | // this.m_assetServer.DeleteAsset(assetID); |
214 | 238 | ||
215 | //Todo should delete it from memory too | 239 | //Todo should delete it from memory too |
216 | } | 240 | } |
@@ -238,7 +262,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
238 | TextureSender sender = new TextureSender(req); | 262 | TextureSender sender = new TextureSender(req); |
239 | //sender.OnComplete += this.TextureSent; | 263 | //sender.OnComplete += this.TextureSent; |
240 | SendingTextures.Add(req.ImageInfo.FullID, sender); | 264 | SendingTextures.Add(req.ImageInfo.FullID, sender); |
241 | QueueTextures.Enqueue(sender); | 265 | m_queueTextures.Enqueue(sender); |
242 | } | 266 | } |
243 | } | 267 | } |
244 | 268 | ||
@@ -249,7 +273,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
249 | { | 273 | { |
250 | while (true) | 274 | while (true) |
251 | { | 275 | { |
252 | TextureSender sender = QueueTextures.Dequeue(); | 276 | TextureSender sender = m_queueTextures.Dequeue(); |
253 | 277 | ||
254 | bool finished = sender.SendTexture(); | 278 | bool finished = sender.SendTexture(); |
255 | if (finished) | 279 | if (finished) |
@@ -259,7 +283,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
259 | else | 283 | else |
260 | { | 284 | { |
261 | // Console.WriteLine("readding texture"); | 285 | // Console.WriteLine("readding texture"); |
262 | QueueTextures.Enqueue(sender); | 286 | m_queueTextures.Enqueue(sender); |
263 | } | 287 | } |
264 | } | 288 | } |
265 | } | 289 | } |
@@ -273,7 +297,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
273 | if (SendingTextures.ContainsKey(sender.request.ImageInfo.FullID)) | 297 | if (SendingTextures.ContainsKey(sender.request.ImageInfo.FullID)) |
274 | { | 298 | { |
275 | SendingTextures.Remove(sender.request.ImageInfo.FullID); | 299 | SendingTextures.Remove(sender.request.ImageInfo.FullID); |
276 | // this.AvatarRecievedTextures[sender.request.RequestUser.AgentId].Add(sender.request.ImageInfo.FullID); | 300 | // this.m_avatarReceivedTextures[sender.request.RequestUser.AgentId].Add(sender.request.ImageInfo.FullID); |
277 | } | 301 | } |
278 | } | 302 | } |
279 | 303 | ||
@@ -409,7 +433,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
409 | request.AssetRequestSource = source; | 433 | request.AssetRequestSource = source; |
410 | request.Params = transferRequest.TransferInfo.Params; | 434 | request.Params = transferRequest.TransferInfo.Params; |
411 | RequestedAssets.Add(requestID, request); | 435 | RequestedAssets.Add(requestID, request); |
412 | _assetServer.RequestAsset(requestID, false); | 436 | m_assetServer.RequestAsset(requestID, false); |
413 | } | 437 | } |
414 | return; | 438 | return; |
415 | } | 439 | } |
@@ -555,11 +579,11 @@ namespace OpenSim.Framework.Communications.Cache | |||
555 | { | 579 | { |
556 | // System.Console.WriteLine("texture request for " + imageID.ToStringHyphenated() + " packetnumber= " + packetNumber); | 580 | // System.Console.WriteLine("texture request for " + imageID.ToStringHyphenated() + " packetnumber= " + packetNumber); |
557 | //check to see if texture is in local cache, if not request from asset server | 581 | //check to see if texture is in local cache, if not request from asset server |
558 | if (!AvatarRecievedTextures.ContainsKey(userInfo.AgentId)) | 582 | if (!m_avatarReceivedTextures.ContainsKey(userInfo.AgentId)) |
559 | { | 583 | { |
560 | AvatarRecievedTextures.Add(userInfo.AgentId, new List<LLUUID>()); | 584 | m_avatarReceivedTextures.Add(userInfo.AgentId, new List<LLUUID>()); |
561 | } | 585 | } |
562 | /* if(this.AvatarRecievedTextures[userInfo.AgentId].Contains(imageID)) | 586 | /* if(this.m_avatarReceivedTextures[userInfo.AgentId].Contains(imageID)) |
563 | { | 587 | { |
564 | //Console.WriteLine(userInfo.AgentId +" is requesting a image( "+ imageID+" that has already been sent to them"); | 588 | //Console.WriteLine(userInfo.AgentId +" is requesting a image( "+ imageID+" that has already been sent to them"); |
565 | return; | 589 | return; |
@@ -576,7 +600,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
576 | request.IsTextureRequest = true; | 600 | request.IsTextureRequest = true; |
577 | request.DiscardLevel = discard; | 601 | request.DiscardLevel = discard; |
578 | RequestedTextures.Add(imageID, request); | 602 | RequestedTextures.Add(imageID, request); |
579 | _assetServer.RequestAsset(imageID, true); | 603 | m_assetServer.RequestAsset(imageID, true); |
580 | } | 604 | } |
581 | return; | 605 | return; |
582 | } | 606 | } |