mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 00:46:02 +08:00
a few more test changes and cosmetics
This commit is contained in:
@@ -26,21 +26,12 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using Mono.Addins;
|
||||
using OpenMetaverse;
|
||||
using OpenMetaverse.StructuredData;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Servers.HttpServer;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using Caps=OpenSim.Framework.Capabilities.Caps;
|
||||
|
||||
namespace OpenSim.Region.ClientStack.Linden
|
||||
{
|
||||
@@ -185,7 +176,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
Vector3 position, uint ttl, UUID transactionID, bool fromGroup, byte[] binaryBucket,
|
||||
bool checkEstate, int godLevel, bool limitedToEstate)
|
||||
{
|
||||
osUTF8 sb = new osUTF8(512);
|
||||
osUTF8 sb = new(512);
|
||||
LLSDxmlEncode2.AddMap("instantmessage", sb);
|
||||
LLSDxmlEncode2.AddMap("message_params", sb); //messageParams
|
||||
LLSDxmlEncode2.AddElem("type", dialog, sb);
|
||||
@@ -346,7 +337,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
|
||||
public void PlacesQueryReply(UUID avatarID, UUID queryID, UUID transactionID, PlacesReplyData[] replyDataArray)
|
||||
{
|
||||
osUTF8 sb = new osUTF8(256);
|
||||
osUTF8 sb = new(256);
|
||||
LLSDxmlEncode2.AddMap(sb);
|
||||
LLSDxmlEncode2.AddElem("message", "PlacesReplyMessage", sb);
|
||||
LLSDxmlEncode2.AddMap("QueryData[]", sb); LLSDxmlEncode2.AddArray(sb);
|
||||
@@ -476,7 +467,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
|
||||
public static string KeepAliveEvent()
|
||||
{
|
||||
osUTF8 sb = new osUTF8(256);
|
||||
osUTF8 sb = new(256);
|
||||
LLSDxmlEncode2.AddMap(sb);
|
||||
LLSDxmlEncode2.AddElem("message", "FAKEEVENT", sb);
|
||||
LLSDxmlEncode2.AddMap("body", sb);
|
||||
@@ -485,9 +476,63 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public void SendLargeGenericMessage(UUID avatarID, UUID? transationID, UUID? sessionID,
|
||||
string method, UUID invoice, List<string> message)
|
||||
{
|
||||
osUTF8 sb = StartEvent("LargeGenericMessage");
|
||||
LLSDxmlEncode2.AddArrayAndMap("AgentData", sb);
|
||||
LLSDxmlEncode2.AddElem("AgentID", avatarID, sb);
|
||||
if (transationID.HasValue)
|
||||
LLSDxmlEncode2.AddElem("TransactionID", transationID.Value, sb);
|
||||
if (sessionID.HasValue)
|
||||
LLSDxmlEncode2.AddElem("SessionID", sessionID.Value, sb);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
LLSDxmlEncode2.AddArrayAndMap("MethodData", sb);
|
||||
LLSDxmlEncode2.AddElem("Method", method, sb);
|
||||
LLSDxmlEncode2.AddElem("Invoice", invoice, sb);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
LLSDxmlEncode2.AddArrayAndMap("ParamList", sb);
|
||||
foreach (string s in message)
|
||||
LLSDxmlEncode2.AddElem("Parameter", s, sb);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
Enqueue(EndEventToBytes(sb), avatarID);
|
||||
}
|
||||
|
||||
public void SendLargeGenericMessage(UUID avatarID, UUID? transationID, UUID? sessionID,
|
||||
string method, UUID invoice, List<byte[]> message)
|
||||
{
|
||||
osUTF8 sb = StartEvent("LargeGenericMessage");
|
||||
LLSDxmlEncode2.AddArrayAndMap("AgentData", sb);
|
||||
LLSDxmlEncode2.AddElem("AgentID", avatarID, sb);
|
||||
if (transationID.HasValue)
|
||||
LLSDxmlEncode2.AddElem("TransactionID", transationID.Value, sb);
|
||||
if (sessionID.HasValue)
|
||||
LLSDxmlEncode2.AddElem("SessionID", sessionID.Value, sb);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
LLSDxmlEncode2.AddArrayAndMap("MethodData", sb);
|
||||
LLSDxmlEncode2.AddElem("Method", method, sb);
|
||||
LLSDxmlEncode2.AddElem("Invoice", invoice, sb);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
LLSDxmlEncode2.AddArrayAndMap("ParamList", sb);
|
||||
foreach (byte[] b in message)
|
||||
{
|
||||
LLSDxmlEncode2.AddLLSD("<key>Parameter</key><string>", sb);
|
||||
sb.Append(b);
|
||||
LLSDxmlEncode2.AddLLSD("</string>", sb);
|
||||
}
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
Enqueue(EndEventToBytes(sb), avatarID);
|
||||
}
|
||||
|
||||
public byte[] BuildEvent(string eventName, OSD eventBody)
|
||||
{
|
||||
OSDMap llsdEvent = new OSDMap(2);
|
||||
OSDMap llsdEvent = new(2);
|
||||
llsdEvent.Add("message", new OSDString(eventName));
|
||||
llsdEvent.Add("body", eventBody);
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Runtime;
|
||||
@@ -4767,6 +4769,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
List<EntityUpdate> compressedUpdates = null;
|
||||
List<EntityUpdate> terseUpdates = null;
|
||||
List<SceneObjectPart> ObjectAnimationUpdates = null;
|
||||
List<SceneObjectPart> needMaterials = null;
|
||||
|
||||
// Check to see if this is a flush
|
||||
if (maxUpdatesBytes <= 0)
|
||||
@@ -4821,6 +4824,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
|
||||
useCompressUpdate = false;
|
||||
bool istree = false;
|
||||
bool hasMaterialOverride = false;
|
||||
|
||||
if (update.Entity is SceneObjectPart part)
|
||||
{
|
||||
@@ -4965,6 +4969,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
useCompressUpdate = grp.IsViewerCachable;
|
||||
|
||||
istree = (part.Shape.PCode == (byte)PCode.Grass || part.Shape.PCode == (byte)PCode.NewTree || part.Shape.PCode == (byte)PCode.Tree);
|
||||
if(!istree && part.Shape.RenderMaterials is not null &&
|
||||
part.Shape.ReflectionProbe is null &&
|
||||
part.Shape.RenderMaterials.overrides is not null &&
|
||||
part.Shape.RenderMaterials.overrides.Length > 0)
|
||||
hasMaterialOverride = true;
|
||||
}
|
||||
else if (update.Entity is ScenePresence presence)
|
||||
{
|
||||
@@ -5076,6 +5085,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
objectUpdates.Add(update);
|
||||
}
|
||||
if(hasMaterialOverride)
|
||||
{
|
||||
needMaterials ??= new List<SceneObjectPart>(16);
|
||||
needMaterials.Add((SceneObjectPart)update.Entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5090,8 +5104,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
return;
|
||||
|
||||
timeDilation = Utils.FloatZeroOneToushort(m_scene.TimeDilation);
|
||||
|
||||
if(objectUpdates is not null)
|
||||
if (objectUpdates is not null)
|
||||
{
|
||||
//List<EntityUpdate> tau = new List<EntityUpdate>(30);
|
||||
|
||||
@@ -5183,71 +5196,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
}
|
||||
|
||||
/* no zero encode compressed updates
|
||||
if(compressedUpdates != null)
|
||||
{
|
||||
List<EntityUpdate> tau = new List<EntityUpdate>(30);
|
||||
|
||||
UDPPacketBuffer buf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint);
|
||||
byte[] data = buf.Data;
|
||||
|
||||
Buffer.BlockCopy(CompressedObjectHeader, 0, data , 0, 7);
|
||||
|
||||
Utils.UInt64ToBytesSafepos(m_scene.RegionInfo.RegionHandle, data, 7); // 15
|
||||
Utils.UInt16ToBytes(timeDilation, data, 15); // 17
|
||||
|
||||
int countposition = 17; // blocks count position
|
||||
int pos = 18;
|
||||
|
||||
int lastpos = 0;
|
||||
|
||||
int count = 0;
|
||||
foreach (EntityUpdate eu in compressedUpdates)
|
||||
{
|
||||
SceneObjectPart sop = (SceneObjectPart)eu.Entity;
|
||||
if (sop.ParentGroup is null || sop.ParentGroup.IsDeleted)
|
||||
continue;
|
||||
lastpos = pos;
|
||||
CreateCompressedUpdateBlock(sop, mysp, data, ref pos);
|
||||
if (pos < LLUDPServer.MAXPAYLOAD)
|
||||
{
|
||||
tau.Add(eu);
|
||||
++count;
|
||||
}
|
||||
else
|
||||
{
|
||||
// we need more packets
|
||||
UDPPacketBuffer newbuf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint);
|
||||
Buffer.BlockCopy(buf.Data, 0, newbuf.Data, 0, countposition); // start is the same
|
||||
|
||||
buf.Data[countposition] = (byte)count;
|
||||
|
||||
buf.DataLength = lastpos;
|
||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task,
|
||||
delegate (OutgoingPacket oPacket) { ResendPrimUpdates(tau, oPacket); }, false, false);
|
||||
|
||||
buf = newbuf;
|
||||
data = buf.Data;
|
||||
|
||||
pos = 18;
|
||||
// im lazy now, just do last again
|
||||
CreateCompressedUpdateBlock(sop, mysp, data, ref pos);
|
||||
tau = new List<EntityUpdate>(30);
|
||||
tau.Add(eu);
|
||||
count = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
buf.Data[countposition] = (byte)count;
|
||||
buf.DataLength = pos;
|
||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task,
|
||||
delegate (OutgoingPacket oPacket) { ResendPrimUpdates(tau, oPacket); }, false, false);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if (compressedUpdates is not null)
|
||||
{
|
||||
//List<EntityUpdate> tau = new List<EntityUpdate>(30);
|
||||
@@ -5545,6 +5493,70 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
}
|
||||
|
||||
IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>();
|
||||
if (needMaterials is not null && eq is not null)
|
||||
{
|
||||
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out uint regionX, out uint regionY);
|
||||
foreach (SceneObjectPart sop in needMaterials)
|
||||
{
|
||||
Primitive.RenderMaterials.RenderMaterialOverrideEntry[] overrides = sop.Shape.RenderMaterials.overrides;
|
||||
/*
|
||||
osUTF8 sbinner = LLSDxmlEncode2.Start();
|
||||
LLSDxmlEncode2.AddArray(sbinner);
|
||||
LLSDxmlEncode2.AddMap(sbinner);
|
||||
LLSDxmlEncode2.AddElem("object_id", sop.UUID, sbinner);
|
||||
LLSDxmlEncode2.AddElem("region_handle_low", (int)regionX, sbinner);
|
||||
LLSDxmlEncode2.AddElem("region_handle_high", (int)regionY, sbinner);
|
||||
LLSDxmlEncode2.AddArray("sides", sbinner);
|
||||
foreach (Primitive.RenderMaterials.RenderMaterialOverrideEntry ovr in overrides)
|
||||
LLSDxmlEncode2.AddElem(ovr.te_index, sbinner);
|
||||
LLSDxmlEncode2.AddEndArray(sbinner);
|
||||
LLSDxmlEncode2.AddArray("gltf_json", sbinner);
|
||||
foreach (Primitive.RenderMaterials.RenderMaterialOverrideEntry ovr in overrides)
|
||||
{
|
||||
LLSDxmlEncode2.AddElem(ovr.data, sbinner);
|
||||
}
|
||||
LLSDxmlEncode2.AddEndArray(sbinner);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sbinner);
|
||||
LLSDxmlEncode2.AddEnd(sbinner);
|
||||
*/
|
||||
OSDMap data = new OSDMap();
|
||||
data["object_id"] = sop.UUID;
|
||||
//data["region_handle_low"]= (int)regionX;
|
||||
//data["region_handle_high"]= (int)regionY;
|
||||
OSDArray sides = new OSDArray();
|
||||
foreach (Primitive.RenderMaterials.RenderMaterialOverrideEntry ovr in overrides)
|
||||
sides.Add(ovr.te_index);
|
||||
data["sides"] = sides;
|
||||
|
||||
OSDArray gltf = new OSDArray();
|
||||
foreach (Primitive.RenderMaterials.RenderMaterialOverrideEntry ovr in overrides)
|
||||
gltf.Add(ovr.data);
|
||||
data["gltf_json"] = gltf;
|
||||
|
||||
string inner = OSDParser.SerializeLLSDNotationFull(data);
|
||||
|
||||
osUTF8 sb = eq.StartEvent("LargeGenericMessage");
|
||||
LLSDxmlEncode2.AddArrayAndMap("AgentData", sb);
|
||||
LLSDxmlEncode2.AddElem("AgentID", AgentId, sb);
|
||||
//LLSDxmlEncode2.AddElem("TransactionID", transationID.Value, sb);
|
||||
//LLSDxmlEncode2.AddElem("SessionID", sessionID.Value, sb);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
LLSDxmlEncode2.AddArrayAndMap("MethodData", sb);
|
||||
LLSDxmlEncode2.AddElem("Method", "GLTFMaterialOverride", sb);
|
||||
LLSDxmlEncode2.AddElem("Invoice", UUID.Zero, sb);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
LLSDxmlEncode2.AddArrayAndMap("ParamList", sb);
|
||||
//LLSDxmlEncode2.AddElem("Parameter", sbinner, sb);
|
||||
LLSDxmlEncode2.AddElem("Parameter", inner, sb);
|
||||
LLSDxmlEncode2.AddEndMapAndArray(sb);
|
||||
|
||||
//OSUTF8Cached.Release(sbinner);
|
||||
eq.Enqueue(eq.EndEventToBytes(sb), AgentId);
|
||||
}
|
||||
}
|
||||
#endregion Packet Sending
|
||||
|
||||
#region Handle deleted objects
|
||||
|
||||
Reference in New Issue
Block a user