mirror of
https://github.com/opensim/opensim.git
synced 2026-08-12 20:55:43 +08:00
Patch from Johan: LibSL updated to the latest revision (1568) and all packets are now
recycled to improve performance and memory usage.
This commit is contained in:
@@ -32,6 +32,7 @@ using libsecondlife;
|
||||
using libsecondlife.Packets;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Environment.Scenes;
|
||||
using OpenSim.Region.Environment.Interfaces;
|
||||
|
||||
namespace OpenSim.Region.Environment.LandManagement
|
||||
{
|
||||
@@ -110,7 +111,9 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
public void sendLandProperties(int sequence_id, bool snap_selection, int request_result,
|
||||
IClientAPI remote_client)
|
||||
{
|
||||
ParcelPropertiesPacket updatePacket = new ParcelPropertiesPacket();
|
||||
ParcelPropertiesPacket updatePacket = (ParcelPropertiesPacket) PacketPool.Instance.GetPacket(PacketType.ParcelProperties);
|
||||
// TODO: don't create new blocks if recycling an old packet
|
||||
|
||||
updatePacket.ParcelData.AABBMax = landData.AABBMax;
|
||||
updatePacket.ParcelData.AABBMin = landData.AABBMin;
|
||||
updatePacket.ParcelData.Area = landData.area;
|
||||
@@ -334,7 +337,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
|
||||
if (flags == (uint) ParcelManager.AccessList.Access || flags == (uint) ParcelManager.AccessList.Both)
|
||||
{
|
||||
replyPacket = new ParcelAccessListReplyPacket();
|
||||
replyPacket = (ParcelAccessListReplyPacket) PacketPool.Instance.GetPacket(PacketType.ParcelAccessListReply);
|
||||
replyPacket.Data.AgentID = agentID;
|
||||
replyPacket.Data.Flags = (uint) ParcelManager.AccessList.Access;
|
||||
replyPacket.Data.LocalID = landData.localID;
|
||||
@@ -346,7 +349,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
|
||||
if (flags == (uint) ParcelManager.AccessList.Ban || flags == (uint) ParcelManager.AccessList.Both)
|
||||
{
|
||||
replyPacket = new ParcelAccessListReplyPacket();
|
||||
replyPacket = (ParcelAccessListReplyPacket) PacketPool.Instance.GetPacket(PacketType.ParcelAccessListReply);
|
||||
replyPacket.Data.AgentID = agentID;
|
||||
replyPacket.Data.Flags = (uint) ParcelManager.AccessList.Ban;
|
||||
replyPacket.Data.LocalID = landData.localID;
|
||||
@@ -657,7 +660,8 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
|
||||
bool firstCall = true;
|
||||
int MAX_OBJECTS_PER_PACKET = 251;
|
||||
ForceObjectSelectPacket pack = new ForceObjectSelectPacket();
|
||||
ForceObjectSelectPacket pack = (ForceObjectSelectPacket) PacketPool.Instance.GetPacket(PacketType.ForceObjectSelect);
|
||||
// TODO: don't create new blocks if recycling an old packet
|
||||
ForceObjectSelectPacket.DataBlock[] data;
|
||||
while (resultLocalIDs.Count > 0)
|
||||
{
|
||||
@@ -695,7 +699,9 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
public void sendLandObjectOwners(IClientAPI remote_client)
|
||||
{
|
||||
Dictionary<LLUUID, int> ownersAndCount = new Dictionary<LLUUID, int>();
|
||||
ParcelObjectOwnersReplyPacket pack = new ParcelObjectOwnersReplyPacket();
|
||||
ParcelObjectOwnersReplyPacket pack = (ParcelObjectOwnersReplyPacket) PacketPool.Instance.GetPacket(PacketType.ParcelObjectOwnersReply);
|
||||
// TODO: don't create new blocks if recycling an old packet
|
||||
|
||||
foreach (SceneObjectGroup obj in primsOverMe)
|
||||
{
|
||||
if (!ownersAndCount.ContainsKey(obj.OwnerID))
|
||||
@@ -725,7 +731,6 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
|
||||
num++;
|
||||
}
|
||||
|
||||
pack.Data = dataBlock;
|
||||
}
|
||||
remote_client.OutPacket(pack, ThrottleOutPacketType.Task);
|
||||
@@ -810,4 +815,4 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ using libsecondlife.Packets;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Console;
|
||||
using OpenSim.Region.Environment.Scenes;
|
||||
using OpenSim.Region.Environment.Interfaces;
|
||||
using OpenSim.Region.Physics.Manager;
|
||||
|
||||
namespace OpenSim.Region.Environment.LandManagement
|
||||
@@ -493,7 +494,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
if (byteArrayCount >= LAND_BLOCKS_PER_PACKET)
|
||||
{
|
||||
byteArrayCount = 0;
|
||||
packet = new ParcelOverlayPacket();
|
||||
packet = (ParcelOverlayPacket) PacketPool.Instance.GetPacket(PacketType.ParcelOverlay);
|
||||
packet.ParcelData.Data = byteArray;
|
||||
packet.ParcelData.SequenceID = sequenceID;
|
||||
remote_client.OutPacket((Packet) packet, ThrottleOutPacketType.Task);
|
||||
@@ -856,4 +857,4 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ using System.Collections.Generic;
|
||||
using libsecondlife;
|
||||
using libsecondlife.Packets;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.UserManagement;
|
||||
using OpenSim.Framework.Console;
|
||||
|
||||
namespace OpenSim.Region.Environment.Scenes
|
||||
{
|
||||
@@ -164,7 +166,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
List<AvatarPickerAvatar> AvatarResponses = new List<AvatarPickerAvatar>();
|
||||
AvatarResponses = CommsManager.GenerateAgentPickerRequestResponse(RequestID, query);
|
||||
|
||||
AvatarPickerReplyPacket replyPacket = new AvatarPickerReplyPacket();
|
||||
AvatarPickerReplyPacket replyPacket = (AvatarPickerReplyPacket) PacketPool.Instance.GetPacket(PacketType.AvatarPickerReply);
|
||||
// TODO: don't create new blocks if recycling an old packet
|
||||
|
||||
AvatarPickerReplyPacket.DataBlock[] searchData =
|
||||
new AvatarPickerReplyPacket.DataBlock[AvatarResponses.Count];
|
||||
AvatarPickerReplyPacket.AgentDataBlock agentData = new AvatarPickerReplyPacket.AgentDataBlock();
|
||||
@@ -192,4 +196,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
client.SendAvatarPickerReply(replyPacket);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -474,7 +474,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
if (!avatar.IsChildAgent)
|
||||
avatar.ControllingClient.Kick("The simulator is going down.");
|
||||
|
||||
avatar.ControllingClient.OutPacket(new DisableSimulatorPacket(),
|
||||
avatar.ControllingClient.OutPacket(PacketPool.Instance.GetPacket(libsecondlife.Packets.PacketType.DisableSimulator),
|
||||
ThrottleOutPacketType.Task);
|
||||
});
|
||||
|
||||
@@ -1016,43 +1016,42 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
// It's wrong many times though.
|
||||
|
||||
LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection);
|
||||
|
||||
|
||||
|
||||
|
||||
if (PermissionsMngr.CanRezObject(ownerID, pos))
|
||||
{
|
||||
// rez ON the ground, not IN the ground
|
||||
|
||||
// rez ON the ground, not IN the ground
|
||||
pos.Z += 0.25F;
|
||||
|
||||
|
||||
AddNewPrim(ownerID, pos, rot, shape);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void AddNewPrim(LLUUID ownerID, LLVector3 pos, LLQuaternion rot, PrimitiveBaseShape shape)
|
||||
{
|
||||
SceneObjectGroup sceneOb =
|
||||
new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape);
|
||||
|
||||
AddEntity(sceneOb);
|
||||
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
|
||||
// if grass or tree, make phantom
|
||||
//rootPart.ApplySanePermissions();
|
||||
if ((rootPart.Shape.PCode == 95) || (rootPart.Shape.PCode == 255) || (rootPart.Shape.PCode == 111))
|
||||
{
|
||||
rootPart.AddFlag(LLObject.ObjectFlags.Phantom);
|
||||
//rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom;
|
||||
}
|
||||
// if not phantom, add to physics
|
||||
bool UsePhysics = (((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim);
|
||||
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
|
||||
{
|
||||
rootPart.PhysActor =
|
||||
PhysicsScene.AddPrimShape(
|
||||
rootPart.Name,
|
||||
rootPart.Shape,
|
||||
new PhysicsVector(pos.X, pos.Y, pos.Z),
|
||||
new PhysicsVector(shape.Scale.X, shape.Scale.Y, shape.Scale.Z),
|
||||
new Quaternion(), UsePhysics);
|
||||
// subscribe to physics events.
|
||||
rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
|
||||
SceneObjectGroup sceneOb =
|
||||
new SceneObjectGroup(this, m_regionHandle, ownerID, PrimIDAllocate(), pos, rot, shape);
|
||||
AddEntity(sceneOb);
|
||||
SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID);
|
||||
// if grass or tree, make phantom
|
||||
//rootPart.ApplySanePermissions();
|
||||
if ((rootPart.Shape.PCode == 95) || (rootPart.Shape.PCode == 255) || (rootPart.Shape.PCode == 111))
|
||||
{
|
||||
rootPart.AddFlag(LLObject.ObjectFlags.Phantom);
|
||||
//rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom;
|
||||
}
|
||||
// if not phantom, add to physics
|
||||
bool UsePhysics = (((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) > 0) && m_physicalPrim);
|
||||
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
|
||||
{
|
||||
rootPart.PhysActor =
|
||||
PhysicsScene.AddPrimShape(
|
||||
rootPart.Name,
|
||||
rootPart.Shape,
|
||||
new PhysicsVector(pos.X, pos.Y, pos.Z),
|
||||
new PhysicsVector(shape.Scale.X, shape.Scale.Y, shape.Scale.Z),
|
||||
new Quaternion(), UsePhysics);
|
||||
// subscribe to physics events.
|
||||
rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1499,7 +1498,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
m_innerScene.removeUserCount(true);
|
||||
}
|
||||
// Tell a single agent to disconnect from the region.
|
||||
DisableSimulatorPacket disable = new DisableSimulatorPacket();
|
||||
libsecondlife.Packets.DisableSimulatorPacket disable = (libsecondlife.Packets.DisableSimulatorPacket) PacketPool.Instance.GetPacket(libsecondlife.Packets.PacketType.DisableSimulator);
|
||||
presence.ControllingClient.OutPacket(disable, ThrottleOutPacketType.Task);
|
||||
}
|
||||
}
|
||||
@@ -2246,4 +2245,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,13 +74,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
{
|
||||
get { return m_rootPart.RotationOffset; }
|
||||
}
|
||||
|
||||
public LLUUID GroupID
|
||||
{
|
||||
get { return m_rootPart.GroupID; }
|
||||
set { m_rootPart.GroupID = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
@@ -638,7 +636,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
public void ServiceObjectPropertiesFamilyRequest(IClientAPI remoteClient, LLUUID AgentID, uint RequestFlags)
|
||||
{
|
||||
//RootPart.ServiceObjectPropertiesFamilyRequest(remoteClient, AgentID, RequestFlags);
|
||||
ObjectPropertiesFamilyPacket objPropFamilyPack = new ObjectPropertiesFamilyPacket();
|
||||
ObjectPropertiesFamilyPacket objPropFamilyPack = (ObjectPropertiesFamilyPacket) PacketPool.Instance.GetPacket(PacketType.ObjectPropertiesFamily);
|
||||
// TODO: don't create new blocks if recycling an old packet
|
||||
|
||||
ObjectPropertiesFamilyPacket.ObjectDataBlock objPropDB = new ObjectPropertiesFamilyPacket.ObjectDataBlock();
|
||||
objPropDB.RequestFlags = RequestFlags;
|
||||
objPropDB.ObjectID = RootPart.UUID;
|
||||
@@ -1045,7 +1045,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
/// <param name="client"></param>
|
||||
public void GetProperites(IClientAPI client)
|
||||
{
|
||||
ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
|
||||
ObjectPropertiesPacket proper = (ObjectPropertiesPacket) PacketPool.Instance.GetPacket(PacketType.ObjectProperties);
|
||||
// TODO: don't create new blocks if recycling an old packet
|
||||
|
||||
proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
|
||||
proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
|
||||
proper.ObjectData[0].ItemID = LLUUID.Zero;
|
||||
@@ -1297,6 +1299,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
m_rootPart.PhysActor.IsPhysical);
|
||||
bool UsePhysics = ((m_rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0);
|
||||
m_rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1737,4 +1740,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
m_rootPart.ApplyPhysics();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
private void statsHeartBeat(object sender, EventArgs e)
|
||||
{
|
||||
m_report.Enabled = false;
|
||||
SimStatsPacket statpack = new SimStatsPacket();
|
||||
SimStatsPacket statpack = (SimStatsPacket) PacketPool.Instance.GetPacket(PacketType.SimStats);
|
||||
// TODO: don't create new blocks if recycling an old packet
|
||||
|
||||
SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[11];
|
||||
statpack.Region = new SimStatsPacket.RegionBlock();
|
||||
statpack.Region.RegionX = ReportingRegion.RegionLocX;
|
||||
@@ -241,4 +243,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
m_unAckedBytes += numBytes;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user