Simian:
* Cleaned up ImageDelivery * Implemented CopyItemInventory * Serialize with indented XML * Only read an inventory skeleton if the login succeeded git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@2274 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using ExtensionLoader;
|
||||
using OpenMetaverse;
|
||||
@@ -85,8 +84,6 @@ namespace Simian.Extensions
|
||||
public class ImageDelivery : IExtension
|
||||
{
|
||||
Simian Server;
|
||||
AssetTexture defaultJP2;
|
||||
AssetTexture defaultBakedJP2;
|
||||
Dictionary<UUID, ImageDownload> CurrentDownloads = new Dictionary<UUID, ImageDownload>();
|
||||
BlockingQueue<ImageDownload> CurrentDownloadQueue = new BlockingQueue<ImageDownload>();
|
||||
|
||||
@@ -98,24 +95,6 @@ namespace Simian.Extensions
|
||||
public void Start()
|
||||
{
|
||||
Server.UDP.RegisterPacketCallback(PacketType.RequestImage, new PacketCallback(RequestImageHandler));
|
||||
|
||||
// Create default textures for missing images and missing bakes
|
||||
Bitmap defaultImage = new Bitmap(32, 32);
|
||||
Graphics gfx = Graphics.FromImage(defaultImage);
|
||||
gfx.Clear(Color.White);
|
||||
gfx.FillRectangles(Brushes.LightGray, new Rectangle[] { new Rectangle(16, 16, 16, 16), new Rectangle(0, 0, 16, 16) });
|
||||
gfx.DrawImage(defaultImage, 0, 0, 32, 32);
|
||||
|
||||
ManagedImage defaultManaged = new ManagedImage(defaultImage);
|
||||
|
||||
ManagedImage defaultBaked = new ManagedImage(defaultImage);
|
||||
defaultBaked.Channels = ManagedImage.ImageChannels.Color | ManagedImage.ImageChannels.Alpha |
|
||||
ManagedImage.ImageChannels.Bump;
|
||||
defaultBaked.Alpha = defaultBaked.Red;
|
||||
defaultBaked.Bump = defaultBaked.Red;
|
||||
|
||||
defaultJP2 = new AssetTexture(UUID.Zero, OpenJPEG.Encode(defaultManaged, true));
|
||||
defaultBakedJP2 = new AssetTexture(UUID.Zero, OpenJPEG.Encode(defaultBaked, true));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -247,27 +226,6 @@ namespace Simian.Extensions
|
||||
ImageNotInDatabasePacket notfound = new ImageNotInDatabasePacket();
|
||||
notfound.ImageID.ID = block.Image;
|
||||
Server.UDP.SendPacket(agent.AgentID, notfound, PacketCategory.Texture);
|
||||
|
||||
/*
|
||||
// TODO: Technically we should return ImageNotInDatabasePacket, but for now return a default texture
|
||||
ImageDataPacket imageData = new ImageDataPacket();
|
||||
imageData.ImageID.ID = block.Image;
|
||||
imageData.ImageID.Codec = 1;
|
||||
imageData.ImageID.Packets = 1;
|
||||
if (bake)
|
||||
{
|
||||
Logger.DebugLog(String.Format("Sending default bake texture for {0}", block.Image));
|
||||
imageData.ImageData.Data = defaultBakedJP2.AssetData;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.DebugLog(String.Format("Sending default texture for {0}", block.Image));
|
||||
imageData.ImageData.Data = defaultJP2.AssetData;
|
||||
}
|
||||
imageData.ImageID.Size = (uint)imageData.ImageData.Data.Length;
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, imageData, PacketCategory.Texture);
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ namespace Simian.Extensions
|
||||
Server.UDP.RegisterPacketCallback(PacketType.UpdateInventoryItem, new PacketCallback(UpdateInventoryItemHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.FetchInventoryDescendents, new PacketCallback(FetchInventoryDescendentsHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.FetchInventory, new PacketCallback(FetchInventoryHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.CopyInventoryItem, new PacketCallback(CopyInventoryItemHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.MoveInventoryItem, new PacketCallback(MoveInventoryItemHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.MoveInventoryFolder, new PacketCallback(MoveInventoryFolderHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.PurgeInventoryDescendents, new PacketCallback(PurgeInventoryDescendentsHandler));
|
||||
@@ -318,6 +319,53 @@ namespace Simian.Extensions
|
||||
Server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Inventory);
|
||||
}
|
||||
|
||||
void CopyInventoryItemHandler(Packet packet, Agent agent)
|
||||
{
|
||||
CopyInventoryItemPacket copy = (CopyInventoryItemPacket)packet;
|
||||
|
||||
for (int i = 0; i < copy.InventoryData.Length; i++)
|
||||
{
|
||||
CopyInventoryItemPacket.InventoryDataBlock block = copy.InventoryData[i];
|
||||
|
||||
// TODO: This allows someone to copy objects from another
|
||||
// agent's inventory. Should we allow that, or do any
|
||||
// permission checks?
|
||||
Dictionary<UUID, InventoryObject> agentInventory = GetAgentInventory(block.OldAgentID);
|
||||
|
||||
// Get the original object
|
||||
InventoryObject obj;
|
||||
if (agentInventory.TryGetValue(block.OldItemID, out obj) && obj is InventoryItem)
|
||||
{
|
||||
InventoryItem item = (InventoryItem)obj;
|
||||
|
||||
// Get the new folder
|
||||
InventoryObject folderObj;
|
||||
if (agentInventory.TryGetValue(block.NewFolderID, out folderObj) && folderObj is InventoryFolder)
|
||||
{
|
||||
string newName = Utils.BytesToString(block.NewName);
|
||||
if (String.IsNullOrEmpty(newName))
|
||||
newName = item.Name;
|
||||
|
||||
// Create the copy
|
||||
CreateItem(agent.AgentID, newName, item.Description, item.InventoryType, item.AssetType,
|
||||
item.AssetID, folderObj.ID, item.Permissions.OwnerMask, item.Permissions.NextOwnerMask,
|
||||
agent.AgentID, item.CreatorID, UUID.Zero, block.CallbackID);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Log("CopyInventoryItem called with an unknown target folder " + block.NewFolderID,
|
||||
Helpers.LogLevel.Warning);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Log("CopyInventoryItem called for an unknown item " + block.OldItemID,
|
||||
Helpers.LogLevel.Warning);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInventoryItemHandler(Packet packet, Agent agent)
|
||||
{
|
||||
MoveInventoryItemPacket move = (MoveInventoryItemPacket)packet;
|
||||
@@ -663,7 +711,7 @@ namespace Simian.Extensions
|
||||
}
|
||||
}
|
||||
|
||||
#region Persistance
|
||||
#region Persistence
|
||||
|
||||
LLSDMap SerializeItem(InventoryItem item)
|
||||
{
|
||||
@@ -838,6 +886,6 @@ namespace Simian.Extensions
|
||||
Helpers.LogLevel.Info);
|
||||
}
|
||||
|
||||
#endregion Persistance
|
||||
#endregion Persistence
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ namespace Simian.Extensions
|
||||
try
|
||||
{
|
||||
XmlTextWriter writer = new XmlTextWriter(server.DataDir + "simiandata.xml", System.Text.Encoding.UTF8);
|
||||
writer.Formatting = Formatting.Indented;
|
||||
writer.WriteStartElement("llsd");
|
||||
LLSDParser.SerializeXmlElement(writer, dictionary);
|
||||
writer.WriteEndElement();
|
||||
|
||||
Reference in New Issue
Block a user