2007-03-22 10:11:15 +00:00
using System ;
using System.Collections.Generic ;
using System.Text ;
using System.Threading ;
using System.Net ;
using System.Net.Sockets ;
using System.IO ;
using libsecondlife ;
using OpenSim.Framework.Interfaces ;
2007-04-25 13:03:48 +00:00
using OpenSim.Framework.Types ;
2007-03-22 10:11:15 +00:00
using OpenSim.Framework.Utilities ;
namespace OpenSim.GridInterfaces.Remote
{
public class RemoteAssetServer : IAssetServer
{
private IAssetReceiver _receiver ;
private BlockingQueue < ARequest > _assetRequests ;
private Thread _remoteAssetServerThread ;
private string AssetServerUrl ;
private string AssetSendKey ;
public RemoteAssetServer ( )
{
this . _assetRequests = new BlockingQueue < ARequest > ( ) ;
this . _remoteAssetServerThread = new Thread ( new ThreadStart ( RunRequests ) ) ;
this . _remoteAssetServerThread . IsBackground = true ;
this . _remoteAssetServerThread . Start ( ) ;
2007-05-12 15:44:10 +00:00
OpenSim . Framework . Console . MainConsole . Instance . WriteLine ( OpenSim . Framework . Console . LogPriority . LOW , "Remote Asset Server class created" ) ;
2007-03-22 10:11:15 +00:00
}
public void SetReceiver ( IAssetReceiver receiver )
{
this . _receiver = receiver ;
}
public void RequestAsset ( LLUUID assetID , bool isTexture )
{
ARequest req = new ARequest ( ) ;
req . AssetID = assetID ;
req . IsTexture = isTexture ;
this . _assetRequests . Enqueue ( req ) ;
}
public void UpdateAsset ( AssetBase asset )
{
}
public void UploadNewAsset ( AssetBase asset )
{
}
public void SetServerInfo ( string ServerUrl , string ServerKey )
{
this . AssetServerUrl = ServerUrl ;
this . AssetSendKey = ServerKey ;
}
private void RunRequests ( )
{
while ( true )
{
2007-04-30 15:38:51 +00:00
//we need to add support for the asset server not knowing about a requested asset
2007-04-30 02:48:05 +00:00
// 404... THE MAGIC FILE NOT FOUND ERROR, very useful for telling you things such as a file (or asset ;) ) not being found!!!!!!!!!!! it's 2:22AM
2007-03-22 10:11:15 +00:00
ARequest req = this . _assetRequests . Dequeue ( ) ;
LLUUID assetID = req . AssetID ;
2007-05-12 15:44:10 +00:00
OpenSim . Framework . Console . MainConsole . Instance . WriteLine ( OpenSim . Framework . Console . LogPriority . LOW , " RemoteAssetServer- Got a AssetServer request, processing it - " + this . AssetServerUrl + "assets/" + assetID ) ;
2007-04-30 04:50:25 +00:00
WebRequest AssetLoad = WebRequest . Create ( this . AssetServerUrl + "assets/" + assetID ) ;
2007-03-22 10:11:15 +00:00
WebResponse AssetResponse = AssetLoad . GetResponse ( ) ;
byte [ ] idata = new byte [ ( int ) AssetResponse . ContentLength ] ;
BinaryReader br = new BinaryReader ( AssetResponse . GetResponseStream ( ) ) ;
idata = br . ReadBytes ( ( int ) AssetResponse . ContentLength ) ;
br . Close ( ) ;
AssetBase asset = new AssetBase ( ) ;
asset . FullID = assetID ;
asset . Data = idata ;
_receiver . AssetReceived ( asset , req . IsTexture ) ;
}
}
public void Close ( )
{
}
}
public class RemoteAssetPlugin : IAssetPlugin
{
public RemoteAssetPlugin ( )
{
}
public IAssetServer GetAssetServer ( )
{
return ( new RemoteAssetServer ( ) ) ;
}
}
}