diff options
author | MW | 2007-10-29 09:51:23 +0000 |
---|---|---|
committer | MW | 2007-10-29 09:51:23 +0000 |
commit | 27f003b68314ea5136632d6f9d14057c96ade1e1 (patch) | |
tree | 3bbdb9bb3fac97922768c2f6d0acd5dae3c4278f /OpenSim/Framework/Communications | |
parent | normalized line endings (diff) | |
download | opensim-SC-27f003b68314ea5136632d6f9d14057c96ade1e1.zip opensim-SC-27f003b68314ea5136632d6f9d14057c96ade1e1.tar.gz opensim-SC-27f003b68314ea5136632d6f9d14057c96ade1e1.tar.bz2 opensim-SC-27f003b68314ea5136632d6f9d14057c96ade1e1.tar.xz |
Started the process of cleaning up AssetCache and moving most of the code into modules. Have moved TextureRequest handling (from the client) to a module. But even though to start with I just did a little bit of cleaning up of the existing code, it doesn't seem to work as good as the old code so I need to spend more time on it. So for now am committing my changes but with them not in use. So for now all Texture and asset requests are still handled by the old code in AssetCache.
Diffstat (limited to 'OpenSim/Framework/Communications')
-rw-r--r-- | OpenSim/Framework/Communications/Cache/AssetCache.cs | 168 |
1 files changed, 91 insertions, 77 deletions
diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index a950f51..4c18744 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs | |||
@@ -42,6 +42,8 @@ namespace OpenSim.Framework.Communications.Cache | |||
42 | { | 42 | { |
43 | public delegate void DownloadComplete(AssetCache.TextureSender sender); | 43 | public delegate void DownloadComplete(AssetCache.TextureSender sender); |
44 | 44 | ||
45 | public delegate void AssetRequestCallback(LLUUID assetID, AssetBase asset); | ||
46 | |||
45 | /// <summary> | 47 | /// <summary> |
46 | /// Manages local cache of assets and their sending to viewers. | 48 | /// Manages local cache of assets and their sending to viewers. |
47 | /// </summary> | 49 | /// </summary> |
@@ -63,6 +65,8 @@ namespace OpenSim.Framework.Communications.Cache | |||
63 | 65 | ||
64 | private Dictionary<LLUUID, Dictionary<LLUUID, int>> TimesTextureSent = new Dictionary<LLUUID, Dictionary<LLUUID, int>>(); | 66 | private Dictionary<LLUUID, Dictionary<LLUUID, int>> TimesTextureSent = new Dictionary<LLUUID, Dictionary<LLUUID, int>>(); |
65 | 67 | ||
68 | public Dictionary<LLUUID, AssetRequestsList> RequestLists = new Dictionary<LLUUID, AssetRequestsList>(); | ||
69 | |||
66 | private IAssetServer _assetServer; | 70 | private IAssetServer _assetServer; |
67 | private Thread _assetCacheThread; | 71 | private Thread _assetCacheThread; |
68 | 72 | ||
@@ -123,6 +127,46 @@ namespace OpenSim.Framework.Communications.Cache | |||
123 | return asset; | 127 | return asset; |
124 | } | 128 | } |
125 | 129 | ||
130 | public void GetAsset(LLUUID assetID, AssetRequestCallback callback) | ||
131 | { | ||
132 | AssetBase asset = null; | ||
133 | if (this.Textures.ContainsKey(assetID)) | ||
134 | { | ||
135 | asset = this.Textures[assetID]; | ||
136 | } | ||
137 | else if (this.Assets.ContainsKey(assetID)) | ||
138 | { | ||
139 | asset = this.Assets[assetID]; | ||
140 | } | ||
141 | |||
142 | if (asset != null) | ||
143 | { | ||
144 | callback(assetID, asset); | ||
145 | } | ||
146 | else | ||
147 | { | ||
148 | NewAssetRequest req = new NewAssetRequest(assetID, callback); | ||
149 | if (this.RequestLists.ContainsKey(assetID)) | ||
150 | { | ||
151 | lock (RequestLists) | ||
152 | { | ||
153 | RequestLists[assetID].Requests.Add(req); | ||
154 | } | ||
155 | } | ||
156 | else | ||
157 | { | ||
158 | AssetRequestsList reqList = new AssetRequestsList(assetID); | ||
159 | reqList.Requests.Add(req); | ||
160 | lock (RequestLists) | ||
161 | { | ||
162 | RequestLists.Add(assetID, reqList); | ||
163 | } | ||
164 | } | ||
165 | this._assetServer.FetchAsset(assetID, false); | ||
166 | } | ||
167 | } | ||
168 | |||
169 | |||
126 | public AssetBase GetAsset(LLUUID assetID, bool isTexture) | 170 | public AssetBase GetAsset(LLUUID assetID, bool isTexture) |
127 | { | 171 | { |
128 | AssetBase asset = GetAsset(assetID); | 172 | AssetBase asset = GetAsset(assetID); |
@@ -135,7 +179,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
135 | 179 | ||
136 | public void AddAsset(AssetBase asset) | 180 | public void AddAsset(AssetBase asset) |
137 | { | 181 | { |
138 | // System.Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated()); | 182 | //System.Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated()); |
139 | if (asset.Type == 0) | 183 | if (asset.Type == 0) |
140 | { | 184 | { |
141 | //Console.WriteLine("which is a texture"); | 185 | //Console.WriteLine("which is a texture"); |
@@ -207,26 +251,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
207 | while (true) | 251 | while (true) |
208 | { | 252 | { |
209 | TextureSender sender = this.QueueTextures.Dequeue(); | 253 | TextureSender sender = this.QueueTextures.Dequeue(); |
210 | /* if (TimesTextureSent.ContainsKey(sender.request.RequestUser.AgentId)) | 254 | |
211 | { | ||
212 | if (TimesTextureSent[sender.request.RequestUser.AgentId].ContainsKey(sender.request.ImageInfo.FullID)) | ||
213 | { | ||
214 | TimesTextureSent[sender.request.RequestUser.AgentId][sender.request.ImageInfo.FullID]++; | ||
215 | } | ||
216 | else | ||
217 | { | ||
218 | TimesTextureSent[sender.request.RequestUser.AgentId].Add(sender.request.ImageInfo.FullID, 1); | ||
219 | } | ||
220 | } | ||
221 | else | ||
222 | { | ||
223 | Dictionary<LLUUID, int> UsersSent = new Dictionary<LLUUID,int>(); | ||
224 | TimesTextureSent.Add(sender.request.RequestUser.AgentId, UsersSent ); | ||
225 | UsersSent.Add(sender.request.ImageInfo.FullID, 1); | ||
226 | |||
227 | } | ||
228 | if (TimesTextureSent[sender.request.RequestUser.AgentId][sender.request.ImageInfo.FullID] < 1000) | ||
229 | {*/ | ||
230 | bool finished = sender.SendTexture(); | 255 | bool finished = sender.SendTexture(); |
231 | if (finished) | 256 | if (finished) |
232 | { | 257 | { |
@@ -237,11 +262,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
237 | // Console.WriteLine("readding texture"); | 262 | // Console.WriteLine("readding texture"); |
238 | this.QueueTextures.Enqueue(sender); | 263 | this.QueueTextures.Enqueue(sender); |
239 | } | 264 | } |
240 | /* } | 265 | |
241 | else | ||
242 | { | ||
243 | this.TextureSent(sender); | ||
244 | }*/ | ||
245 | } | 266 | } |
246 | } | 267 | } |
247 | 268 | ||
@@ -317,6 +338,21 @@ namespace OpenSim.Framework.Communications.Cache | |||
317 | } | 338 | } |
318 | } | 339 | } |
319 | } | 340 | } |
341 | |||
342 | if (RequestLists.ContainsKey(asset.FullID)) | ||
343 | { | ||
344 | AssetRequestsList reqList = RequestLists[asset.FullID]; | ||
345 | foreach (NewAssetRequest req in reqList.Requests) | ||
346 | { | ||
347 | req.Callback(asset.FullID, asset); | ||
348 | } | ||
349 | |||
350 | lock (RequestLists) | ||
351 | { | ||
352 | RequestLists.Remove(asset.FullID); | ||
353 | reqList.Requests.Clear(); | ||
354 | } | ||
355 | } | ||
320 | } | 356 | } |
321 | } | 357 | } |
322 | 358 | ||
@@ -508,17 +544,6 @@ namespace OpenSim.Framework.Communications.Cache | |||
508 | } | 544 | } |
509 | 545 | ||
510 | } | 546 | } |
511 | |||
512 | public AssetInfo CloneAsset(LLUUID newOwner, AssetInfo sourceAsset) | ||
513 | { | ||
514 | AssetInfo newAsset = new AssetInfo(); | ||
515 | newAsset.Data = new byte[sourceAsset.Data.Length]; | ||
516 | Array.Copy(sourceAsset.Data, newAsset.Data, sourceAsset.Data.Length); | ||
517 | newAsset.FullID = LLUUID.Random(); | ||
518 | newAsset.Type = sourceAsset.Type; | ||
519 | newAsset.InvType = sourceAsset.InvType; | ||
520 | return (newAsset); | ||
521 | } | ||
522 | #endregion | 547 | #endregion |
523 | 548 | ||
524 | #region Textures | 549 | #region Textures |
@@ -529,7 +554,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
529 | /// <param name="imageID"></param> | 554 | /// <param name="imageID"></param> |
530 | public void AddTextureRequest(IClientAPI userInfo, LLUUID imageID, uint packetNumber, int discard) | 555 | public void AddTextureRequest(IClientAPI userInfo, LLUUID imageID, uint packetNumber, int discard) |
531 | { | 556 | { |
532 | //Console.WriteLine("texture request for " + imageID.ToStringHyphenated() + " packetnumber= " + packetNumber); | 557 | // System.Console.WriteLine("texture request for " + imageID.ToStringHyphenated() + " packetnumber= " + packetNumber); |
533 | //check to see if texture is in local cache, if not request from asset server | 558 | //check to see if texture is in local cache, if not request from asset server |
534 | if (!this.AvatarRecievedTextures.ContainsKey(userInfo.AgentId)) | 559 | if (!this.AvatarRecievedTextures.ContainsKey(userInfo.AgentId)) |
535 | { | 560 | { |
@@ -540,6 +565,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
540 | //Console.WriteLine(userInfo.AgentId +" is requesting a image( "+ imageID+" that has already been sent to them"); | 565 | //Console.WriteLine(userInfo.AgentId +" is requesting a image( "+ imageID+" that has already been sent to them"); |
541 | return; | 566 | return; |
542 | }*/ | 567 | }*/ |
568 | |||
543 | if (!this.Textures.ContainsKey(imageID)) | 569 | if (!this.Textures.ContainsKey(imageID)) |
544 | { | 570 | { |
545 | if (!this.RequestedTextures.ContainsKey(imageID)) | 571 | if (!this.RequestedTextures.ContainsKey(imageID)) |
@@ -556,7 +582,7 @@ namespace OpenSim.Framework.Communications.Cache | |||
556 | return; | 582 | return; |
557 | } | 583 | } |
558 | 584 | ||
559 | //Console.WriteLine("texture already in cache"); | 585 | // System.Console.WriteLine("texture already in cache"); |
560 | TextureImage imag = this.Textures[imageID]; | 586 | TextureImage imag = this.Textures[imageID]; |
561 | AssetRequest req = new AssetRequest(); | 587 | AssetRequest req = new AssetRequest(); |
562 | req.RequestUser = userInfo; | 588 | req.RequestUser = userInfo; |
@@ -583,46 +609,9 @@ namespace OpenSim.Framework.Communications.Cache | |||
583 | this.TextureRequests.Add(req); | 609 | this.TextureRequests.Add(req); |
584 | } | 610 | } |
585 | 611 | ||
586 | public TextureImage CloneImage(LLUUID newOwner, TextureImage source) | 612 | |
587 | { | ||
588 | TextureImage newImage = new TextureImage(); | ||
589 | newImage.Data = new byte[source.Data.Length]; | ||
590 | Array.Copy(source.Data, newImage.Data, source.Data.Length); | ||
591 | //newImage.filename = source.filename; | ||
592 | newImage.FullID = LLUUID.Random(); | ||
593 | newImage.Name = source.Name; | ||
594 | return (newImage); | ||
595 | } | ||
596 | #endregion | 613 | #endregion |
597 | 614 | ||
598 | private IAssetServer LoadAssetDll(string dllName) | ||
599 | { | ||
600 | Assembly pluginAssembly = Assembly.LoadFrom(dllName); | ||
601 | IAssetServer server = null; | ||
602 | |||
603 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
604 | { | ||
605 | if (pluginType.IsPublic) | ||
606 | { | ||
607 | if (!pluginType.IsAbstract) | ||
608 | { | ||
609 | Type typeInterface = pluginType.GetInterface("IAssetPlugin", true); | ||
610 | |||
611 | if (typeInterface != null) | ||
612 | { | ||
613 | IAssetPlugin plug = (IAssetPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
614 | server = plug.GetAssetServer(); | ||
615 | break; | ||
616 | } | ||
617 | |||
618 | typeInterface = null; | ||
619 | } | ||
620 | } | ||
621 | } | ||
622 | pluginAssembly = null; | ||
623 | return server; | ||
624 | } | ||
625 | |||
626 | public class AssetRequest | 615 | public class AssetRequest |
627 | { | 616 | { |
628 | public IClientAPI RequestUser; | 617 | public IClientAPI RequestUser; |
@@ -779,4 +768,29 @@ namespace OpenSim.Framework.Communications.Cache | |||
779 | } | 768 | } |
780 | } | 769 | } |
781 | } | 770 | } |
771 | |||
772 | public class AssetRequestsList | ||
773 | { | ||
774 | public LLUUID AssetID; | ||
775 | public List<NewAssetRequest> Requests = new List<NewAssetRequest>(); | ||
776 | |||
777 | public AssetRequestsList(LLUUID assetID) | ||
778 | { | ||
779 | AssetID = assetID; | ||
780 | } | ||
781 | } | ||
782 | |||
783 | public class NewAssetRequest | ||
784 | { | ||
785 | public LLUUID AssetID; | ||
786 | public AssetRequestCallback Callback; | ||
787 | |||
788 | public NewAssetRequest(LLUUID assetID, AssetRequestCallback callback) | ||
789 | { | ||
790 | AssetID = assetID; | ||
791 | Callback = callback; | ||
792 | } | ||
793 | |||
794 | |||
795 | } | ||
782 | } | 796 | } |