* Actually send LogoutReply packet * Aesthetic improvements to terrain git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@2149 52acb1d6-8a22-11de-b505-999d5b087335
77 lines
2.7 KiB
C#
77 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using OpenMetaverse;
|
|
using OpenMetaverse.Imaging;
|
|
using OpenMetaverse.Packets;
|
|
|
|
namespace Simian.Extensions
|
|
{
|
|
public class ImageDelivery : ISimianExtension
|
|
{
|
|
Simian Server;
|
|
byte[] DefaultJP2;
|
|
byte[] DefaultBakedJP2;
|
|
|
|
public ImageDelivery(Simian server)
|
|
{
|
|
Server = server;
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
Server.UDPServer.RegisterPacketCallback(PacketType.RequestImage, new UDPServer.PacketCallback(RequestImageHandler));
|
|
|
|
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 = OpenJPEG.Encode(defaultManaged, true);
|
|
DefaultBakedJP2 = OpenJPEG.Encode(defaultBaked, true);
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
}
|
|
|
|
void RequestImageHandler(Packet packet, Agent agent)
|
|
{
|
|
RequestImagePacket request = (RequestImagePacket)packet;
|
|
|
|
for (int i = 0; i < request.RequestImage.Length; i++)
|
|
{
|
|
RequestImagePacket.RequestImageBlock block = request.RequestImage[i];
|
|
bool bake = ((ImageType)block.Type == ImageType.Baked);
|
|
|
|
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;
|
|
}
|
|
else
|
|
{
|
|
Logger.DebugLog(String.Format("Sending default texture for {0}", block.Image));
|
|
imageData.ImageData.Data = DefaultJP2;
|
|
}
|
|
imageData.ImageID.Size = (uint)imageData.ImageData.Data.Length;
|
|
|
|
agent.SendPacket(imageData);
|
|
}
|
|
}
|
|
}
|
|
}
|