diff --git a/libsecondlife-cs/AssetSystem/ImageManager.cs b/libsecondlife-cs/AssetSystem/ImageManager.cs
index 7534c3a9..8d9d094d 100644
--- a/libsecondlife-cs/AssetSystem/ImageManager.cs
+++ b/libsecondlife-cs/AssetSystem/ImageManager.cs
@@ -39,7 +39,7 @@ using libsecondlife.InventorySystem;
namespace libsecondlife.AssetSystem
{
- public delegate void ImageRetrievedCallback(LLUUID id, byte[] data, bool cached); //this delegate is called when an image completed.
+ public delegate void ImageRetrievedCallback(LLUUID id, byte[] data, bool cached, string statusmsg); //this delegate is called when an image completed.
///
/// Manages the uploading and downloading of Images from SecondLife
@@ -64,8 +64,8 @@ namespace libsecondlife.AssetSystem
private class TransferRequest
{
public ManualResetEvent ReceivedHeaderPacket = new ManualResetEvent(false);
+ public ManualResetEvent Completed = new ManualResetEvent(false);
- public bool Completed;
public bool Status;
public string StatusMsg;
@@ -78,8 +78,6 @@ namespace libsecondlife.AssetSystem
public TransferRequest()
{
- Completed = false;
-
Status = false;
StatusMsg = "";
@@ -151,7 +149,7 @@ namespace libsecondlife.AssetSystem
}
// Image Packet Helpers
- ImagePacketHelper = new ImagePacketHelpers(client.Network.AgentID, client.Network.SessionID);
+ ImagePacketHelper = new ImagePacketHelpers(client);
// Image Callbacks
slClient.Network.RegisterCallback(PacketType.ImageData, new PacketCallback(ImageDataCallbackHandler));
@@ -267,7 +265,6 @@ namespace libsecondlife.AssetSystem
if (htDownloadRequests.ContainsKey(ImageID) == false)
{
tr = new TransferRequest();
- tr.Completed = false;
tr.Size = int.MaxValue; // Number of bytes expected
tr.Received = 0; // Number of bytes received
tr.LastPacket = Helpers.GetUnixTime(); // last time we recevied a packet for this request
@@ -283,10 +280,8 @@ namespace libsecondlife.AssetSystem
}
}
- while( tr.Completed == false )
- {
- slClient.Tick();
- }
+ // Wait for transfer to complete.
+ tr.Completed.WaitOne();
if( tr.Status == true )
{
@@ -320,7 +315,6 @@ namespace libsecondlife.AssetSystem
if (htDownloadRequests.ContainsKey(ImageID) == false)
{
TransferRequest tr = new TransferRequest();
- tr.Completed = false;
tr.Size = int.MaxValue; // Number of bytes expected
tr.Received = 0; // Number of bytes received
tr.LastPacket = Helpers.GetUnixTime(); // last time we recevied a packet for this request
@@ -382,7 +376,7 @@ namespace libsecondlife.AssetSystem
if( tr.Received >= tr.Size )
{
tr.Status = true;
- tr.Completed = true;
+ tr.Completed.Set();
// Fire off image downloaded event
CacheImage(ImageID, tr.AssetData);
@@ -436,7 +430,7 @@ namespace libsecondlife.AssetSystem
if( tr.Received >= tr.Size )
{
tr.Status = true;
- tr.Completed = true;
+ tr.Completed.Set();
// Fire off image downloaded event
CacheImage(ImageID, tr.AssetData);
@@ -471,17 +465,22 @@ namespace libsecondlife.AssetSystem
tr.Status = false;
tr.StatusMsg = "Image not in database";
- tr.Completed = true;
+ tr.Completed.Set();
// Fire off image downloaded event
- FireImageRetrieved(ImageID, null, false);
+ FireImageRetrieved(ImageID, null, false, tr.StatusMsg);
}
private void FireImageRetrieved(LLUUID ImageID, byte[] ImageData, bool cached)
+ {
+ FireImageRetrieved(ImageID, ImageData, cached, "");
+ }
+
+ private void FireImageRetrieved(LLUUID ImageID, byte[] ImageData, bool cached, string status)
{
if (OnImageRetrieved != null)
{
- OnImageRetrieved(ImageID, ImageData, cached);
+ OnImageRetrieved(ImageID, ImageData, cached, status);
}
}
diff --git a/libsecondlife-cs/AssetSystem/ImagePacketHelpers.cs b/libsecondlife-cs/AssetSystem/ImagePacketHelpers.cs
index fcb1e798..44bddcad 100644
--- a/libsecondlife-cs/AssetSystem/ImagePacketHelpers.cs
+++ b/libsecondlife-cs/AssetSystem/ImagePacketHelpers.cs
@@ -37,13 +37,11 @@ namespace libsecondlife.AssetSystem
///
public class ImagePacketHelpers
{
- private LLUUID AgentID;
- private LLUUID SessionID;
+ private SecondLife Client;
- public ImagePacketHelpers(LLUUID AgentID, LLUUID SessionID)
+ public ImagePacketHelpers(SecondLife client)
{
- this.AgentID = AgentID;
- this.SessionID = SessionID;
+ this.Client = client;
}
@@ -65,8 +63,8 @@ namespace libsecondlife.AssetSystem
//FIXME: Find out what the appropriate values are here.
p.RequestImage[0].Type = 0;
- p.AgentData.AgentID = AgentID;
- p.AgentData.SessionID = SessionID;
+ p.AgentData.AgentID = Client.Network.AgentID;
+ p.AgentData.SessionID = Client.Network.SessionID;
return p;
}
diff --git a/libsecondlife-cs/SecondLife.cs b/libsecondlife-cs/SecondLife.cs
index a46556ec..53e36ca6 100644
--- a/libsecondlife-cs/SecondLife.cs
+++ b/libsecondlife-cs/SecondLife.cs
@@ -27,6 +27,7 @@
using System;
using System.Collections.Generic;
using libsecondlife.Packets;
+using libsecondlife.AssetSystem;
namespace libsecondlife
{
@@ -61,6 +62,30 @@ namespace libsecondlife
public ObjectManager Objects;
/// Group Subsystem
public GroupManager Groups;
+
+ /// Image Subsystem
+ private ImageManager _ImageManager;
+ public ImageManager Images
+ {
+ get
+ {
+ if (_ImageManager == null)
+ {
+ _ImageManager = new ImageManager(this);
+ return _ImageManager;
+ }
+ else
+ {
+ return _ImageManager;
+ }
+ }
+
+ set
+ {
+ _ImageManager = value;
+ }
+ }
+
///
public event LogCallback OnLogMessage;
/// Debug flag
diff --git a/libsecondlife-cs/examples/IA_TestAsyncImage/IA_TestAsyncImage.cs b/libsecondlife-cs/examples/IA_TestAsyncImage/IA_TestAsyncImage.cs
index 88c45191..993857f7 100644
--- a/libsecondlife-cs/examples/IA_TestAsyncImage/IA_TestAsyncImage.cs
+++ b/libsecondlife-cs/examples/IA_TestAsyncImage/IA_TestAsyncImage.cs
@@ -128,7 +128,7 @@ namespace IA_TestAsyncImage
}
}
- private void NewImageRetrievedCallBack( LLUUID ImageID, byte[] data, bool wasCached )
+ private void NewImageRetrievedCallBack( LLUUID ImageID, byte[] data, bool wasCached, string statusMsg )
{
if (wasCached)
{
@@ -138,7 +138,7 @@ namespace IA_TestAsyncImage
{
if (data == null)
{
- Console.WriteLine("Image Data is null: " + ImageID);
+ Console.WriteLine("Image Data is null (" + statusMsg + "): " + ImageID);
}
else
{
diff --git a/libsecondlife-cs/examples/groupmanager/frmGroupInfo.cs b/libsecondlife-cs/examples/groupmanager/frmGroupInfo.cs
index ec0228f7..9addf921 100644
--- a/libsecondlife-cs/examples/groupmanager/frmGroupInfo.cs
+++ b/libsecondlife-cs/examples/groupmanager/frmGroupInfo.cs
@@ -51,15 +51,25 @@ namespace groupmanager
Invoke(new MethodInvoker(UpdateProfile));
// Waterdrop: new LLUUID("c77a1c21-e604-7d2c-2c89-5539ce853466")
- ImageManager im = new ImageManager(Client);
- byte[] j2cdata = im.RequestImage(Group.InsigniaID);
- //
- //JasperWrapper.jas_init();
+
+ byte[] j2cdata;
+ if (Group.InsigniaID != null)
+ {
+ j2cdata = Client.Images.RequestImage(Group.InsigniaID);
+ }
+ else
+ {
+ // TODO: Add somekind of
+ j2cdata = Client.Images.RequestImage("c77a1c21-e604-7d2c-2c89-5539ce853466");
+ }
+
byte[] imagedata = JasperWrapper.jasper_decode_j2c_to_tiff(j2cdata);
+
//
MemoryStream imageStream = new MemoryStream(imagedata, false);
Image image = Image.FromStream(imageStream, false, false);
//
+
picInsignia.Image = image;
}