Index: EstateTools.cs =================================================================== --- EstateTools.cs (revision 2350) +++ EstateTools.cs (working copy) @@ -26,15 +26,16 @@ using System; using OpenMetaverse.Packets; using System.Collections.Generic; +using System.IO; namespace OpenMetaverse { - /// - /// Estate level administration and utilities - /// - public class EstateTools - { - private GridClient Client; + /// + /// Estate level administration and utilities + /// + public class EstateTools + { + private GridClient Client; public GroundTextureSettings GroundTextures; /// @@ -102,14 +103,19 @@ /// Constructor for EstateTools class /// /// - public EstateTools(GridClient client) - { - Client = client; + public EstateTools(GridClient client) + { + Client = client; Client.Network.RegisterCallback(PacketType.LandStatReply, new NetworkManager.PacketCallback(LandStatReplyHandler)); Client.Network.RegisterCallback(PacketType.EstateOwnerMessage, new NetworkManager.PacketCallback(EstateOwnerMessageHandler)); Client.Network.RegisterCallback(PacketType.EstateCovenantReply, new NetworkManager.PacketCallback(EstateCovenantReplyHandler)); - } + Client.Network.RegisterCallback(PacketType.InitiateDownload, new NetworkManager.PacketCallback(DownloadRawHandler)); + Client.Network.RegisterCallback(PacketType.RequestXfer, new NetworkManager.PacketCallback(TransferPacketHandler)); + } + private void TransferPacketHandler(Packet packet, Simulator simulator) + { + } /// Describes tasks returned in LandStatReply public class EstateTask { @@ -177,7 +183,7 @@ p.RequestData.Filter = Utils.StringToBytes(filter); p.RequestData.ParcelLocalID = parcelLocalID; p.RequestData.ReportType = (uint)reportType; - p.RequestData.RequestFlags = requestFlags; + p.RequestData.RequestFlags = requestFlags; Client.Network.SendPacket(p); } @@ -201,6 +207,38 @@ LandStatRequest(0, LandStatReportType.TopColliders, 0, ""); } + /// + /// Download RAW Terrain file + /// + /// Usage: C:\\DIR\\ + /// Usage: (filename).raw + public void DownloadRaw(string filePath, string fileName) + { + List listParam = new List(); + listParam.Add("download filename"); + listParam.Add(filePath+fileName); + EstateOwnerMessage("terrain", listParam); + } + + /// + /// Upload RAW Terrain file + /// + /// Usage: C:\\DIR\\ + /// Usage: (filename).raw + public void UploadRaw(string filePath, string fileName) + { + List listParam = new List(); + listParam.Add("upload filename"); + listParam.Add(filePath + fileName); + + + SendXferPacketPacket p = new SendXferPacketPacket(); + + p.DataPacket.Data = File.ReadAllBytes(filePath + fileName); + Client.Network.SendPacket(p); + EstateOwnerMessage("terrain", listParam); + } + private void EstateCovenantReplyHandler(Packet packet, Simulator simulator) { EstateCovenantReplyPacket reply = (EstateCovenantReplyPacket)packet; @@ -368,9 +406,37 @@ */ } + private void UploadRawHandler(Packet packet, Simulator simulator) + { + TransferRequestPacket reply = (TransferRequestPacket)packet; + } /// /// /// + private void DownloadRawHandler(Packet packet, Simulator simulator) + { + InitiateDownloadPacket reply = (InitiateDownloadPacket)packet; + ulong xferID = 0; + string fileName = Utils.BytesToString(reply.FileData.SimFilename); + string fileLocation = Utils.BytesToString(reply.FileData.ViewerFilename); + + AssetManager.XferReceivedCallback xferCallback = + delegate(XferDownload xfer) + { + if (xfer.XferID == xferID) + { + File.WriteAllBytes(fileLocation, xfer.AssetData); + } + }; + + Client.Assets.OnXferReceived += xferCallback; + + xferID = Client.Assets.RequestAssetXfer(fileName, false, false, UUID.Zero, AssetType.Unknown, false); + } + + /// + /// + /// private void LandStatReplyHandler(Packet packet, Simulator simulator) { //if (OnLandStatReply != null || OnGetTopScripts != null || OnGetTopColliders != null) @@ -432,7 +498,7 @@ /// /// EstateOwnerMessage Method field /// List of parameters to include - public void EstateOwnerMessage(string method, ListlistParams) + public void EstateOwnerMessage(string method, List listParams) { EstateOwnerMessagePacket estate = new EstateOwnerMessagePacket(); estate.AgentData.AgentID = Client.Self.AgentID; @@ -453,10 +519,10 @@ /// Kick an avatar from an estate /// /// Key of Agent to remove - public void KickUser(UUID userID) - { + public void KickUser(UUID userID) + { EstateOwnerMessage("kickestate", userID.ToString()); - } + } /// /// Ban an avatar from an estate @@ -574,6 +640,6 @@ Client.Network.SendPacket(req); } - } + } }