Telehub Support:

Support for viewer side of telehub management. Can manupulate Telehubs and SpawnPoints from the viewer estate managemnt tools. This is a work in progress and does not yet persist or affect teleport routing.
iar_mods
BlueWall 2012-01-20 23:50:37 -05:00
parent c92a9a6640
commit b6f3de5028
7 changed files with 251 additions and 4 deletions

View File

@ -358,6 +358,8 @@ namespace OpenSim.Framework
public delegate void EstateChangeInfo(IClientAPI client, UUID invoice, UUID senderID, UInt32 param1, UInt32 param2); public delegate void EstateChangeInfo(IClientAPI client, UUID invoice, UUID senderID, UInt32 param1, UInt32 param2);
public delegate void EstateManageTelehub(IClientAPI client, UUID invoice, UUID senderID, string cmd, UInt32 param1);
public delegate void RequestTerrain(IClientAPI remoteClient, string clientFileName); public delegate void RequestTerrain(IClientAPI remoteClient, string clientFileName);
public delegate void BakeTerrain(IClientAPI remoteClient); public delegate void BakeTerrain(IClientAPI remoteClient);
@ -769,6 +771,7 @@ namespace OpenSim.Framework
event ModifyTerrain OnModifyTerrain; event ModifyTerrain OnModifyTerrain;
event BakeTerrain OnBakeTerrain; event BakeTerrain OnBakeTerrain;
event EstateChangeInfo OnEstateChangeInfo; event EstateChangeInfo OnEstateChangeInfo;
event EstateManageTelehub OnEstateManageTelehub;
// [Obsolete("LLClientView Specific.")] // [Obsolete("LLClientView Specific.")]
event SetAppearance OnSetAppearance; event SetAppearance OnSetAppearance;
// [Obsolete("LLClientView Specific - Replace and rename OnAvatarUpdate. Difference from SetAppearance?")] // [Obsolete("LLClientView Specific - Replace and rename OnAvatarUpdate. Difference from SetAppearance?")]
@ -1141,6 +1144,8 @@ namespace OpenSim.Framework
void SendTaskInventory(UUID taskID, short serial, byte[] fileName); void SendTaskInventory(UUID taskID, short serial, byte[] fileName);
void SendTelehubInfo(UUID ObjectID, string ObjectName, Vector3 ObjectPos, Quaternion ObjectRot, List<Vector3> SpawnPoint);
/// <summary> /// <summary>
/// Used by the server to inform the client of new inventory items and folders. /// Used by the server to inform the client of new inventory items and folders.
/// </summary> /// </summary>

View File

@ -219,6 +219,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public event BakeTerrain OnBakeTerrain; public event BakeTerrain OnBakeTerrain;
public event RequestTerrain OnUploadTerrain; public event RequestTerrain OnUploadTerrain;
public event EstateChangeInfo OnEstateChangeInfo; public event EstateChangeInfo OnEstateChangeInfo;
public event EstateManageTelehub OnEstateManageTelehub;
public event EstateRestartSimRequest OnEstateRestartSimRequest; public event EstateRestartSimRequest OnEstateRestartSimRequest;
public event EstateChangeCovenantRequest OnEstateChangeCovenantRequest; public event EstateChangeCovenantRequest OnEstateChangeCovenantRequest;
public event UpdateEstateAccessDeltaRequest OnUpdateEstateAccessDeltaRequest; public event UpdateEstateAccessDeltaRequest OnUpdateEstateAccessDeltaRequest;
@ -4482,6 +4483,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(packet, ThrottleOutPacketType.Task); OutPacket(packet, ThrottleOutPacketType.Task);
} }
public void SendTelehubInfo(UUID ObjectID, string ObjectName, Vector3 ObjectPos, Quaternion ObjectRot, List<Vector3> SpawnPoint)
{
TelehubInfoPacket packet = (TelehubInfoPacket)PacketPool.Instance.GetPacket(PacketType.TelehubInfo);
packet.TelehubBlock.ObjectID = ObjectID;
packet.TelehubBlock.ObjectName = Utils.StringToBytes(ObjectName);
packet.TelehubBlock.TelehubPos = ObjectPos;
packet.TelehubBlock.TelehubRot = ObjectRot;
packet.SpawnPointBlock = new TelehubInfoPacket.SpawnPointBlockBlock[SpawnPoint.Count];
for (int n = 0; n < SpawnPoint.Count; n++)
{
packet.SpawnPointBlock[n] = new TelehubInfoPacket.SpawnPointBlockBlock{SpawnPointPos = SpawnPoint[n]};
}
OutPacket(packet, ThrottleOutPacketType.Task);
}
#endregion #endregion
#region Land Data Sending Methods #region Land Data Sending Methods
@ -8920,7 +8938,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private bool HandleEstateOwnerMessage(IClientAPI sender, Packet Pack) private bool HandleEstateOwnerMessage(IClientAPI sender, Packet Pack)
{ {
EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack; EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack;
//m_log.Debug(messagePacket.ToString()); // m_log.InfoFormat("[LLCLIENTVIEW]: Packet: {0}", Utils.BytesToString(messagePacket.MethodData.Method));
GodLandStatRequest handlerLandStatRequest; GodLandStatRequest handlerLandStatRequest;
#region Packet Session and User Check #region Packet Session and User Check
@ -9219,6 +9237,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
return true; return true;
case "telehub":
if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false))
{
UUID invoice = messagePacket.MethodData.Invoice;
UUID SenderID = messagePacket.AgentData.AgentID;
UInt32 param1 = Convert.ToUInt32(Utils.BytesToString(messagePacket.ParamList[1].Parameter));
string command = (string)Utils.BytesToString(messagePacket.ParamList[0].Parameter);
EstateManageTelehub handlerEstateManageTelehub = OnEstateManageTelehub;
if (handlerEstateManageTelehub != null)
{
handlerEstateManageTelehub(this, invoice, SenderID, command, param1);
}
}
return true;
default: default:
m_log.Error("EstateOwnerMessage: Unknown method requested\n" + messagePacket); m_log.Error("EstateOwnerMessage: Unknown method requested\n" + messagePacket);
return true; return true;
@ -9230,8 +9265,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
//lsrp.RequestData.ReportType; // 1 = colliders, 0 = scripts //lsrp.RequestData.ReportType; // 1 = colliders, 0 = scripts
//lsrp.RequestData.RequestFlags; //lsrp.RequestData.RequestFlags;
//lsrp.RequestData.Filter; //lsrp.RequestData.Filter;
// return true;
} }
private bool HandleRequestRegionInfo(IClientAPI sender, Packet Pack) private bool HandleRequestRegionInfo(IClientAPI sender, Packet Pack)

View File

@ -53,6 +53,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
protected EstateManagementCommands m_commands; protected EstateManagementCommands m_commands;
private EstateTerrainXferHandler TerrainUploader; private EstateTerrainXferHandler TerrainUploader;
private TelehubManager m_Telehub;
public event ChangeDelegate OnRegionInfoChange; public event ChangeDelegate OnRegionInfoChange;
public event ChangeDelegate OnEstateInfoChange; public event ChangeDelegate OnEstateInfoChange;
@ -599,6 +600,65 @@ namespace OpenSim.Region.CoreModules.World.Estate
} }
} }
private void handleOnEstateManageTelehub (IClientAPI client, UUID invoice, UUID senderID, string cmd, uint param1)
{
uint ObjectLocalID;
SceneObjectPart part;
// UUID EstateID = Scene.RegionInfo.EstateSettings.EstateID;
TelehubManager.Telehub telehub;
switch (cmd)
{
case "info ui":
// Send info:
if (m_Telehub.HasTelehub)
{
telehub = m_Telehub.TelehubVals();
client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition,
telehub.ObjectRotation, telehub.SpawnPoint);
}
else
{
return;
}
break;
case "connect":
// Add the Telehub
part = Scene.GetSceneObjectPart((uint)param1);
telehub = m_Telehub.Connect(part);
client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition,
telehub.ObjectRotation, telehub.SpawnPoint);
break;
case "delete":
// Disconnect Telehub
part = Scene.GetSceneObjectPart((uint)param1);
telehub = m_Telehub.DisConnect(part);
client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition,
telehub.ObjectRotation, telehub.SpawnPoint);
break;
case "spawnpoint add":
// Add SpawnPoint to the Telehub
part = Scene.GetSceneObjectPart((uint)param1);
telehub = m_Telehub.AddSpawnPoint(part.AbsolutePosition);
client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition,
telehub.ObjectRotation, telehub.SpawnPoint);
break;
case "spawnpoint remove":
// Remove SpawnPoint from Telehub
telehub = m_Telehub.RemoveSpawnPoint((int)param1);
client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition,
telehub.ObjectRotation, telehub.SpawnPoint);
break;
default:
break;
}
}
private void SendSimulatorBlueBoxMessage( private void SendSimulatorBlueBoxMessage(
IClientAPI remote_client, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message) IClientAPI remote_client, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message)
{ {
@ -1056,6 +1116,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
Scene.EventManager.OnNewClient += EventManager_OnNewClient; Scene.EventManager.OnNewClient += EventManager_OnNewClient;
Scene.EventManager.OnRequestChangeWaterHeight += changeWaterHeight; Scene.EventManager.OnRequestChangeWaterHeight += changeWaterHeight;
m_Telehub = new TelehubManager(scene);
m_commands = new EstateManagementCommands(this); m_commands = new EstateManagementCommands(this);
m_commands.Initialise(); m_commands.Initialise();
} }
@ -1109,6 +1171,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
client.OnEstateRestartSimRequest += handleEstateRestartSimRequest; client.OnEstateRestartSimRequest += handleEstateRestartSimRequest;
client.OnEstateChangeCovenantRequest += handleChangeEstateCovenantRequest; client.OnEstateChangeCovenantRequest += handleChangeEstateCovenantRequest;
client.OnEstateChangeInfo += handleEstateChangeInfo; client.OnEstateChangeInfo += handleEstateChangeInfo;
client.OnEstateManageTelehub += handleOnEstateManageTelehub;
client.OnUpdateEstateAccessDeltaRequest += handleEstateAccessDeltaRequest; client.OnUpdateEstateAccessDeltaRequest += handleEstateAccessDeltaRequest;
client.OnSimulatorBlueBoxMessageRequest += SendSimulatorBlueBoxMessage; client.OnSimulatorBlueBoxMessageRequest += SendSimulatorBlueBoxMessage;
client.OnEstateBlueBoxMessageRequest += SendEstateBlueBoxMessage; client.OnEstateBlueBoxMessageRequest += SendEstateBlueBoxMessage;

View File

@ -0,0 +1,130 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using OpenMetaverse;
using System.Collections.Generic;
using OpenSim.Framework;
using OpenSim.Region.Framework.Scenes;
namespace OpenSim.Region.CoreModules.World.Estate
{
public class TelehubManager
{
public struct Telehub
{
public UUID ObjectID;
public string ObjectName;
public Vector3 ObjectPosition;
public Quaternion ObjectRotation;
public List<Vector3> SpawnPoint;
};
private UUID ObjectID;
private string ObjectName;
private Vector3 ObjectPosition;
Quaternion ObjectRotation;
List<Vector3> SpawnPoint = new List<Vector3>();
UUID EstateID;
bool m_HasTelehub = false;
Scene m_Scene;
// This will get an option...
Vector3 InitialSpawnPoint = new Vector3(0.0f,0.0f,-3.0f);
public bool HasTelehub
{
get { return m_HasTelehub; }
}
public TelehubManager(Scene scene)
{
m_Scene = scene;
}
// Fill our Telehub struct with values
public Telehub TelehubVals()
{
Telehub telehub = new Telehub();
telehub.ObjectID = ObjectID;
telehub.ObjectName = ObjectName;
telehub.ObjectPosition = ObjectPosition;
telehub.ObjectRotation = ObjectRotation;
telehub.SpawnPoint = SpawnPoint;
return telehub;
}
// Connect the Telehub
public Telehub Connect(SceneObjectPart part)
{
ObjectID = part.UUID;
ObjectName = part.Name;
ObjectPosition = part.AbsolutePosition;
ObjectRotation = part.GetWorldRotation();
// Clear this for now
SpawnPoint.Clear();
SpawnPoint.Add(InitialSpawnPoint);
m_HasTelehub = true;
return TelehubVals();
}
// Disconnect the Telehub
public Telehub DisConnect(SceneObjectPart part)
{
ObjectID = UUID.Zero;
ObjectName = String.Empty;
ObjectPosition = Vector3.Zero;
ObjectRotation = Quaternion.Identity;
SpawnPoint.Clear();
m_HasTelehub = false;
return TelehubVals();
}
// Add a SpawnPoint to the Telehub
public Telehub AddSpawnPoint(Vector3 point)
{
float dist = (float) Util.GetDistanceTo(ObjectPosition, point);
Vector3 nvec = Util.GetNormalizedVector(point - ObjectPosition);
Vector3 spoint = nvec * dist;
SpawnPoint.Add(spoint);
return TelehubVals();
}
// Remove a SpawnPoint from the Telehub
public Telehub RemoveSpawnPoint(int spawnpoint)
{
SpawnPoint.RemoveAt(spawnpoint);
return TelehubVals();
}
}
}

View File

@ -658,6 +658,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
public event ModifyTerrain OnModifyTerrain; public event ModifyTerrain OnModifyTerrain;
public event BakeTerrain OnBakeTerrain; public event BakeTerrain OnBakeTerrain;
public event EstateChangeInfo OnEstateChangeInfo; public event EstateChangeInfo OnEstateChangeInfo;
public event EstateManageTelehub OnEstateManageTelehub;
public event SetAppearance OnSetAppearance; public event SetAppearance OnSetAppearance;
public event AvatarNowWearing OnAvatarNowWearing; public event AvatarNowWearing OnAvatarNowWearing;
public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv; public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
@ -1530,6 +1531,11 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
} }
public void SendTelehubInfo(UUID ObjectID, string ObjectName, Vector3 ObjectPos, Quaternion ObjectRot, List<Vector3> SpawnPoint)
{
}
public void SendMapItemReply(mapItemReply[] replies, uint mapitemtype, uint flags) public void SendMapItemReply(mapItemReply[] replies, uint mapitemtype, uint flags)
{ {

View File

@ -32,6 +32,7 @@ using OpenMetaverse;
using OpenMetaverse.Packets; using OpenMetaverse.Packets;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.CoreModules.World.Estate;
namespace OpenSim.Region.OptionalModules.World.NPC namespace OpenSim.Region.OptionalModules.World.NPC
{ {
@ -334,6 +335,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
public event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest; public event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest;
public event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest; public event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest;
public event EstateChangeInfo OnEstateChangeInfo; public event EstateChangeInfo OnEstateChangeInfo;
public event EstateManageTelehub OnEstateManageTelehub;
public event ScriptReset OnScriptReset; public event ScriptReset OnScriptReset;
public event GetScriptRunning OnGetScriptRunning; public event GetScriptRunning OnGetScriptRunning;
public event SetScriptRunning OnSetScriptRunning; public event SetScriptRunning OnSetScriptRunning;
@ -923,6 +925,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
public void SendEstateCovenantInformation(UUID covenant) public void SendEstateCovenantInformation(UUID covenant)
{ {
} }
public void SendTelehubInfo(UUID ObjectID, string ObjectName, Vector3 ObjectPos, Quaternion ObjectRot, List<Vector3> SpawnPoint)
{
}
public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner) public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner)
{ {
} }

View File

@ -193,6 +193,7 @@ namespace OpenSim.Tests.Common.Mock
public event RegionInfoRequest OnRegionInfoRequest; public event RegionInfoRequest OnRegionInfoRequest;
public event EstateCovenantRequest OnEstateCovenantRequest; public event EstateCovenantRequest OnEstateCovenantRequest;
public event EstateChangeInfo OnEstateChangeInfo; public event EstateChangeInfo OnEstateChangeInfo;
public event EstateManageTelehub OnEstateManageTelehub;
public event ObjectDuplicateOnRay OnObjectDuplicateOnRay; public event ObjectDuplicateOnRay OnObjectDuplicateOnRay;
@ -945,6 +946,10 @@ namespace OpenSim.Tests.Common.Mock
{ {
} }
public void SendTelehubInfo(UUID ObjectID, string ObjectName, Vector3 ObjectPos, Quaternion ObjectRot, List<Vector3> SpawnPoint)
{
}
public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID) public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID)
{ {
} }