Deleted the AssetDownload module (and directory), as this module/code hasn't been used for a few thousand revisions now. And the code for sending assets has long since been moved to the LLClientView where it belongs.
parent
6e68a11082
commit
69b72ac83c
|
@ -1,228 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) Contributors, http://opensimulator.org/
|
|
||||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
* * Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* * Neither the name of the OpenSim Project nor the
|
|
||||||
* names of its contributors may be used to endorse or promote products
|
|
||||||
* derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
|
||||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using OpenMetaverse;
|
|
||||||
using OpenMetaverse.Packets;
|
|
||||||
using Nini.Config;
|
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Region.Environment.Interfaces;
|
|
||||||
using OpenSim.Region.Environment.Scenes;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
|
|
||||||
{
|
|
||||||
public class AssetDownloadModule : IRegionModule
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Asset requests with data which are ready to be sent back to requesters. This includes textures.
|
|
||||||
/// </summary>
|
|
||||||
private List<AssetRequest> AssetRequests;
|
|
||||||
|
|
||||||
private Scene m_scene;
|
|
||||||
private Dictionary<UUID, Scene> RegisteredScenes = new Dictionary<UUID, Scene>();
|
|
||||||
|
|
||||||
///
|
|
||||||
/// Assets requests (for each user) which are waiting for asset server data. This includes texture requests
|
|
||||||
/// </summary>
|
|
||||||
private Dictionary<UUID, Dictionary<UUID, AssetRequest>> RequestedAssets;
|
|
||||||
|
|
||||||
public AssetDownloadModule()
|
|
||||||
{
|
|
||||||
RequestedAssets = new Dictionary<UUID, Dictionary<UUID, AssetRequest>>();
|
|
||||||
AssetRequests = new List<AssetRequest>();
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IRegionModule Members
|
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
|
||||||
{
|
|
||||||
if (!RegisteredScenes.ContainsKey(scene.RegionInfo.RegionID))
|
|
||||||
{
|
|
||||||
RegisteredScenes.Add(scene.RegionInfo.RegionID, scene);
|
|
||||||
// scene.EventManager.OnNewClient += NewClient;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_scene == null)
|
|
||||||
{
|
|
||||||
m_scene = scene;
|
|
||||||
// m_thread = new Thread(new ThreadStart(RunAssetQueue));
|
|
||||||
// m_thread.Name = "AssetDownloadQueueThread";
|
|
||||||
// m_thread.IsBackground = true;
|
|
||||||
// m_thread.Start();
|
|
||||||
// OpenSim.Framework.ThreadTracker.Add(m_thread);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PostInitialise()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Close()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Name
|
|
||||||
{
|
|
||||||
get { return "AssetDownloadModule"; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsSharedModule
|
|
||||||
{
|
|
||||||
get { return true; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public void NewClient(IClientAPI client)
|
|
||||||
{
|
|
||||||
// client.OnRequestAsset += AddAssetRequest;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Make an asset request the result of which will be packeted up and sent directly back to the client.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="userInfo"></param>
|
|
||||||
/// <param name="transferRequest"></param>
|
|
||||||
public void AddAssetRequest(IClientAPI userInfo, TransferRequestPacket transferRequest)
|
|
||||||
{
|
|
||||||
UUID requestID = UUID.Zero;
|
|
||||||
byte source = 2;
|
|
||||||
if (transferRequest.TransferInfo.SourceType == 2)
|
|
||||||
{
|
|
||||||
//direct asset request
|
|
||||||
requestID = new UUID(transferRequest.TransferInfo.Params, 0);
|
|
||||||
}
|
|
||||||
else if (transferRequest.TransferInfo.SourceType == 3)
|
|
||||||
{
|
|
||||||
//inventory asset request
|
|
||||||
requestID = new UUID(transferRequest.TransferInfo.Params, 80);
|
|
||||||
source = 3;
|
|
||||||
//Console.WriteLine("asset request " + requestID);
|
|
||||||
}
|
|
||||||
|
|
||||||
//not found asset
|
|
||||||
// so request from asset server
|
|
||||||
Dictionary<UUID, AssetRequest> userRequests = null;
|
|
||||||
if (RequestedAssets.TryGetValue(userInfo.AgentId, out userRequests))
|
|
||||||
{
|
|
||||||
if (!userRequests.ContainsKey(requestID))
|
|
||||||
{
|
|
||||||
AssetRequest request = new AssetRequest();
|
|
||||||
request.RequestUser = userInfo;
|
|
||||||
request.RequestAssetID = requestID;
|
|
||||||
request.TransferRequestID = transferRequest.TransferInfo.TransferID;
|
|
||||||
request.AssetRequestSource = source;
|
|
||||||
request.Params = transferRequest.TransferInfo.Params;
|
|
||||||
userRequests[requestID] = request;
|
|
||||||
m_scene.AssetCache.GetAsset(requestID, AssetCallback, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
userRequests = new Dictionary<UUID, AssetRequest>();
|
|
||||||
AssetRequest request = new AssetRequest();
|
|
||||||
request.RequestUser = userInfo;
|
|
||||||
request.RequestAssetID = requestID;
|
|
||||||
request.TransferRequestID = transferRequest.TransferInfo.TransferID;
|
|
||||||
request.AssetRequestSource = source;
|
|
||||||
request.Params = transferRequest.TransferInfo.Params;
|
|
||||||
userRequests.Add(requestID, request);
|
|
||||||
RequestedAssets[userInfo.AgentId] = userRequests;
|
|
||||||
m_scene.AssetCache.GetAsset(requestID, AssetCallback, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AssetCallback(UUID assetID, AssetBase asset)
|
|
||||||
{
|
|
||||||
if (asset != null)
|
|
||||||
{
|
|
||||||
foreach (Dictionary<UUID, AssetRequest> userRequests in RequestedAssets.Values)
|
|
||||||
{
|
|
||||||
if (userRequests.ContainsKey(assetID))
|
|
||||||
{
|
|
||||||
AssetRequest req = userRequests[assetID];
|
|
||||||
if (req != null)
|
|
||||||
{
|
|
||||||
req.AssetInf = asset;
|
|
||||||
req.NumPackets = CalculateNumPackets(asset.Data);
|
|
||||||
|
|
||||||
userRequests.Remove(assetID);
|
|
||||||
AssetRequests.Add(req);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Calculate the number of packets required to send the asset to the client.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="data"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private int CalculateNumPackets(byte[] data)
|
|
||||||
{
|
|
||||||
const uint m_maxPacketSize = 600;
|
|
||||||
int numPackets = 1;
|
|
||||||
|
|
||||||
if (data.LongLength > m_maxPacketSize)
|
|
||||||
{
|
|
||||||
// over max number of bytes so split up file
|
|
||||||
long restData = data.LongLength - m_maxPacketSize;
|
|
||||||
int restPackets = (int) ((restData + m_maxPacketSize - 1) / m_maxPacketSize);
|
|
||||||
numPackets += restPackets;
|
|
||||||
}
|
|
||||||
|
|
||||||
return numPackets;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Nested type: AssetRequest
|
|
||||||
|
|
||||||
public class AssetRequest
|
|
||||||
{
|
|
||||||
public AssetBase AssetInf;
|
|
||||||
public byte AssetRequestSource = 2;
|
|
||||||
public long DataPointer = 0;
|
|
||||||
public int DiscardLevel = -1;
|
|
||||||
public AssetBase ImageInfo;
|
|
||||||
public bool IsTextureRequest;
|
|
||||||
public int NumPackets = 0;
|
|
||||||
public int PacketCounter = 0;
|
|
||||||
public byte[] Params = null;
|
|
||||||
public UUID RequestAssetID;
|
|
||||||
public IClientAPI RequestUser;
|
|
||||||
public UUID TransferRequestID;
|
|
||||||
//public bool AssetInCache;
|
|
||||||
//public int TimeRequested;
|
|
||||||
|
|
||||||
public AssetRequest()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue