aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs')
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs228
1 files changed, 114 insertions, 114 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
index f41be49..ebcbcc7 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
@@ -1,114 +1,114 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright 7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright 9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the 12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products 13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission. 14 * derived from this software without specific prior written permission.
15 * 15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY 16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using OpenSim.Framework; 28using OpenSim.Framework;
29using OpenSim.Framework.Communications.Cache; 29using OpenSim.Framework.Communications.Cache;
30using OpenSim.Region.Environment.Interfaces; 30using OpenSim.Region.Environment.Interfaces;
31using OpenSim.Region.Environment.Scenes; 31using OpenSim.Region.Environment.Scenes;
32using System.Collections.Generic; 32using System.Collections.Generic;
33using System.Threading; 33using System.Threading;
34using libsecondlife; 34using libsecondlife;
35 35
36namespace OpenSim.Region.Environment.Modules.World.Archiver 36namespace OpenSim.Region.Environment.Modules.World.Archiver
37{ 37{
38 /// <summary> 38 /// <summary>
39 /// Encapsulate the asynchronous requests for the assets required for an archive operation 39 /// Encapsulate the asynchronous requests for the assets required for an archive operation
40 /// </summary> 40 /// </summary>
41 class AssetsRequest 41 class AssetsRequest
42 { 42 {
43 /// <summary> 43 /// <summary>
44 /// uuids to request 44 /// uuids to request
45 /// </summary> 45 /// </summary>
46 protected ICollection<LLUUID> m_uuids; 46 protected ICollection<LLUUID> m_uuids;
47 47
48 /// <summary> 48 /// <summary>
49 /// Callback used when all the assets requested have been received. 49 /// Callback used when all the assets requested have been received.
50 /// </summary> 50 /// </summary>
51 protected AssetsRequestCallback m_assetsRequestCallback; 51 protected AssetsRequestCallback m_assetsRequestCallback;
52 52
53 /// <summary> 53 /// <summary>
54 /// Assets retrieved in this request 54 /// Assets retrieved in this request
55 /// </summary> 55 /// </summary>
56 protected Dictionary<LLUUID, AssetBase> m_assets = new Dictionary<LLUUID, AssetBase>(); 56 protected Dictionary<LLUUID, AssetBase> m_assets = new Dictionary<LLUUID, AssetBase>();
57 57
58 /// <summary> 58 /// <summary>
59 /// Record the number of asset replies required so we know when we've finished 59 /// Record the number of asset replies required so we know when we've finished
60 /// </summary> 60 /// </summary>
61 private int m_repliesRequired; 61 private int m_repliesRequired;
62 62
63 /// <summary> 63 /// <summary>
64 /// Asset cache used to request the assets 64 /// Asset cache used to request the assets
65 /// </summary> 65 /// </summary>
66 protected AssetCache m_assetCache; 66 protected AssetCache m_assetCache;
67 67
68 protected internal AssetsRequest(ICollection<LLUUID> uuids, AssetCache assetCache, AssetsRequestCallback assetsRequestCallback) 68 protected internal AssetsRequest(ICollection<LLUUID> uuids, AssetCache assetCache, AssetsRequestCallback assetsRequestCallback)
69 { 69 {
70 m_uuids = uuids; 70 m_uuids = uuids;
71 m_assetsRequestCallback = assetsRequestCallback; 71 m_assetsRequestCallback = assetsRequestCallback;
72 m_assetCache = assetCache; 72 m_assetCache = assetCache;
73 m_repliesRequired = uuids.Count; 73 m_repliesRequired = uuids.Count;
74 } 74 }
75 75
76 protected internal void Execute() 76 protected internal void Execute()
77 { 77 {
78 // We can stop here if there are no assets to fetch 78 // We can stop here if there are no assets to fetch
79 if (m_repliesRequired == 0) 79 if (m_repliesRequired == 0)
80 m_assetsRequestCallback(m_assets); 80 m_assetsRequestCallback(m_assets);
81 81
82 foreach (LLUUID uuid in m_uuids) 82 foreach (LLUUID uuid in m_uuids)
83 { 83 {
84 m_assetCache.GetAsset(uuid, AssetRequestCallback, true); 84 m_assetCache.GetAsset(uuid, AssetRequestCallback, true);
85 } 85 }
86 } 86 }
87 87
88 /// <summary> 88 /// <summary>
89 /// Called back by the asset cache when it has the asset 89 /// Called back by the asset cache when it has the asset
90 /// </summary> 90 /// </summary>
91 /// <param name="assetID"></param> 91 /// <param name="assetID"></param>
92 /// <param name="asset"></param> 92 /// <param name="asset"></param>
93 public void AssetRequestCallback(LLUUID assetID, AssetBase asset) 93 public void AssetRequestCallback(LLUUID assetID, AssetBase asset)
94 { 94 {
95 m_assets[assetID] = asset; 95 m_assets[assetID] = asset;
96 96
97 if (m_assets.Count == m_repliesRequired) 97 if (m_assets.Count == m_repliesRequired)
98 { 98 {
99 // We want to stop using the asset cache thread asap as we now need to do the actual work of producing the archive 99 // We want to stop using the asset cache thread asap as we now need to do the actual work of producing the archive
100 Thread newThread = new Thread(PerformAssetsRequestCallback); 100 Thread newThread = new Thread(PerformAssetsRequestCallback);
101 newThread.Name = "OpenSimulator archiving thread post assets receipt"; 101 newThread.Name = "OpenSimulator archiving thread post assets receipt";
102 newThread.Start(); 102 newThread.Start();
103 } 103 }
104 } 104 }
105 105
106 /// <summary> 106 /// <summary>
107 /// Perform the callback on the original requester of the assets 107 /// Perform the callback on the original requester of the assets
108 /// </summary> 108 /// </summary>
109 protected void PerformAssetsRequestCallback() 109 protected void PerformAssetsRequestCallback()
110 { 110 {
111 m_assetsRequestCallback(m_assets); 111 m_assetsRequestCallback(m_assets);
112 } 112 }
113 } 113 }
114} 114}